【问题标题】:Update Snowflake table更新雪花表
【发布时间】:2021-06-18 01:21:49
【问题描述】:

我正在尝试通过数据块更新雪花表。我在其中创建了 databricks 临时表并创建了基于临时表的查询,该表将更新雪花表。但我不确定是否有可能有人可以帮我解决这个问题。

query = """MERGE INTO dw_3nf.temp_tgt target
USING
    (SELECT source1.id as mergekey, 0 as deleted, source1.* FROM dw_3nf.temp_src as source1
    UNION ALL
    SELECT NULL as mergekey,0 as deleted, source1.*
    FROM dw_3nf.temp_src source1 JOIN dw_3nf.temp_tgt target
    ON source1.id = target.id
    WHERE target.live_flag = 1 AND source1.name <> target.name
    UNION ALL
    SELECT target.id as mergekey, 1 as deleted, source.*
    FROM dw_3nf.temp_tgt as target left join dw_3nf.temp_src as source
    ON source.id = target.id 
    WHERE source.id is null and target.live_flag=1
    ) staged_updates
    ON target.id = mergekey
    WHEN MATCHED AND target.live_flag = 1 AND staged_updates.name <> target.name THEN
    UPDATE SET live_flag = 0
    WHEN MATCHED AND staged_updates.deleted = 1 and target.live_flag=1 THEN
    UPDATE SET live_flag=2
    WHEN NOT MATCHED THEN
    INSERT (id, name, live_flag)
    VALUES(staged_updates.id,staged_updates.name,1)"""
df.createOrReplaceTempView("source")
spark.write \
  .format("snowflake") \
  .options(**options) \
  .option("query", query) \
  .save()```

【问题讨论】:

  • 你问的问题是什么,“是正确的雪花 sql”还是“这是正确的 databircs 代码”还是“做这些匹配”,我这样说是因为如果你可以从 databricks 推送通过插入到一个新表中,然后从雪花中将该数据合并到目标中,然后将这两个任务组合在一起也应该可以工作。
  • 查询是正确的,但我正在寻找一种从数据块中运行的方法,不确定这是否可行。我想了解我们是否可以通过依赖于 databricks 临时表的 databricks 在雪花上执行 sql。你是对的,我们可以创建将数据块临时表替换为雪花,但我们被要求不要创建任何临时表。所以我在想办法。

标签: snowflake-cloud-data-platform databricks scd


【解决方案1】:

退后一步,想想系统。

'Databricks 集群' '雪花集群'

您希望避免两个系统之间进行过多的通信,因为网络速度很慢。 所以我会推荐:

  1. 将您的数据复制/插入到雪花中并在此处转换合并
  2. 准备数据块中的数据,将结果复制到雪花并在那里合并

那么你能否在一个语句中从数据块表中合并到雪花表中,我不知道。你是否应该这样做。应该不会吧。

【讨论】:

  • 你是对的 Zephro,这就是我所经历的我们做不到的。我只想检查是否有任何选项可以下推雪花。
猜你喜欢
  • 1970-01-01
  • 2021-04-04
  • 2021-07-17
  • 2020-04-08
  • 1970-01-01
  • 2022-06-29
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多