无法将字段中带有 \" 的数据提取到 BigQuery 中
Posted
技术标签:
【中文标题】无法将字段中带有 \\" 的数据提取到 BigQuery 中【英文标题】:No Way to Ingest Data With \" in a Field Into BigQuery无法将字段中带有 \" 的数据提取到 BigQuery 中 【发布时间】:2019-09-20 20:44:41 【问题描述】:我每天都有数以万计的压缩 CSV 文件写入 S3。它们包含逗号分隔的字段,每个字段都用双引号括起来(无论数据类型如何)。但是,字段中包含的双引号会使用 \
而不是 RFC4180 标准 "
转义,如下所示:
header1,header1,header3
"1","Look some text.","43.7"
"2","27\" TV","29.1"
"3","More things","99.0"
这适用于 Amazon Athena 或其他使用反序列化程序的产品,这些反序列化程序可让您指定引号/转义字符。但是,BigQuery 无法提取此数据。我收到错误:
Error: Data between close double quote (\") and field separator.
当我尝试时,这是有道理的。我无法更改底层数据结构(由另一个服务编写),将 configuration.load.quote
参数设置为未使用的字符会给我解析错误,并且启动 Cloud SQL 实例来充当解析器是不可行的(我' m 每天处理 TB 的数据)。
我认为将引号字符设置为 \"
可能有效,但 BQ API 只允许该字段使用单个字符。
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:我理解痛苦,感谢您提供额外的动力!
正如我在帖子 (https://medium.com/google-cloud/loading-mysql-backup-files-into-bigquery-straight-from-cloud-sql-d40a98281229) 中所解释的,我发现目前处理此问题的最简单方法是通过 MySQL。
有关 Stack Overflow 的其他问题显示了替代路径,例如使用 Dataflow、bash 工具和/或 BigQuery 内部进行预处理。
关于产品功能开发,请订阅并点赞本期——在此添加您的 cmets 也将非常有价值:
https://issuetracker.google.com/issues/35906027要在 BigQuery 中解析,请尝试加载每一行原始数据并像这样运行 UDF:
SELECT csv.cols[SAFE_OFFSET(0)] a
, csv.cols[SAFE_OFFSET(1)] b
,csv.cols[SAFE_OFFSET(2)] c
,csv.cols[SAFE_OFFSET(3)] d
,csv.cols[SAFE_OFFSET(4)] e
,csv.cols[SAFE_OFFSET(5)] f
FROM (
SELECT fhoffa.x.parse_csv('hello,"dealing here, with", some \" quoted words, all is fine, good one?,"even a , in between"') csv
)
参考:https://medium.com/@hoffa/new-in-bigquery-persistent-udfs-c9ea4100fd83
【讨论】:
以上是关于无法将字段中带有 \" 的数据提取到 BigQuery 中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Presto JSON 函数访问字段名称中带有“~”的 json 字段