【问题标题】:Conditional Upserting into a delta sink with Azure Data Flow in Azure Data Factory在 Azure 数据工厂中使用 Azure 数据流在增量接收器中进行条件更新
【发布时间】:2021-06-10 13:57:39
【问题描述】:

我在 Azure 数据流模块中有一个接收器增量,我用来更新它的数据帧有一个用于业务键的哈希键和一个用于所有列内容的哈希键。
我想将新的散列业务散列键插入接收器,并且仅在内容散列键不同时才更新现有的散列键(基本上仅在内容散列更改已存在的业务键时才更新)。
你认为我可以使用“Alter Row Policies”以某种方式做到这一点吗?

我主要在寻找类似于 pyspark 中的“合并”选项的解决方案,在该选项中,我可以针对业务密钥是否匹配 (link) 制定不同的策略。

另外,我希望在写出沉没之前避免加入;因为,我想避免在管道第一次运行时不得不处理数据湖中没有任何数据的问题。我正在编写一个可重用于不同模式的模板,所以除非我可以在接收器增量表不存在时创建一个空数据帧,并且模式与连接的另一端匹配,否则我认为我不能使用加入解决方案。

【问题讨论】:

    标签: azure-data-factory-2 dataflow delta-lake azure-data-flow


    【解决方案1】:
     if (!spark.catalog.tableExists("default", table_name)) {
      spark.sql(s"create table $table_name using delta as select * from source_table_$table_name")
    }
    else {
      spark.sql(
        s"""
           |MERGE INTO $targetTableName
           |USING $updatesTableName
           |ON $targetTableName.id = $updatesTableName.id
           |WHEN MATCHED THEN
           |  UPDATE SET $targetTableName.ts = $updatesTableName.ts
           |WHEN NOT MATCHED THEN
           |  INSERT (id, par, ts) VALUES ($updatesTableName.id, $updatesTableName.par, $updatesTableName.ts)
      """.stripMargin)
    }
    

    【讨论】:

    • 感谢您的评论。我应该使用数据流中的哪个模块来运行这段代码?
    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2022-06-23
    • 2021-08-23
    • 2023-02-12
    • 2020-07-06
    • 1970-01-01
    相关资源
    最近更新 更多