В нашем 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 в блок сценария 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/END. Но должен быть лучший способ.
Любые подсказки приветствуются!
Подробнее здесь: https://stackoverflow.com/questions/790 ... -snowflake