【问题标题】:syntax error with COPY INTO snowflake commandCOPY INTO 雪花命令的语法错误
【发布时间】:2021-10-28 21:40:48
【问题描述】:

我正在尝试从 s3 存储桶中的文件填充已在 Snowflake 中创建的表。我已验证存储集成正在运行,因此根据文档,我不需要外部阶段。

似乎为了使用 Parquet 文件格式填充表格,我需要在复制命令中指定列,每个帖子 in Snowflake community forum.

无论我进行什么更改,我的命令都会出现语法错误。如果我在 s3 存储桶 url 之后删除 '(',我会收到错误

    "unexpected SELECT"

但如果我把它留在里面,我会收到错误

    "unexpected '(' "

我的代码:

    COPY INTO MYTABLE
        FROM s3://bucket/folder2/File.snappy.parquet (
       SELECT 
       O_ID: NUMBER(19,0),        

       O_TYPE:VARCHAR(48),        

       C_ID:NUMBER(19,0),

       ON_ID:FLOAT,

       SE_ID:NUMBER(19,0),

       C_MATCH:BOOLEAN 

    )

        STORAGE_INTEGRATION = MY_INTEGRATION
        FILE_FORMAT=(
           TYPE = 'PARQUET' 
          SNAPPY_COMPRESSION = TRUE
       )
      ;

谁能告诉我如何修正这里的语法?

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

    我相信你的命令应该是这样的

    COPY INTO MYTABLE ( 
       O_ID: NUMBER(19,0),        
       O_TYPE:VARCHAR(48),        
       C_ID:NUMBER(19,0),
       ON_ID:FLOAT,
       SE_ID:NUMBER(19,0),
       C_MATCH:BOOLEAN 
       )
       FROM ( 
        SELECT $1,$2,$3,$4,$5,$6 FROM s3://bucket/folder2/File.snappy.parquet 
       ) STORAGE_INTEGRATION = MY_INTEGRATION
        FILE_FORMAT=(
           TYPE = 'PARQUET' 
          SNAPPY_COMPRESSION = TRUE
       );
    

    请尝试让我知道它是否有效。

    【讨论】:

    • 我在第 21 行遇到了语法错误,第 2 行出现了意外的 ':'。用什么代替':'?
    • 更新:我删除了所有数据类型值,并且由于另一个错误消息,将 url 更改为 s3n。现在,我收到错误“SQL 编译错误:COPY 语句仅支持简单的 SELECT 从阶段语句中导入。”我认为存储集成使舞台变得不必要了?
    【解决方案2】:

    需要在 COPY INTO 之前创建表:

    CREATE OR REPLACE TABLE MYTABLE (
        O_ID NUMBER(19,0),        
        O_TYPE VARCHAR(48),        
        C_ID NUMBER(19,0),
        ON_ID FLOAT,
        SE_ID NUMBER(19,0),
        C_MATCH BOOLEAN 
    );
    
    
    COPY INTO MYTABLE (
        O_ID,        
        O_TYPE,     
        C_ID,
        ON_ID,
        SE_ID
    )
    FROM s3://bucket/folder2/File.snappy.parquet
    
    STORAGE_INTEGRATION = MY_INTEGRATION
    FILE_FORMAT = (
        TYPE = 'PARQUET' 
        SNAPPY_COMPRESSION = TRUE
    )
    ;
    

    【讨论】:

    • 谢谢 - 我编辑了我的帖子以表明该表已经创建。我现在面临的问题是,在运行修改后的命令时,我得到“COPY 语句仅支持从阶段语句中导入的简单 SELECT”。
    • 您修改的查询仍然无效,您不应该在 SELECT 语句中有列类型。您可以尝试删除列类型吗?
    猜你喜欢
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2016-02-09
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多