如何从 Snowflake 中的脚本块 COPY INTO 返回结果

问题描述 投票:0回答:1

如何使 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。然后我就可以避免开始/结束。但必须有更好的方法。

非常感谢任何提示!

python snowflake-cloud-data-platform
1个回答
0
投票

使用结果集:

BEGIN
    TRUNCATE TABLE tab;
    
    LET res RESULTSET := ( 
         COPY INTO {target_table}
         FROM {stage_file_name_full_path}
         FILE_FORMAT = (...)
    );

    RETURN TABLE(res);
END;
© www.soinside.com 2019 - 2024. All rights reserved.