У меня есть команда «Копировать файлы» в Snowflake, которая работает нормально. Но в настоящее время дата 20240822
жестко запрограммирована в этом шаблоне, и я хочу предоставить sysdate, чтобы он мог ежедневно копировать файлы из папки sysdate.
COPY FILES
INTO @STG_RAW_DPT_UPLOAD_ARCHIVE
FROM @STG_RAW_DPT_UPLOAD
PATTERN = '^dpt20240822.*'
Я попробовал несколько других способов использования || и Concat, но не получилось
Хм, не могли бы вы попробовать определить переменную типа SET target_pattern = CONCAT('^dpt', REPLACE(SysDate(), '-', ''), '.*');
, а затем использовать ее как PATTERN = :target_pattern
?
SET target_pattern не работает и выдает ошибку 000002 (0A000): неподдерживаемая функция «назначение из непостоянного исходного выражения».
Хорошо, тогда это еще сложнее.
не понимаю, почему Снежинка делает это таким сложным
Я думаю, вам нужно сделать это в хранимой процедуре (или блоке кода) и динамически создать оператор COPY INTO.
Использование переменной сеанса: 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;
Если ваша команда копирования не превышает 256 символов, вы можете сохранить ее в переменной сеанса и вместо этого выполнить ее.
set stmt = 'copy files into @that_stage from @this_stage pattern='||$$'$$||to_char(current_date,'.*dptyyyymmdd.*'||$$'$$);
select $stmt;
execute immediate $stmt;
Теперь я получаю сообщение об ошибке. Переменная сеанса «$STMT» не существует», когда я пытаюсь использовать вашу логику при создании задачи. Когда я запускаю это без задачи, это работает. В чем может быть проблема?
Вам придется создать задачу как блок сценария, используя переменные сценария вместо переменных сеанса. См., например, здесь docs.snowflake.com/en/sql-reference/sql/…. Ваш текущий вопрос четко определен, поэтому давайте не будем его путать. Предлагаю задать новый вопрос в контексте задач.
спасибо, я задам новый вопрос, который находится здесь: stackoverflow.com/questions/78906485/…
не могли бы вы дать ответ на этот новый вопрос, который вы уже упомянули здесь?
Что-то вроде
PATTERN = CONCAT('^dpt', REPLACE(CURRENT_DATE(), '-'), '.*')
? Не уверен, что можно объявить это таким образом.