特性与限制

师成师成· 更新于 2026-09-28· 阅读 5 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

功能

同步表格式元数据(TableFormatSync)

Apache XTable™ (Incubating) 使用户能够将元数据从一种表格式转换为另一种表格式。

Apache XTable™ (Incubating) 提供两种同步模式:"增量"(incremental)和"全量"(full)。增量模式更为轻量,性能更好,尤其是在大型表上。如果出现任何导致增量模式无法正常工作的情况,工具会回退到全量同步模式。

此同步为用户提供以下能力:

  1. 同步数据文件及其列级统计信息和分区元数据

  2. 源端的 Schema 变更能反映到目标表的元数据中

  3. 目标表格式的元数据维护。

    • 对于 Hudi,未被引用的文件会被标记为已清理,以控制元数据表的大小。
    • 对于 Iceberg,快照将在配置的时间过后过期。
    • 对于 Delta,事务日志将按配置的时间长度保留。

同步外部目录中的表格式元数据(CatalogSync)

除了同步表格式元数据之外,Apache XTable™ (Incubating) 现已允许用户持续、增量地同步多个外部目录中表的元数据。这消除了在多个目录中手动注册表的步骤,从而减少摩擦,并通过避免目录锁定来提升灵活性。目前支持的两个目录是 HMS 和 AWS Glue,对其他目录(Unity、Apache Polaris、Apache Gravitino、DataHub)的支持即将推出。

限制与兼容性说明

通用

  • 目前仅支持表的 Copy-on-Write 或 Read-Optimized 视图。这意味着只会同步底层的 parquet 文件,而 Hudi 的日志文件以及 Delta 和 Iceberg 的删除向量不会被同步捕获。

Hudi

  • 读取 Hudi 目标表时需要 Hudi 0.14.0 或更高版本。用户还需要在读取数据时按需启用

    • 元数据表(hoodie.metadata.enable=true)以及
    • Hive 风格分区(hoodie.datasource.write.hive_style_partitioning=true)。
  • 从 Hudi 同步到 Iceberg 时,请务必启用 parquet.avro.write-old-list-structure=false,以确保与列表类型的正确兼容。

  • 当使用 Hudi 作为源、Iceberg 作为目标时,可能需要在 parquet Schema 中设置字段 ID。要启用此功能,请按照此处的说明操作。

Delta

  • 当使用 Delta 作为 Iceberg 目标表的数据源时,你可能需要在 Parquet schema 中设置字段 ID。要启用此功能,请按照此处的说明启用列映射。
  • 当 Delta 作为数据源时,生成列(Generated Columns)不会同步到目标 schema。对于基于生成列分区的表,仅提供有限的支持。例如,我们支持将时间戳转换为 yyyy-MM-dd 格式的日期函数。如果你认为某些场景应当得到支持,请提交 GitHub issue 或 pull request。

Parquet

  • 不支持 Parquet 源目录中跨文件的 schema 演进。XTable 会从文件系统修改时间最新的文件的 footer 中推导表 schema;它不会合并或全面校验所有文件之间的 schema。如果文件的 schema 不一致,同步可能会使用无法代表所有文件的 schema,或者在处理这些文件时失败。复制或恢复文件也可能改变其修改时间,从而改变 XTable 所选择的 schema。
  • 仅存在于目录路径中的 Hive 风格分区列不受支持。当配置了分区提取时,XTable 会针对所选文件的 schema 解析每个源字段。如果某个分区列仅存在于目录路径中(例如 region=eu/),XTable 无法合成该字段或推断其类型,同步将会失败。

评论

登录后参与评论

正在加载评论…