我的 csv 文件示例如下所示: snowpipe 无法加载“文件 (5) 中的列数与对应表 (3) 的列数不匹配,请使用文件格式选项 error_on_column_count_mismatch=false 忽略此错误”
有人可以告诉我 csv 文件格式定义以适应加载吗?
答案 0 :(得分:2)
问题在于您尝试加载的数据本身包含逗号 (,
)。 Snowflake 认为这些逗号代表新列,这就是为什么它认为您的文件中有 5 列但只有 3 列。
您需要告诉 Snowflake 双引号 ("
) 内的任何内容都应按原样加载,而不是将引号内的逗号解释为列分隔符。
当您通过 Web 界面创建文件格式时,有一个选项可让您告诉 Snowflake 执行此操作。将“可选包含的字段”下拉列表设置为“双引号”,如下图所示:
或者,如果您使用 SQL 创建文件格式,则有一个名为 FIELD_OPTIONALLY_ENCLOSED_BY
的选项,您可以将其设置为 \042
,它执行相同的操作:
CREATE FILE FORMAT "SIMON_DB"."PUBLIC".sample_file_format
TYPE = 'CSV'
COMPRESSION = 'AUTO'
FIELD_DELIMITER = ','
RECORD_DELIMITER = '\n'
SKIP_HEADER = 0
FIELD_OPTIONALLY_ENCLOSED_BY = '\042' # <---------------- Set to double-quote
TRIM_SPACE = FALSE
ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE
ESCAPE = 'NONE'
ESCAPE_UNENCLOSED_FIELD = '\134'
DATE_FORMAT = 'AUTO'
TIMESTAMP_FORMAT = 'AUTO';
答案 1 :(得分:0)
如果可能,请分享文件格式和一份示例记录以找出问题所在。列数似乎有问题,您能否在复制语句中包含 field_optionally_enclosed_by 选项并尝试一次。
答案 2 :(得分:0)
当 TAB 字符不太可能出现时,我倾向于使用 TAB 分隔的文件 - 这也 - 与标题一起 - 使源文件更具可读性,以防它们需要打开以解决加载失败:
FIELD_DELIMITER = '\t'
另外(虽然有点离题),请注意 Snowflake 建议压缩文件:https://docs.snowflake.com/en/user-guide/data-load-prepare.html#data-file-compression
我主要使用 GZip 压缩类型:
COMPRESSION = GZIP
一个(工作)示例:
CREATE FILE FORMAT Public.CSV_GZIP_TABDELIMITED_WITHHEADER_QUOTES_TRIM
FIELD_DELIMITER = '\t'
SKIP_HEADER = 1
TRIM_SPACE = TRUE
NULL_IF = ('NULL')
COMPRESSION = GZIP
;