【发布时间】:2022-01-04 22:56:41
【问题描述】:
我正在尝试将 spark 数据帧写入现有的增量表。
我确实有多种情况可以将数据保存到不同的表中,如下所示。
场景-01:
我有一个现有的增量表,我必须使用选项mergeSchema 将数据帧写入该表,因为每次加载时架构可能会发生变化。
我通过提供增量表 path
对以下命令执行相同的操作finalDF01.write.format("delta").option("mergeSchema", "true").mode("append") \
.partitionBy("part01","part02").save(finalDF01DestFolderPath)
只想知道这是否可以通过提供现有的 delta TABLE NAME 而不是 delta PATH 来完成。
已通过如下更新数据写入命令解决此问题。
finalDF01.write.format("delta").option("mergeSchema", "true").mode("append") \
.partitionBy("part01","part02").saveAsTable(finalDF01DestTableName)
- 这是正确的方法吗?
场景 02:
如果记录已经存在并且不插入新记录,我必须更新现有表。 为此,我目前正在做如下所示。
spark.sql("SET spark.databricks.delta.schema.autoMerge.enabled = true")
DeltaTable.forPath(DestFolderPath)
.as("t")
.merge(
finalDataFrame.as("s"),
"t.id = s.id AND t.name= s.name")
.whenMatched().updateAll()
.whenNotMatched().insertAll()
.execute()
我尝试了以下脚本。
destMasterTable.as("t")
.merge(
vehMasterDf.as("s"),
"t.id = s.id")
.whenNotMatched().insertAll()
.execute()
但低于错误(即使使用alias 而不是as)。
error: value as is not a member of String
destMasterTable.as("t")
- 这里我也使用 delta 表路径作为目标,有什么方法可以提供 delta TABLE NAME 而不是 TABLE PATH?
最好提供TABLE NAME而不是TABLE PATH,以防我们以后更改表路径不会影响代码。
我在databricks 文档中没有看到任何地方提供表名以及mergeSchema 和autoMerge。
有可能吗?
【问题讨论】:
标签: apache-spark apache-spark-sql databricks delta-lake