Snowflake从CSV摄取数据时,如何处理含转义符的分隔符列偏移问题
问题描述
从外部阶段自动将CSV数据摄取到Snowflake表时,CSV使用竖线|作为分隔符,但部分单元格数据包含转义符\且其后紧跟列分隔符|,导致摄取时错误识别分隔符,出现列值左移、数据错乱的问题。
CSV数据示例:
Column_1|Column_2|Column_3 ABC.........|DEF..........\ |EFG
当前错误摄取结果:
| Column_1 | Column_2 | Column_3 |
|---|---|---|
| ABC.......... | DEF......|EFG | NULL |
理想摄取结果:
| Column_1 | Column_2 | Column_3 |
|---|---|---|
| ABC.......... | DEF.........\ | EFG |
注:无法修改上游数据,需原样摄取。
解决方案
需要在Snowflake的文件格式中配置**ESCAPE_UNENCLOSED_FIELD**属性,将其值设置为'\\'(SQL中反斜杠需转义)。
该属性用于指定转义未被引号包裹字段中特殊字符(如列分隔符)的转义符。当Snowflake识别到转义符后跟分隔符时,会将这个分隔符视为字段内容的一部分,而非列分隔标记。
示例文件格式创建语句:
CREATE OR REPLACE FILE FORMAT my_csv_format TYPE = CSV FIELD_DELIMITER = '|' ESCAPE_UNENCLOSED_FIELD = '\\' -- 可按需添加SKIP_HEADER等其他必要属性 ;
使用该文件格式进行数据摄取,即可正确识别转义后的分隔符,得到理想的摄取结果。
内容的提问来源于stack exchange,提问作者Sathya
相关产品推荐
相关产品推荐

