Синтаксис для определения пути внутри части этапа или местоположения оператора COPY INTO
не позволяет функциям динамически определять его в SQL.
Однако, Вы можете использовать хранимую процедуру для выполнения sh построения динамических c запросов, используя JavaScript API даты и некоторое форматирование строки .
Вот очень тривиальный пример для вашего варианта использования, с некоторым кодом , адаптированным из другого вопроса :
CREATE OR REPLACE PROCEDURE COPY_INTO_PROCEDURE_EXAMPLE()
RETURNS VARIANT
LANGUAGE JAVASCRIPT
EXECUTE AS CALLER
AS
$$
var rows = [];
var n = new Date();
// May need refinement to zero-pad some values or achieve a specific format
var datetime = `${n.getFullYear()}-${n.getMonth() + 1}-${n.getDate()}-${n.getHours()}-${n.getMinutes()}-${n.getSeconds()}`;
var st = snowflake.createStatement({
sqlText: `COPY INTO '@s3bucket/${datetime}_something.csv.gz' FROM (SELECT * FROM mytable) FILE_FORMAT=(TYPE=CSV FIELD_OPTIONALLY_ENCLOSED_BY='"' COMPRESSION='gzip') SINGLE=TRUE HEADER=TRUE;`
});
var result = st.execute();
result.next();
rows.push(result.getColumnValue(1))
return rows;
$$
Чтобы выполнить, выполните:
CALL COPY_INTO_PROCEDURE_EXAMPLE();
Выше не хватает обработанной обработки формата даты (месяцы заполнения, дни, часы, минуты, секунды), обработки ошибок (если COPY INTO
не удается), параметризации входного запроса и т. Д. c. но это должно дать общее представление о том, как этого добиться.