BigQuery导出JSON字段时的双引号处理问题求助
解决BigQuery导出CSV时JSON字段双引号转义问题
核心原因
BigQuery UI导出CSV时,会遵循CSV标准规则:对包含双引号、逗号的字符串字段添加外层双引号,并将内部双引号转义为两个双引号。但下游系统若期望直接解析原始JSON格式,这种转义会造成解析失败。
可行解决方案
方法1:使用EXPORT DATA语句导出(推荐)
通过EXPORT DATA语句可精确控制CSV导出格式,禁用字段引号包裹,从根源避免双引号转义问题。
示例SQL:
EXPORT DATA OPTIONS( uri = 'gs://你的存储桶路径/output-*.csv', -- 替换为你的GCS存储路径 format = 'CSV', header = true, quote = '' -- 禁用引号包裹,关键参数 ) AS SELECT myStringField, myJSONField -- 直接使用JSON类型字段,无需额外转换 FROM `你的项目ID.数据集ID.目标表名`;
执行后将GCS上生成的CSV文件下载到本地,导出结果会符合预期:
myStringField,myJSONField someStringValue,{"key1":"value1", "key1":"value2"}
方法2:UI导出应急预处理(不推荐)
若必须使用UI导出,可通过字符串替换临时规避转义,但需下游配合还原:
SELECT myStringField, REPLACE(STRING(myJSONField), '"', '<<QUOTE>>') AS myJSONField FROM `你的项目ID.数据集ID.目标表名`
导出后再将CSV中的<<QUOTE>>替换回双引号即可,但该方法需额外步骤,仅作应急使用。
为什么PARSE_JSON/TO_JSON_STRING等函数无效?
TO_JSON_STRING()会将JSON对象转换为带转义双引号的字符串(如"{\"key1\":\"value1\"}"),导出时会再次转义,导致三重双引号。PARSE_JSON()仅完成字符串到JSON类型的转换,导出时BigQuery仍会按CSV规则转义内部双引号。STRING()转换JSON类型得到的原始JSON字符串,因包含双引号,会被UI导出的CSV规则自动包裹并转义。
内容的提问来源于stack exchange,提问作者Guillaume
相关产品推荐
相关产品推荐

