无法将 CSV 文件的内容(文件名中包含日期)从 S3 加载到 Snowflake

问题描述 投票:0回答:1

无法将 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 = '"'
  );
amazon-s3 snowflake-cloud-data-platform
1个回答
0
投票

如果你设置了模式变量,它应该可以正常工作

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 = '"'
);
© www.soinside.com 2019 - 2024. All rights reserved.