Как предоставить шаблон системной даты в команде «Копировать файл» в Snowflake

У меня есть команда «Копировать файлы» в Snowflake, которая работает нормально. Но в настоящее время дата 20240822 жестко запрограммирована в этом шаблоне, и я хочу предоставить sysdate, чтобы он мог ежедневно копировать файлы из папки sysdate.

COPY FILES
INTO @STG_RAW_DPT_UPLOAD_ARCHIVE
FROM @STG_RAW_DPT_UPLOAD
PATTERN = '^dpt20240822.*'

Что-то вроде PATTERN = CONCAT('^dpt', REPLACE(CURRENT_DATE(), '-'), '.*')? Не уверен, что можно объявить это таким образом.

Wiktor Stribiżew 22.08.2024 12:26

Я попробовал несколько других способов использования || и Concat, но не получилось

Andrew 22.08.2024 13:00

Хм, не могли бы вы попробовать определить переменную типа SET target_pattern = CONCAT('^dpt', REPLACE(SysDate(), '-', ''), '.*');, а затем использовать ее как PATTERN = :target_pattern?

Wiktor Stribiżew 22.08.2024 13:03

SET target_pattern не работает и выдает ошибку 000002 (0A000): неподдерживаемая функция «назначение из непостоянного исходного выражения».

Andrew 22.08.2024 13:08

Хорошо, тогда это еще сложнее.

Wiktor Stribiżew 22.08.2024 13:11

не понимаю, почему Снежинка делает это таким сложным

Andrew 22.08.2024 13:20

Я думаю, вам нужно сделать это в хранимой процедуре (или блоке кода) и динамически создать оператор COPY INTO.

NickW 22.08.2024 13:50

Использование переменной сеанса: SET p = (SELECT CONCAT('''^dpt', TO_VARCHAR(CURRENT_DATE(), 'YYYYMMDD'), '.*''')); COPY FILES INTO @STG_RAW_DPT_UPLOAD_ARCHIVE FROM @STG_RAW_DPT_UPLOAD PATTERN = $p;

Lukasz Szozda 22.08.2024 17:16
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
0
8
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если ваша команда копирования не превышает 256 символов, вы можете сохранить ее в переменной сеанса и вместо этого выполнить ее.

set stmt = 'copy files into @that_stage from @this_stage pattern='||$$'$$||to_char(current_date,'.*dptyyyymmdd.*'||$$'$$);

select $stmt;

execute immediate $stmt;

Теперь я получаю сообщение об ошибке. Переменная сеанса «$STMT» не существует», когда я пытаюсь использовать вашу логику при создании задачи. Когда я запускаю это без задачи, это работает. В чем может быть проблема?

Andrew 23.08.2024 16:26

Вам придется создать задачу как блок сценария, используя переменные сценария вместо переменных сеанса. См., например, здесь docs.snowflake.com/en/sql-reference/sql/…. Ваш текущий вопрос четко определен, поэтому давайте не будем его путать. Предлагаю задать новый вопрос в контексте задач.

Rajat 23.08.2024 16:34

спасибо, я задам новый вопрос, который находится здесь: stackoverflow.com/questions/78906485/…

Andrew 23.08.2024 16:54

не могли бы вы дать ответ на этот новый вопрос, который вы уже упомянули здесь?

Andrew 26.08.2024 13:08

Другие вопросы по теме