【问题标题】:Snowflake - copy from S3 but include a loaddate雪花 - 从 S3 复制,但包含加载日期
【发布时间】:2021-04-11 05:11:50
【问题描述】:
我想从 S3 加载文件,但在加载时,我想将加载日期/时间添加到雪花表中。我该怎么做?
我的代码目前正在这样做:
复制到 "DATABASE"."PUBLIC"."TABLENAME"
来自@S3_RAW/FILENAME.csv
FILE_FORMAT = '"DATABASE"."PUBLIC"."CSV"' ON_ERROR = 'CONTINUE' PURGE = FALSE;
我要复制到的表名有一个名为 LoadDateTime 的额外列,我只想在加载时填充它 - 这可能吗?
干杯
【问题讨论】:
标签:
amazon-s3
snowflake-cloud-data-platform
【解决方案1】:
Snowflake 的 COPY INTO TABLE 命令有两个“变体”,第一个是“标准”,第二个是“with transform”。
您可以在创建表时使用默认值定义列,默认值将在“转换”类型的 COPY INTO 命令中的 COPY INTO 命令中使用,例如以下示例:
# create a table
CREATE OR REPLACE TABLE my_csv_data (
id INTEGER,
str VARCHAR(100),
dt TIMESTAMP_LTZ DEFAULT CURRENT_TIMESTAMP);
# create a file to load - call it my_csv_data.csv
id,str
1,"Hello World"
2,"lots of good stuff"
3,"goodbye"
# put the file up into your internal stage
PUT file://~/my_csv_data.csv @~/testing123/my_csv_data.csv auto_compress=false;
# this unfortunately puts a NULL value in dt :-(
COPY INTO rich_db.rich_schema.my_csv_data
FROM @~/testing123/my_csv_data.csv
FILE_FORMAT = (type = 'CSV' field_optionally_enclosed_by='"' SKIP_HEADER = 1 error_on_column_count_mismatch=false )
on_error = 'continue';
# but this works, 3 records created with default timestamps :-)
COPY INTO rich_db.rich_schema.my_csv_data (id, str)
FROM (SELECT $1, $2 FROM @~/testing123/my_csv_data.csv )
FILE_FORMAT = (type = 'CSV' field_optionally_enclosed_by='"' SKIP_HEADER = 1)
ON_ERROR = 'continue';
文档链接:
https://docs.snowflake.com/en/sql-reference/sql/copy-into-table.html
我希望这会有所帮助...丰富
附言如果这个(或另一个)答案对您有帮助,请花点时间“接受”有帮助的答案
通过单击答案旁边的复选标记将其从“灰色”切换为“已填充”。