无法将 CSV 文件的内容(文件名中包含日期)从 S3 Bucket 加载到 Snowflake 。文件名是这样的:
EF_FILENAME_TST20241217T010502.csv
。要求是使用今天的文件(当前日期)将文件从 s3 加载到雪花表。第二天的文件也是如此(其中包含当前日期的动态文件)
我正在使用下面的代码,但我认为复制到命令不支持
||
连接雪花中的日期:
需要一些帮助才能使用 SQL 语言通过 Snowflake 实现此目的。
COPY INTO table1 (
column1,
column2,
column3,
column4,
column5,
column6,
column7,
column8,
column9
)
FROM
(
SELECT
t.$1
/* column1*/,
t.$2
/* column2*/,
t.$3
/* column3*/,
t.$4
/* column4*/,
CASE
WHEN t.$5 = 'Create' THEN 1
WHEN t.$5 = 'Modify' THEN 2
WHEN t.$5 = 'Delete' THEN 3
END
/* column5*/,
t.$6
/* column6*/,
t.$7
/* column7*/,
t.$8
/* column8*/,
t.$9
/* column9*/
FROM
@DB_NAME.SCHEMA_NAME.S3_SF_DEV/Test/FILE/DATA AS t
) PATTERN = '.*EF_FILENAME_TST' || TO_CHAR(CURRENT_DATE, 'YYYYMMDD') || 'T.*[.]csv' FILE_FORMAT = (
TYPE = CSV COMPRESSION = NONE SKIP_HEADER = 1 FIELD_DELIMITER = '|' FIELD_OPTIONALLY_ENCLOSED_BY = '"'
);
如果你设置了模式变量,它应该可以正常工作
SET todays_date = TO_CHAR(CURRENT_DATE, 'YYYYMMDD');
SET file_pattern = '.*EF_FILENAME_TST' || $todays_date || 'T.*[.]csv';
这评估为
SELECT $file_pattern;
--.*EF_FILENAME_TST20241218T.*[.]csv
最后在
PATTERN => $file_pattern
命令中使用 COPY INTO
我用内部阶段进行了测试,它对我有用。
COPY INTO table1 (
column1,
column2,
column3,
column4,
column5,
column6,
column7,
column8,
column9
)
FROM (
SELECT
t.$1,
t.$2,
t.$3,
t.$4,
CASE
WHEN t.$5 = 'Create' THEN 1
WHEN t.$5 = 'Modify' THEN 2
WHEN t.$5 = 'Delete' THEN 3
END AS column5,
t.$6,
t.$7,
t.$8,
t.$9
FROM @my_internal_stage (PATTERN => $file_pattern) AS t
)
FILE_FORMAT = (
TYPE = 'CSV',
COMPRESSION = 'NONE',
SKIP_HEADER = 1,
FIELD_DELIMITER = '|',
FIELD_OPTIONALLY_ENCLOSED_BY = '"'
);