我有以下基于某些键的合并和截断表的过程.该过程看起来很好,但似乎存在一些性能问题
CREATE OR REPLACE PROCEDURE table_merge(keys Array)
RETURNS STRING
LANGUAGE PYTHON
RUNTIME_VERSION = '3.8'
PACKAGES = ('snowflake-snowpark-python')
HANDLER = 'reverse_str'
AS
$$
from snowflake.snowpark.functions import when_matached
def table_merge(session,keys):
df_src= session.table(source_table)
df_tgt= session.table(target_table)
key_conditon = None
for key in deletion_keys:
if condition = None:
condition = df_src[key]==df_tgt[key]
else:
condition = condition & (df_src[key]==df_tgt[key])
df_tgt.merge(df_src, condition, [when_matched().delete()])
return 'Pass'
$$;
当我运行上面的查询时,即使是3条记录也需要大约28秒?
因此,为了使用普通的snowflake查询判断执行情况,我try 使用以下查询
merge into target_table t using (select "ID", "NAME" from source_table) s on s.ID = t.ID and s.NAME = t.NAME when matched then delete
但上面的查询已执行,但未按预期合并
预期数量:
- 将数据从源合并到目标
- 合并时,如果源中的键与目标表匹配,则截断目标表中的这些行,然后将源中的新数据插入到目标中
- Truncate的键应该是动态的,因此查询语句应该能够根据传递给过程的键截断行.
有什么改进查询的解决方案或建议吗?