将 CSV 文件从 S3 加载到 Snowflake 时出现 SQL 编译错误

Posted

技术标签:

【中文标题】将 CSV 文件从 S3 加载到 Snowflake 时出现 SQL 编译错误【英文标题】:SQL Compilation error while loading CSV file from S3 to Snowflake 【发布时间】:2021-08-11 06:00:26 【问题描述】:

我们在将 csv 文件从 S3 加载到 Snowflake 时遇到以下问题。

SQL 编译错误:插入列值列表与期望 7 但得到 6 的列列表不匹配

我们已尝试从表中删除该列并再次尝试,但这次显示的是 expecting 6 but got 5

以下是我们用于舞台创建和复制命令的命令。

create or replace stage mystage
url='s3://test/test'
STORAGE_INTEGRATION = test_int
file_format = (type = csv FIELD_OPTIONALLY_ENCLOSED_BY='"'  COMPRESSION=GZIP);


copy into mytable
from  @mystage
MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE;
FILE_FORMAT = (TYPE = CSV  FIELD_OPTIONALLY_ENCLOSED_BY='"' COMPRESSION=GZIP error_on_column_count_mismatch=false TRIM_SPACE=TRUE NULL_IF=(''))
FORCE = TRUE
ON_ERROR = Continue
PURGE=TRUE;

【问题讨论】:

请显示您的列名/模式 感谢 Mitch 的回复,由于安全原因,我们无法显示对象名称。 :) 那么我怀疑你会得到很多帮助。 您想查看表格中的列名及其数据类型吗? 您的 COPY INTO 命令中间有一个分号 (;),这正常吗? ... MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE; FILE_FORMAT = ... 【参考方案1】:

您不能对 CSV 文件使用 MATCH_BY_COLUMN_NAME,这就是您收到此错误的原因。

以下数据格式支持此复制选项:

JSON Avro 兽人 镶木地板

https://docs.snowflake.com/en/sql-reference/sql/copy-into-table.html

【讨论】:

谢谢阿蒂尔。删除此选项 MATCH_BY_COLUMN_NAME 后问题得到解决

以上是关于将 CSV 文件从 S3 加载到 Snowflake 时出现 SQL 编译错误的主要内容,如果未能解决你的问题,请参考以下文章

如何从 S3 存储桶中读取最后修改的 csv 文件?

将大型 csv 文件从 S3 读入 R

使用 for 循环从 s3 复制 Redshift

数据摄取:将动态文件从 S3 加载到 Snowflake

如何在 Copy commd 中使用反斜杠字符将 s3 csv gz 文件加载到 Redshift

read_csv() 中的 S3 阅读器是先将文件下载到磁盘还是使用流式传输?