2

我想编写一个具有与默认表设置不同的分区规范的 Iceberg 表,这样当我运行数据压缩时,数据将根据默认规范进行压缩(尽可能使用write-format配置)

例如:

df.writeStream
  .format("iceberg")
  .outputMode("append")
  .options(Map("path" ->tableIdentifier,
                  "checkpointLocation" -> checkpointLocation,
                  "fanout-enabled" -> "true",
                   "spec-id" ->"3"))

从理论上讲,它应该没问题,因为 Iceberg 知道如何处理这里提到的多个分区规范Partition Evolution。实际上,我还没有找到一种方法来做到这一点。

有什么办法可以做到这一点?

4

1 回答 1

0

根据文档Streaming writes,我认为您在编写流时不能指定分区。也许您可以尝试在写入之前添加新的分区字段,使用可用于 Spark 3.x 的ALTER TABLE SQL 扩展:

ALTER TABLE tmp.db.sample ADD PARTITION FIELD years(date)

对于批量写入,现在partitionBy使用 Spark 3 新DataFrameWriterV2API 支持分区表达式:

data.writeTo("tmp.db.table")
    .tableProperty("write.format.default", "orc")
    .partitionBy($"level", days($"ts"))
    .createOrReplace()
于 2022-01-02T14:56:06.310 回答