处理 bigquery 中的坏行

swe*_*eet 2 python google-bigquery

我正在使用 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.'}}
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何告诉 bigquery 自动删除不符合架构的行?

Pau*_*aul 5

如果您使用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. 您可以搜索maxBadRecordsGithub上蟒BigQuery API进行回购,你会看到它是在对负载作业的作业API配置。


Hua*_*ang 5

抱歉,无法评论 Paul 的回答,因为我的声誉不到 50。

回复:设置这个正数是让坏行进入数据还是只忽略和抑制错误

坏行将被忽略,不会进入加载的数据。