BigQuery 是否应该使用 table.insert_data() 和 skip_invalid_rows=True 抛出错误?

Should BigQuery throw an error using table.insert_data() with skip_invalid_rows=True?

我正在使用 BigQuery API for Python insert data in a tabletable.insert_data().

有时,对于设置为 REPEATED 模式的字段,行将包含 None value在 table 架构中。发生这种情况时,API 将返回以下错误

[{'index': 48, 
'errors': [
    {u'debugInfo': u'generic::invalid_argument: Field value cannot be empty.', 
     u'reason': u'invalid', 
     u'message': u'Field value cannot be empty.', 
     u'location': u'name_of_my_field'}]}]

我希望忽略这些行。这是我正在使用的函数的原型,也可以找到 here:

insert_data(rows, row_ids=None, skip_invalid_rows=None, ignore_unknown_values=None, template_suffix=None, client=None)

这是我感兴趣的参数因为它似乎完全符合我的需求:

skip_invalid_rows (bool) – (Optional) skip rows w/ invalid data?

the main API中反映了这个参数:

skipInvalidRows boolean [Optional] Insert all valid rows of a request, even if invalid rows exist. The default value is false, which causes the entire request to fail if any invalid rows exist.

但是通过使用skip_invalid_rows=True的函数,会抛出相同的错误

这个参数是不是我想的意思?

值得一提的是:

非常感谢任何帮助。 :)

这可能令人困惑,但仍应抛出该错误,以告知最终用户某些内容未按预期处理。

这并不意味着没有保存正确的行,而是应该保存正确的行!如果您检查 table,您应该会看到这些行在那里正常写入。

您可以 运行 一个简单的测试,例如:

table.insert_data([('1', ['1', None, '2']), ('2', ['1', '2'])])

这种情况下,值('2', ['1', '2'])应该可以正常保存。

我同意 docstrings 对这种方法没有帮助的评论。我本人正要提出拉取请求,为 Table 资源添加一些新功能,但预计在不久的将来会对这个模块进行一些重大重构,所以现在你可能会在那里找到这些类型的东西(以及其他一些东西这也可能令人困惑,例如 table 中定义的 job 资源)。