【问题标题】:Handling bad lines in bigquery处理 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 自动删除不符合架构的行?

【问题讨论】:

    标签: python google-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: 设置这个正数是让坏行进入数据还是只忽略和抑制错误

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多