【问题标题】:Snowflake COPY INTO fails on double quote value in a data valueSnowflake COPY INTO 在数据值中的双引号值上失败
【发布时间】:2020-05-17 16:36:29
【问题描述】:

由于在数据值中发现双引号,COPY INTO 失败。
C 周围的两个双引号导致失败 -> NE 845 "C" Street。

确切的错误信息是:

找到字符 'H' 而不是字段分隔符 '|~' 文件 '@~/FolderX/datafile.dat.gz',第 1 行,第 107 行,第 274598 行,列 "MY_TABLE"["BADCOLUMN":20] 如果您想继续加载时 遇到错误,请使用其他值,例如“SKIP_FILE”或 ON_ERROR 选项的“CONTINUE”。有关加载的更多信息 选项,请在 SQL 客户端中运行 'info loading_data'。

格式文件定义为:

CREATE FILE FORMAT "DW"."STG".FMT_FILE 
COMPRESSION = 'GZIP' 
FIELD_DELIMITER = '|~' 
RECORD_DELIMITER = '\n' 
SKIP_HEADER = 0 
FIELD_OPTIONALLY_ENCLOSED_BY = '\042' 
TRIM_SPACE = TRUE 
ERROR_ON_COLUMN_COUNT_MISMATCH = FALSE 
ESCAPE = '#' 
ESCAPE_UNENCLOSED_FIELD = 'NONE' 
DATE_FORMAT = 'AUTO' 
TIMESTAMP_FORMAT = 'AUTO' 
ENCODING = 'WINDOWS1253'
NULL_IF = ('\\N');

当数据为时,为什么要关心任何值中是否存在双引号:

123|~NE 845 "C" Street|~PULLMAN

鉴于格式文件的定义,应该没有必要在任何字符串中添加转义符。这个失败似乎是一个错误。

【问题讨论】:

    标签: load snowflake-cloud-data-platform


    【解决方案1】:

    这不是错误。当您使用此语句 FIELD_OPTIONALLY_ENCLOSED_BY = '\042' 时,您已明确要求 Snowflake 将双引号识别为在文件中包含值的一种方式。如果您从文件格式中删除(或更改为 NONE),则不应收到您收到的错误。不过,Snowflake 的行为符合预期。

    【讨论】:

    • Snowflake 使用 ASCII 八进制 42,MSFT 世界使用 ASCII 十进制。查看 ASCII 表让我期待代码抱怨星号而不是双引号。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 2022-12-01
    • 2015-11-17
    • 1970-01-01
    • 2018-01-01
    相关资源
    最近更新 更多