【问题标题】:Snowflake: COPY Command to upload files into S3 with only Header and with expected Header Names雪花:复制命令将文件上传到 S3,只有标题和预期的标题名称
【发布时间】:2020-10-02 10:26:23
【问题描述】:

我正在尝试解决 2 个问题

问题 1. 复制命令创建了所有列都为大写字母的 HEADER,但我需要生成带有所需应用程序的标题

例如

预期的标题:

AcctID,qute_c,AcctNumber,AcctName,MRR

问题 2: 该过程将文件从 Snowflake 查询上传到 s3。当有行时,它会上传可以正常工作的文件,但是当没有返回行时,不会上传任何按预期工作的文件

但是,我只想在没有返回行的情况下上传带有 HEADER 的空文件

   COPY INTO '@stage/path/test.csv'
    FROM (SELECT A.AcctID,B.qute_c,A.AcctNumber,A.AcctName,B.MRR FROM TABLE A , TABLE B  WHERE A.AcctID=B.AcctID AND A.C_DATE = CURRENT_DATE())
    MAX_FILE_SIZE = 5368706371
    FILE_FORMAT = (FORMAT_NAME = 'CSV_TEXTQUOTE_NOZIP')
    OVERWRITE=TRUE
    SINGLE=TRUE
    HEADER = TRUE;

【问题讨论】:

  • 请参考COPY INTO的使用说明 docs.snowflake.com/en/sql-reference/sql/…... "如果源表包含0行,则COPY操作不会卸载数据文件。"
  • 是的,我知道,我们需要发送空文件,因为上游应用程序一直需要文件
  • 一种方法是在没有行的情况下使用单独的文件格式使用单独的 COPY INTO 语句。您可以使用一种文件格式,指定不打印标题,而是将“标题”作为单行中的列值发送。您将表定义为所有 varchar 列,并有一行包含列的名称。当您需要发送一个空的结果集文件时,您将从该表执行 COPY INTO 阶段。这充其量只是一种解决方法,但它会起作用。

标签: snowflake-cloud-data-platform snowflake-schema


【解决方案1】:

对于问题 1: 选择帐户 ID 作为“帐户 ID” , AcctNumber AS "账号" ....

【讨论】:

    【解决方案2】:

    @Diamantis,是的,我通过包含 UNION 查询解决了这两个问题

    COPY INTO '@stage/path/test.csv'
        FROM (
    SELECT 'AcctID' as AcctID, 'qute_c' as qute_c ,'AcctNumber' as AcctNumber ,'AcctName' as AcctName,'MRR' as MRR
    Union
    SELECT A.AcctID,B.qute_c,A.AcctNumber,A.AcctName,B.MRR FROM TABLE A , TABLE B  WHERE A.AcctID=B.AcctID AND A.C_DATE = CURRENT_DATE())
        MAX_FILE_SIZE = 5368706371
        FILE_FORMAT = (FORMAT_NAME = 'CSV_TEXTQUOTE_NOZIP')
        OVERWRITE=TRUE
        SINGLE=TRUE
        HEADER = FALSE;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多