处理 bigquery 中的坏行
Posted
技术标签:
【中文标题】处理 bigquery 中的坏行【英文标题】:Handling bad lines in bigquery 【发布时间】:2016-02-18 08:15:22 【问题描述】:我使用 google.bigquery.python api 每天自动将数据集从 GCS 存储桶加载到 Bigquery。我为这个数据集指定了一个模式,它一直有效,直到有一天我遇到这个错误:
ERROR - u'state': u'DONE', u'errors': [u'reason': u'invalid', u'message': u'Invalid argument: xxxxxxxxxxx@gmail.com', u'location': u'File: 0 / Line:1283011 / Field:44',
u'reason': u'invalid', u'message': u'Invalid argument: xxxxxxxxxxx@gmail.com', u'location': u'File: 0 / Line:1338016 / Field:44', u'reason': u'invalid', u'message': u'Too many errors encountered. Limit is: 0.'], u'errorResult': u'reason': u'invalid', u'message': u'Too many errors encountered. Limit is: 0.'
我的问题是:如何告诉 bigquery 自动删除不符合架构的行?
【问题讨论】:
【参考方案1】:如果您使用的是bq
命令行客户端,则选项为--max-bad-records
。这告诉 BQ 在加载作业失败之前要忽略多少坏记录。默认为零。我不记得设置这个正数是让坏行进入数据还是只忽略和抑制错误。您可能需要手动测试它。
发件人:https://cloud.google.com/bigquery/bq-command-line-tool
--max_bad_records 类型:整数 描述:在加载作业中止并且没有更新之前要跳过的最大坏行数 执行。如果此值大于 0,则作业将成功 只要坏记录的数量不超过这个值。这是 如果您想加载可能有不良记录的文件,这很有用。这 此参数的默认值为 0(所有行都必须是 有效的)。
有效值:任何整数
Usage: bq load --max_bad_records=3 <destination_table> <data_source_uri> [<table_schema>]
在 python API 中,该字段称为maxBadRecords
。您可以在the python BigQuery API repo on Github 中搜索maxBadRecords
,您会看到它位于加载作业的作业API 配置中。
【讨论】:
【参考方案2】:抱歉,我的声望不到 50,因此无法评论 Paul 的回答。
Re: 设置这个正数是让坏行进入数据还是只忽略和抑制错误
坏行将被忽略,不会进入加载的数据。
【讨论】:
以上是关于处理 bigquery 中的坏行的主要内容,如果未能解决你的问题,请参考以下文章