雪花 - 从 S3 复制但包含加载日期

时间:2021-01-05 12:40:16

标签: amazon-s3 snowflake-cloud-data-platform

我想从 S3 加载一个文件,但在加载时,我想在雪花表中添加一个加载日期/时间。我该怎么做?

我的代码目前正在这样做: 复制到“DATABASE”。“PUBLIC”。“TABLENAME” 来自@S3_RAW/FILENAME.csv FILE_FORMAT = '"DATABASE"."PUBLIC"."CSV"' ON_ERROR = 'CONTINUE' PURGE = FALSE;

我要复制到的表名有一个名为 LoadDateTime 的额外列,我只想在加载时填充它 - 这可能吗?

干杯

1 个答案:

答案 0 :(得分:1)

Snowflake 的 COPY INTO TABLE 命令有两个“变体”,第一个是“标准”,第二个是“带变换”。

您可以在创建表时使用默认值定义您的列,默认值将在 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

我希望这有助于...丰富

附言如果这个(或另一个)答案对您有帮助,请花点时间“接受”有帮助的答案 通过单击答案旁边的复选标记将其从“变灰”切换为“已填写”。