如何使 Snowflake / Snowpark 脚本块返回 COPY INTO 语句的响应?
在我们的 ELT 管道中,我每天使用 Snowpark 将数据从 S3 阶段复制到表中,如下所示:
sql_copy_into = f"""
COPY INTO {target_table}
FROM {stage_file_name_full_path}
FILE_FORMAT = (
TYPE = CSV
COMPRESSION = 'AUTO'
FIELD_DELIMITER = {field_delimiter}
)
ON_ERROR = CONTINUE;
"""
response = session.sql(sql_copy_into)
results = response.collect()
现在我想将 COPY INTO 的结果存储在日志表中,到目前为止该表运行良好。
但是,一旦我将 COPY INTO 包装到 Snowflake 脚本块中:
sql_copy_into = f"""
BEGIN
TRUNCATE TABLE {target_table};
COPY INTO {target_table}
FROM {stage_file_name_full_path}
FILE_FORMAT = (...)
ON_ERROR = CONTINUE;
END;
"""
response = session.sql(sql_copy_into)
results = response.collect()
然后我得到的结果为
[Row(anonymous block=None)]
看起来脚本块没有返回任何内容。
如何使脚本块返回 COPY INTO 语句的响应?
我已经阅读了RETURN命令,但我不知道这对我有什么帮助。
我看到的唯一选择是不发送两个不同的 SQL 语句,一个用于 TRUNCATE,另一个用于 COPY INTO。然后我就可以避免开始/结束。但必须有更好的方法。
非常感谢任何提示!
使用结果集:
BEGIN
TRUNCATE TABLE tab;
LET res RESULTSET := (
COPY INTO {target_table}
FROM {stage_file_name_full_path}
FILE_FORMAT = (...)
);
RETURN TABLE(res);
END;