我使用 BigQuery API for Python 来在表中插入数据 table.insert_data()
。
有时,对于在表架构中设置为None
模式的字段,行会包含 REPEATED
值。发生这种情况时,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
的功能,会抛出相同的错误。
此参数是否意味着我的意思?
值得指出:
skip_invalid_rows
的说明末尾的文档中有问号?ignore_unknown_values=True
可以正常使用。任何帮助非常感谢。 :)
答案 0 :(得分:2)
可能它令人困惑,但仍然应该抛出错误,以此告诉最终用户某些事情没有按预期处理。
这并不意味着虽然没有保存正确的行,但它们应该是!如果你检查你的表,你应该看到这些行正常写在那里。
你可以运行一个简单的测试,如:
table.insert_data([('1', ['1', None, '2']), ('2', ['1', '2'])])
在这种情况下,值('2', ['1', '2'])
应该正常保存。
我同意docstrings
对此方法的评论没有帮助。我自己即将发出拉取请求为Table
资源添加一些新功能,但是预计在不久的将来会对该模块进行一些重大的重构,所以现在你可能会发现这些类型的东西(以及其他一些东西)这也可能令人困惑,例如job
中定义的table
资源。