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?
如果您查看文档,您会发现可以设置以下属性:
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(虽然未测试)
| 归档时间: |
|
| 查看次数: |
7113 次 |
| 最近记录: |