处理 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 中的坏行的主要内容,如果未能解决你的问题,请参考以下文章

提取操作中的 BigQuery 错误:错误处理作业意外。请再试一次

处理 BigQuery(嵌套表)中的重复项

我们如何处理 bigquery 过程中的异常?

在加入 BigQuery 期间优先处理一个表

BigQuery 中的最小值(日期)

BigQuery 中的奇怪错误