Snowflake cloud data platform 批量雪花合并查询

Snowflake cloud data platform 批量雪花合并查询,snowflake-cloud-data-platform,snowflake-schema,Snowflake Cloud Data Platform,Snowflake Schema,我有很多数据是以字典列表的形式存在的。我想将所有数据插入雪花表 表上的主键是ID,我可以接收已经存在ID的新数据,然后我需要更新数据。到目前为止,我所做的是,由于数据量很大,我将批处理数据插入到临时表中,并使用合并查询在主表中更新/插入来自临时表的数据 def batch_data(data, chunk_size): for i in range(0, len(data), chunk_size): yield data[i:i + chunk_

我有很多数据是以字典列表的形式存在的。我想将所有数据插入雪花表

表上的主键是ID,我可以接收已经存在ID的新数据,然后我需要更新数据。到目前为止,我所做的是,由于数据量很大,我将批处理数据插入到临时表中,并使用合并查询在主表中更新/插入来自临时表的数据

    def batch_data(data, chunk_size):
        for i in range(0, len(data), chunk_size):
            yield data[i:i + chunk_size]

    def upsert_user_data(self, user_data):
        columns = ["\"" + x + "\"" for x in user_data[0].keys()]
        values = ['?' for _ in user_data[0].keys()]
    
        for chunk in batch_data(user_data, 1000):

            sql = f"INSERT INTO TEMP ({','.join(columns)}) VALUES ({','.join(values)});"
            print(sql)
            data_to_load = [[x for x in i.values()] for i in chunk]
            snowflake_client.run(sql, tuple(data_to_load))

        sql = "MERGE INTO USER USING (SELECT ID AS TID, NAME AS TNAME, STATUS AS TSTATUS FROM TEMP) AS TEMPTABLE" \
        "ON USER.ID = TEMPTABLE.TID WHEN MATCHED THEN UPDATE SET USER.NAME = TEMPTABLE.TNAME, USER.STATUS = TEMPTABLE.TSTATUS " \
        "WHEN NOT MATCHED THEN INSERT (ID, NAME, STATUS) VALUES (TEMPTABLE.TID, TEMPTABLE.TNAME, TEMPTABLE.TSTATUS);"

        snowflake_client.run(sql)


有什么方法可以删除临时表并以批处理方式仅使用合并查询吗?

尝试在配置单元中经常使用的批处理方法(union all+row_full join数并重新加载所有表):我不确定我是否理解:为什么需要临时表?是否通过运行多个插入来导入数据?您是否考虑过将它们作为外部表/文件导入?@FelipeHoffa感谢您的建议。