You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snowflake中从含当日日期的Stage路径读取数据

在Snowflake中读取Stage动态日期路径下的文件

文件按yyyy/mm/dd/hh格式的日期小时路径存储,需要读取当日对应路径(如2023/03/27/04)下的文件记录。尝试了以下代码但无法运行,如何传递动态变量date_hour_folder或其他实现方式?

用户尝试的代码:

set date_hour_folder=TO_VARCHAR(DATEADD(hour, -6, convert_timezone('UTC', current_timestamp())), 'yyyy/mm/dd/hh');

SELECT
$1:name ,
$1:address ,
$1:id 

FROM  @test_prod.test/dev/test/device_d_rollup_parquet_expor2t/{date_hour_folder}/  (file_format => 'my_parquet_format', PATTERN => '.*.parquet')

方法1:修正会话变量引用方式

Snowflake中引用会话变量需使用$符号,而非{},同时正则匹配里的.需要转义(避免匹配任意字符),修改后代码如下:

SET date_hour_folder = TO_VARCHAR(DATEADD(hour, -6, CONVERT_TIMEZONE('UTC', CURRENT_TIMESTAMP())), 'yyyy/mm/dd/hh');

SELECT
    $1:name,
    $1:address,
    $1:id
FROM @test_prod.test/dev/test/device_d_rollup_parquet_expor2t/$date_hour_folder/ 
    (FILE_FORMAT => 'my_parquet_format', PATTERN => '.*\\.parquet');

方法2:使用动态SQL(复杂场景适用)

如果需要更灵活的路径逻辑,可通过动态SQL拼接执行语句:

DECLARE
    date_hour_folder VARCHAR;
    sql_stmt VARCHAR;
BEGIN
    date_hour_folder := TO_VARCHAR(DATEADD(hour, -6, CONVERT_TIMEZONE('UTC', CURRENT_TIMESTAMP())), 'yyyy/mm/dd/hh');
    sql_stmt := 'SELECT $1:name, $1:address, $1:id FROM @test_prod.test/dev/test/device_d_rollup_parquet_expor2t/' || date_hour_folder || '/ (FILE_FORMAT => ''my_parquet_format'', PATTERN => ''.*\\.parquet'')';
    EXECUTE IMMEDIATE sql_stmt;
END;

方法3:直接在PATTERN中拼接路径

无需定义变量,直接将日期路径整合到正则匹配规则中:

SELECT
    $1:name,
    $1:address,
    $1:id
FROM @test_prod.test/dev/test/device_d_rollup_parquet_expor2t/ 
    (FILE_FORMAT => 'my_parquet_format', 
     PATTERN => TO_VARCHAR(DATEADD(hour, -6, CONVERT_TIMEZONE('UTC', CURRENT_TIMESTAMP())), 'yyyy/mm/dd/hh') || '/.*\\.parquet');

内容的提问来源于stack exchange,提问作者NEERAJ GUPTA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 20:54:59