Snowflake使用COPY INTO导出CSV如何处理字段内带逗号的拆分问题
问题解答
1. 参数配置关系说明
ESCAPE 参数不需要和 FIELD_OPTIONALLY_ENCLOSED_BY 强制同时配置:
- 仅当你的字段值中包含你指定的「字段可选包裹符」字符时,才需要额外配置
ESCAPE做转义处理,普通含分隔符的场景不需要用到ESCAPE。 - 解决字段内含逗号被误拆分的核心参数是
FIELD_OPTIONALLY_ENCLOSED_BY。
2. 具体操作方案
你只需要在FILE_FORMAT配置中新增 FIELD_OPTIONALLY_ENCLOSED_BY = '"' 即可,配置后Snowflake导出CSV时会自动把包含逗号(以及其他特殊字符如换行、空格)的字段用双引号包裹,CSV解析时会自动识别包裹符内的逗号为字段内容,不会做拆分。
修改后的完整COPY INTO语句如下:
COPY INTO @TMP_STG FROM table FILE_FORMAT = ( TYPE=CSV EMPTY_FIELD_AS_NULL = false FIELD_DELIMITER=',' FIELD_OPTIONALLY_ENCLOSED_BY = '"' ) single = false max_file_size=4900000000;
3. 特殊场景补充说明
如果你的业务字段中本身就包含双引号字符(比如字段值为 Toronto,"ON"),此时才需要同时配置ESCAPE参数,对字段内的双引号做转义,示例配置如下:
FILE_FORMAT = ( TYPE=CSV EMPTY_FIELD_AS_NULL = false FIELD_DELIMITER=',' FIELD_OPTIONALLY_ENCLOSED_BY = '"' ESCAPE = '\\' )
按照上述配置导出后,你给出的示例数据最终在CSV中会显示为如下格式,不会出现字段拆分错误:
CAD,"Toronto,ON",10 USD,"Dallas,Texas",10
内容的提问来源于stack exchange,提问作者Hannah
相关产品推荐
相关产品推荐

