【问题标题】:Delta lake merge doesn't update schema (automatic schema evolution enabled)Delta Lake 合并不更新模式(启用自动模式演变)
【发布时间】: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>
  • 在我来说这竟然是一个错误的错误消息,隐藏了真正的问题。 (当然,它的显示错误的错误信息中的错误) - 这是不匹配两场之间类型的我试图在合并中加入上成命令跨度>

标签: pyspark databricks delta-lake


【解决方案1】:

如果我没记错的话,你需要在 MERGE 操作中使用 insertAll 或 updateAll 选项

【讨论】:

  • 但是操作指定这个他使用updateAll/insertAll(格式为whenMatchedInsertAll等
【解决方案2】:

我和你有同样的问题,但我发现在 delta Lake docs 中,它可能不支持带有 upsertAll() 和 insertAll() 的部分列; 所以我选择了 upsertExpr() 和 insertExpr() ,大地图包含所有列。

delta lake merge : Schema validation

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 2021-07-10
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多