COPY INTO 雪花命令的语法错误

Posted

技术标签:

【中文标题】COPY INTO 雪花命令的语法错误【英文标题】:syntax error with COPY INTO snowflake command 【发布时间】: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
       )
      ;

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

【问题讨论】:

【参考方案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 语句中有列类型。您可以尝试删除列类型吗?

以上是关于COPY INTO 雪花命令的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

雪花数据库:在 COPY INTO 语句中使用 VALIDATION_MODE 从外部阶段加载 JSON 文件

通过 JDBC 与 COPY_INTO + GET 批量卸载雪花数据

INSERT INTO 语句的语法错误

雪花视图 - 组语法编译错误

INSERT INTO 语句的语法错误

INSERT INTO 语句的语法错误