如何在Snowflake的COPY FILES命令中使用系统日期匹配模式
替换Snowflake COPY FILES命令中的硬编码日期为系统日期
你的需求是把COPY FILES命令中硬编码的日期替换为系统日期,实现每日自动复制对应日期文件夹下的文件。由于Snowflake的COPY FILES语句中,PATTERN参数不支持直接嵌入函数调用,需要通过动态SQL来实现日期的动态拼接。
解决方案
可以使用EXECUTE IMMEDIATE结合日期格式化函数生成动态的COPY命令,以下是两种常用实现方式:
方式1:先定义日期变量再拼接命令
-- 定义当天日期变量,格式化为YYYYMMDD格式 SET daily_date = TO_CHAR(CURRENT_DATE(), 'YYYYMMDD'); -- 执行动态生成的COPY FILES命令 EXECUTE IMMEDIATE $$ COPY FILES INTO @STG_RAW_DPT_UPLOAD_ARCHIVE FROM @STG_RAW_DPT_UPLOAD PATTERN = '^dpt' || $daily_date || '.*' $$;
方式2:直接在动态SQL中格式化日期
EXECUTE IMMEDIATE $$ COPY FILES INTO @STG_RAW_DPT_UPLOAD_ARCHIVE FROM @STG_RAW_DPT_UPLOAD PATTERN = '^dpt' || TO_CHAR(CURRENT_DATE(), 'YYYYMMDD') || '.*' $$;
补充说明
CURRENT_DATE()返回Snowflake会话时区的当前日期,若需使用UTC日期,可替换为CURRENT_DATE('UTC')- 两种方式都会自动将当天日期转为
YYYYMMDD格式,确保每日运行时仅匹配对应日期的文件夹文件 - 若要实现每日自动执行,可将这段动态SQL封装到Snowflake的**任务(Task)**中,设置每日调度周期即可
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

