如何在编写 steaming spark 数据帧时指定 delta table 属性
How to specify delta table properties when writing a steaming spark dataframe
假设我有一个流数据帧,我正在将它写入 Databricks Delta Lake:
someStreamingDf.writeStream
.format("delta")
.outputMode("append")
.start("targetPath")
然后从中创建一个增量 table:
spark.sql("CREATE TABLE <TBL_NAME> USING DELTA LOCATION '<targetPath>'
TBLPROPERTIES ('delta.autoOptimize.optimizeWrite'=true)")
失败 AnalysisException: The specified properties do not match the existing properties at <targetPath>
。
我知道我可以预先创建一个 table:
CREATE TABLE <TBL_NAME> (
//columns
)
USING DELTA LOCATION "< targetPath >"
TBLPROPERTIES (
"delta.autoOptimize.optimizeWrite" = true,
....
)
然后直接写入它,但是用所有列及其类型编写这个 SQL 看起来有点像 extra/unnecessary 的工作。那么有没有办法在写入增量时指定这些 TBLPROPERTIES table(第一次)而不是事先?
如果你查看 documentation,你会发现你可以设置以下 属性:
spark.conf.set(
"spark.databricks.delta.properties.defaults.autoOptimize.optimizeWrite", "true")
然后所有新创建的 table 将 delta.autoOptimize.optimizeWrite
设置为 true
。
另一种方法 - 创建 table 不带选项,然后尝试执行 alter table set tblprperties
(尽管未测试)
假设我有一个流数据帧,我正在将它写入 Databricks Delta Lake:
someStreamingDf.writeStream
.format("delta")
.outputMode("append")
.start("targetPath")
然后从中创建一个增量 table:
spark.sql("CREATE TABLE <TBL_NAME> USING DELTA LOCATION '<targetPath>'
TBLPROPERTIES ('delta.autoOptimize.optimizeWrite'=true)")
失败 AnalysisException: The specified properties do not match the existing properties at <targetPath>
。
我知道我可以预先创建一个 table:
CREATE TABLE <TBL_NAME> (
//columns
)
USING DELTA LOCATION "< targetPath >"
TBLPROPERTIES (
"delta.autoOptimize.optimizeWrite" = true,
....
)
然后直接写入它,但是用所有列及其类型编写这个 SQL 看起来有点像 extra/unnecessary 的工作。那么有没有办法在写入增量时指定这些 TBLPROPERTIES table(第一次)而不是事先?
如果你查看 documentation,你会发现你可以设置以下 属性:
spark.conf.set(
"spark.databricks.delta.properties.defaults.autoOptimize.optimizeWrite", "true")
然后所有新创建的 table 将 delta.autoOptimize.optimizeWrite
设置为 true
。
另一种方法 - 创建 table 不带选项,然后尝试执行 alter table set tblprperties
(尽管未测试)