我想编写一个具有与默认表设置不同的分区规范的 Iceberg 表,以便当我运行数据压缩时,数据将根据默认规范进行压缩(尽可能使用
write-format
配置)
例如:
df.writeStream
.format("iceberg")
.outputMode("append")
.options(Map("path" ->tableIdentifier,
"checkpointLocation" -> checkpointLocation,
"fanout-enabled" -> "true",
"spec-id" ->"3"))
理论上,应该没问题,因为 Iceberg 知道如何处理多个分区规范,如此处分区进化中提到的。 实际上,我还没有找到办法。
有什么办法可以实现这个目标吗?
根据文档流写入,我认为您在写入流时无法指定分区。也许您可以尝试在写入之前添加新的分区字段,使用适用于 Spark 3.x 的ALTER TABLE SQL 扩展:
ALTER TABLE tmp.db.sample ADD PARTITION FIELD years(date)
对于 批量写入,现在使用 Spark 3 新的
partitionBy
API 在 DataFrameWriterV2
中支持分区表达式:
data.writeTo("tmp.db.table")
.tableProperty("write.format.default", "orc")
.partitionBy($"level", days($"ts"))
.createOrReplace()