【问题标题】: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

    我希望这会有所帮助...丰富

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 2016-10-14
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多