如何在编写蒸汽火花数据帧时指定增量表属性

Joh*_*ack 5 apache-spark databricks spark-structured-streaming delta-lake

假设我有一个流数据帧,并且我正在将其写入 Databricks Delta Lake:

someStreamingDf.writeStream
  .format("delta")
  .outputMode("append")
  .start("targetPath")

Run Code Online (Sandbox Code Playgroud)

然后从中创建一个增量表:

spark.sql("CREATE TABLE <TBL_NAME> USING DELTA LOCATION '<targetPath>'
TBLPROPERTIES ('delta.autoOptimize.optimizeWrite'=true)")

Run Code Online (Sandbox Code Playgroud)

失败了AnalysisException: The specified properties do not match the existing properties at <targetPath>

我知道我可以预先创建一个表:

CREATE TABLE <TBL_NAME> (
  //columns
) 
USING DELTA LOCATION "< targetPath >"
TBLPROPERTIES (
  "delta.autoOptimize.optimizeWrite" = true, 
  ....
) 
Run Code Online (Sandbox Code Playgroud)

然后就写入它,但是使用所有列及其类型编写此 SQL 看起来像是一些额外/不必要的工作。那么有没有办法在写入增量表(第一次)时而不是事先指定这些 TBLPROPERTIES?

Ale*_*Ott 5

如果您查看文档,您会发现可以设置以下属性:

spark.conf.set(
  "spark.databricks.delta.properties.defaults.autoOptimize.optimizeWrite", "true")
Run Code Online (Sandbox Code Playgroud)

然后所有新创建的表都将delta.autoOptimize.optimizeWrite设置为true.

另一种方法-创建不带选项的表,然后尝试执行alter table set tblprperties(虽然未测试)