public static DefaultKeyedFile.FileMeta parseChange(String path, Long sequenceNumber) {
    String fileName = TableFileUtil.getFileName(path);
    Matcher matcher = KEYED_FILE_NAME_PATTERN.matcher(fileName);
    if (matchMixedFileFormat(matcher)) {
      DataFileType type;
      long transactionId;
      long nodeId = Long.parseLong(matcher.group(1));
      type = DataFileType.ofShortName(matcher.group(2));
      transactionId = Long.parseLong(matcher.group(3));
      Preconditions.checkArgument(
          transactionId > 0 || sequenceNumber != null, "Data sequence number of File is null");
      transactionId = transactionId == 0 ? sequenceNumber : transactionId;
      DataTreeNode node = DataTreeNode.ofId(nodeId);
      return new DefaultKeyedFile.FileMeta(transactionId, type, node);
    } else {
      Preconditions.checkArgument(sequenceNumber != null, "Data sequence number of File is null");
      return new DefaultKeyedFile.FileMeta(
          sequenceNumber, DataFileType.INSERT_FILE, DataTreeNode.ROOT);
    }
  }
Parse FileMeta for ChangeStore. Flink write transactionId as 0. If it is not file format of
mixed-format tables or transactionId from path is 0, we set transactionId as iceberg
sequenceNumber.

@param path file path
@param sequenceNumber iceberg sequenceNumber
@return fileMeta
amoro-format-iceberg/src/main/java/org/apache/amoro/data/FileNameRules.java