如何通过SnowSQL一次性将Amazon S3近10天数据加载至Snowflake
用SnowSQL批量加载S3近10天变更数据到Snowflake表
先确认你已经搞定Snowflake与S3的集成(存储集成或外部阶段),且目标表结构和S3数据格式匹配。以下是具体操作步骤:
1. 明确S3文件的时间筛选依据
你得先搞清楚S3里的文件怎么区分时间:要么文件名带日期戳(比如data_20240501.csv),要么靠文件的LAST_MODIFIED时间,这是批量筛选的关键。
2. 创建/使用外部阶段
如果还没建阶段,在SnowSQL里执行这条命令(替换成你的实际参数):
CREATE OR REPLACE STAGE my_s3_stage URL = 's3://your-bucket/data-folder/' STORAGE_INTEGRATION = s3_integration_name -- 提前配置好的存储集成 FILE_FORMAT = (TYPE = CSV FIELD_OPTIONALLY_ENCLOSED_BY = '"'); -- 替换成你的数据格式,比如PARQUET、JSON
3. 筛选近10天的目标文件
场景1:文件名包含日期(YYYYMMDD格式)
今日是2024-05-10,要选4月30日到5月10日的文件,先执行LIST命令确认范围:
LIST @my_s3_stage PATTERN = 'data_(20240430|2024050[1-9]|20240510)\\..*';
如果列出的文件符合预期,就可以进行加载。
场景2:按文件最后修改时间筛选
用SCAN_STAGE函数获取近10天修改的文件:
SELECT RELATIVE_PATH, LAST_MODIFIED FROM TABLE(SCAN_STAGE(@my_s3_stage)) WHERE LAST_MODIFIED >= DATEADD(DAY, -10, '2024-05-10'::DATE);
这条SQL会列出所有符合时间条件的文件,确认没问题再继续。
4. 批量加载到目标表
对应场景1(文件名匹配)
直接用COPY INTO加载匹配的文件:
COPY INTO your_target_table FROM @my_s3_stage FILE_FORMAT = (TYPE = CSV FIELD_OPTIONALLY_ENCLOSED_BY = '"') PATTERN = 'data_(20240430|2024050[1-9]|20240510)\\..*';
对应场景2(按修改时间)
通过子查询指定要加载的文件:
COPY INTO your_target_table FROM ( SELECT $1 FROM @my_s3_stage WHERE RELATIVE_PATH IN ( SELECT RELATIVE_PATH FROM TABLE(SCAN_STAGE(@my_s3_stage)) WHERE LAST_MODIFIED >= DATEADD(DAY, -10, '2024-05-10'::DATE) ) ) FILE_FORMAT = (TYPE = CSV FIELD_OPTIONALLY_ENCLOSED_BY = '"');
5. 验证加载结果
加载完成后,查询目标表确认数据是否正确:
SELECT COUNT(*), MIN(your_date_column), MAX(your_date_column) FROM your_target_table;
内容的提问来源于stack exchange,提问作者phoenix..
相关产品推荐
相关产品推荐

