Delta Lake 合并不更新模式(启用自动模式演变)
Posted
技术标签:
【中文标题】Delta Lake 合并不更新模式(启用自动模式演变)【英文标题】:Delta lake merge doesn't update schema (automatic schema evolution enabled) 【发布时间】:2020-11-17 21:54:44 【问题描述】:当我执行下面的代码线I得到一个错误:
deltaTarget.alias('target').merge(df.alias('source'), mergeStatement).whenMatchedUpdateAll().whenNotMatchedInsertAll().execute()
的错误是如下:
AnalysisException:无法解析在UPDATE给出子句中的列目标列的列表 NEW_COLUMN。在“NEW_COLUMN”确实不在目标增量表的模式,而是根据documentation,这应该只是更新增量表的现有架构和添加列。 P>
我也用这个命令启用autoMerge:
spark.conf.set("spark.databricks.delta.schema.autoMerge.enabled ","true")
我不知道究竟是什么原因导致这种错误,因为在过去我能与这些代码精确的零件自动进化增量表的模式。 P>
有什么,我可以俯瞰? P>
【问题讨论】:
可以请你分享,你使用的是什么databricks运行时? SPAN> 在我来说这竟然是一个错误的错误消息,隐藏了真正的问题。 (当然,它的显示错误的错误信息中的错误) - 这是不匹配两场之间类型的我试图在合并中加入上成命令跨度> 【参考方案1】:如果我没记错的话,你需要在 MERGE 操作中使用 insertAll 或 updateAll 选项
【讨论】:
但是操作指定这个他使用updateAll/insertAll(格式为whenMatchedInsertAll等【参考方案2】:我和你有同样的问题,但我发现在 delta Lake docs 中,它可能不支持带有 upsertAll() 和 insertAll() 的部分列; 所以我选择了 upsertExpr() 和 insertExpr() ,大地图包含所有列。
delta lake merge : Schema validation
【讨论】:
以上是关于Delta Lake 合并不更新模式(启用自动模式演变)的主要内容,如果未能解决你的问题,请参考以下文章
数据湖三剑客:Hudi vs Delta Lake vs Iceberg
将数据写入 Azure 数据块中的 Delta Lake 时出现问题(检测到不兼容的格式)