【发布时间】: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