【问题标题】:Databricks: Merge dataframe into Azure synapse tableDatabricks:将数据框合并到 Azure 突触表中
【发布时间】:2021-03-13 05:39:12
【问题描述】:

有什么方法可以将数据框合并到 Azure Synapse 表中? 我为 dataframe.write.mode() 找到了什么

只允许追加和覆盖...有什么解决办法吗?

【问题讨论】:

    标签: databricks azure-synapse


    【解决方案1】:

    如果您的意思是 upsert:Synapse 不支持 upsert

    你必须自己做 delete 后跟 insert 来模仿 upsert。

    这假设您的新数据是完整的(即它不仅容器更改列值,而且具有所有列值)。如果没有,那么您将不得不从 Synapse 读取另一个数据帧,将它们合并到 Spark/Databricks 中,然后执行 upsert。

    您也可以使用 Synapse 中的临时表执行此操作,并使用 Synapse 的计算来执行 upsert 而不是 Spark 的计算。


    如果没有,那么您将不得不从 Synapse 读取另一个数据帧,将它们合并到 Spark/Databricks 中,然后执行 upsert。

    详细说明:

    如果你在数据库中有这个:

    k,a,b
    1,1,1
    2,2,2
    

    这是您尝试写入 DB 的数据框(例如 df_new):

    k,a
    1,11
    3,3
    

    这就是您期望数据库在更新后的样子:

    k,a,b
    1,11,1
    2,2,2
    3,3,null
    

    然后你需要创建一个数据框df_current_db,它有:

    k,a,b
    1,1,1
    

    注意:您只需要存在于df_new 中的密钥,而不是全部。

    然后合并df_current_dbdf_new 以创建一个新的df_upsert,它具有:

    k,a,b
    1,11,1
    3,3,null
    

    最后你必须更新:

    • delete from DB where k in (select k from df_upsert)
    • insert into DB (select * from df_upsert)

    【讨论】:

    • "如果没有,那么您将不得不从 Synapse 读取另一个数据帧,将它们合并到 Spark/Databricks 中,然后执行 upsert。"
    • @mytabi 更新为详细说明。 HTH。
    • df_upsert 需要先放回 Synapse 数据库吗?在删除和插入之前?因为我认为删除和插入不能直接对从突触读取的数据帧执行......
    • @mytabi 将df_upsert 放入数据库是insert into DB (select * from df_upsert) 的最后一步。是的,除非您将数据框 write 更改为 DB,否则更改数据框对 DB 内容没有影响。
    猜你喜欢
    • 2020-02-03
    • 2022-08-02
    • 2018-11-19
    • 2021-03-19
    • 2017-10-21
    • 1970-01-01
    • 2021-11-23
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多