public EncryptedOutputFile newOutputFile(TaskWriterKey key) {
    String fileLocation = fileLocation(key.getPartitionKey(), generateFilename(key));
    OutputFile outputFile = io.newOutputFile(fileLocation);
    return encryptionManager.encrypt(outputFile);
  }
Factory responsible for generating data file names for change and base location

<p>File name
pattern:${tree_node_id}-${file_type}-${transaction_id}-${partition_id}-${task_id}-{operation_id}-{count}

<ul>
  <li>tree_node_id: id of {@link DataTreeNode} the file belong
  <li>file_type: short name of file's {@link DataFileType}
  <li>transaction_id: id of transaction the file added
  <li>partition_id: id of partitioned data in parallel engine like spark & flink
  <li>task_id: id of write task within partition
  <li>operation_id: a random id to avoid duplicated file name
  <li>count: auto increment count within writer
</ul>
amoro-format-iceberg/src/main/java/org/apache/amoro/io/writer/CommonOutputFileFactory.java