BigQuery CSV联合表如何处理双引号与|分隔符解析报错
BigQuery外部表加载含转义双引号的PSV文件最优方案
方案1:配置转义字符,保留CSV引号解析逻辑(优先推荐)
报错根因是BigQuery默认CSV解析未开启转义字符识别,字段内的\"会被误判为字段闭合引号,后续内容会被识别为引号外的非法内容。你可以直接在建表OPTIONS中添加escape参数指定反斜杠作为转义符,适配现有数据的转义规则:
CREATE OR REPLACE EXTERNAL TABLE `<project>.<dataset>.<table>` WITH PARTITION COLUMNS ( dt DATE ) OPTIONS ( allow_jagged_rows=true, allow_quoted_newlines=true, format="csv", skip_leading_rows=1, field_delimiter="|", uris=["gs://path/to/bucket/table/*"], hive_partition_uri_prefix='gs://path/to/bucket/table', -- 新增转义符配置 escape="\\" )
如果你的数据使用两个连续双引号""转义字段内双引号,不需要加escape参数,BigQuery默认支持双引号转义双引号的规则,只需确保被包裹字段内的双引号都写为""即可,对应样例数据调整为13|2|"""Jeeps, Trucks & Off-Roa"|"JEEPSTRU"即可正常解析,解析后字段值自动为"Jeeps, Trucks & Off-Roa。
方案2:关闭引号解析+SQL后置处理(兼容不规则转义场景)
如果数据转义规则不统一,也可以保留quote=""的配置,后续通过SQL字符串处理还原目标格式,无需预处理原始文件:
SELECT -- 示例处理逻辑:去掉字段首尾多余双引号、还原转义双引号,可根据实际数据格式调整 REGEXP_REPLACE(TRIM(field_, '"'), r'\\(")', r'\1') AS field_, -- 其余字段正常取值 col1, col2, dt FROM `<project>.<dataset>.<table>` WHERE REGEXP_REPLACE(TRIM(field_, '"'), r'\\(")', r'\1') like '%Jeep%'
你也可以基于该外部表创建视图,把字段处理逻辑固化在视图中,后续业务查询直接访问视图即可,无需每次重复写处理逻辑。
内容的提问来源于stack exchange,提问作者Logan
相关产品推荐
相关产品推荐

