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 文件