Как использовать шаблон с текущей датой на этапе S3 Bucket - PullRequest
0 голосов
/ 01 ноября 2019

Я отправляю это от имени Пользователя Снежинки ...

У меня есть следующие файлы на моем этапе (a_some_stage)

s3: // bucket_name_01 / folder_01/sub_folder_01/some_file_20190930.csv

s3: //bucket_name_01/folder_01/sub_folder_01/some_file_20190929.csv

s3: //bucket_name_01/folder_01/scs1010_0_file_file_01_01_1_0_f_f_0_f_0_f_0_f_0_0_0_1_0_0_0_0_0_0_0_0_1_0_1_1мне нужно перечислить имя файла сегодня, и я пытаюсь использовать ниже функции и его неправильно.

list @ a_somestage

pattern = '. / some_file_in_s3_ to_char (current_date (), 'ГГГГММДД') ||. '

Я пытаюсь добавить to_char (current_date (),' YYYYMMDD '), чтобы получить файл на основе текущей даты. Но я не могу сделать это в шаблоне. Так что есть идеи, как добавить текущую дату и шаблон? спасибо.

Рекомендация 1

вы не можете напрямую использовать функцию в команде COPY, но если вы оберните эту команду в хранимую процедуру, вы будетебыть в состоянии создать переменную для получения текущей даты, а затем создать другую переменную для объединения первой части команды копирования с переменной даты. После этого вы можете выполнить команду.

Рекомендация 2

Я думаю, что мы не можем передать функцию SQL в шаблон вместо того, чтобы использовать обычнуювыражение.

Кто-нибудь успешно нашел решение для подобного варианта использования?

Ответы [ 2 ]

1 голос
/ 02 ноября 2019

Команды COPY (и я подозреваю, что и другие расширенные команды Snowflake) не поддерживают выражения для строковых констант и также не используют переменные SQL.

Пользователь Snowflake не сообщает подробностей о том, как этапсписок будет использоваться.

Единственное решение, которое я могу придумать, - это использование динамического SQL внутри хранимой процедуры ( Рекомендация 1 ). Результирующий набор может быть использован внутри процедуры или объединен и возвращен как STRING.

0 голосов
/ 05 ноября 2019

Один из способов отображения файлов, в которых name содержит текущую дату, без использования хранимых процедур, - это использовать RESULT_SCAN вместе с последним идентификатором запроса.

-- run list command to populate result history
LIST @TEST_STAGE PATTERN = '[A-z0-9_/]*(.csv)'; 
-- select names from the result scan of the last query
SELECT "name" FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE "name" LIKE '%'||TO_CHAR(CURRENT_DATE)||'%';

Запустили это раньше, чтобы установить правильную датуформат current_date ALTER SESSION SET DATE_OUTPUT_FORMAT = 'YYYYMMDD';

Редактировать: это, конечно, будет работать только для перечисления имен, если вы хотите использовать COPY или подобное, идти с хранимыми процедурами.

...