使用Python API使用RECORD字段更新BigQuery架构

时间:2018-01-23 10:55:08

标签: python google-bigquery

我们正在使用Python API以自动方式向'扩充'我们的BigQuery表编写代码

我们通过使用键值标签系统(正常)并通过以下方式更新列描述来实现:

  • 每个表,遍历架构列
  • 使用列元数据执行某些操作
  • 将列添加到新架构
  • 更新架构

但是最后步骤在处理具有RECORD类型字段的表时出错。尝试更新架构时,我在RECORD字段内的第一个嵌套字段上收到以下错误:

  

SchemaField(u'nestedField',u'integer',u'NULLABLE',None,())不是   JSON可序列化

代码如下所示:

orig_table = bigquery_client.get_table(table)
schema = list(orig_table.schema)

new_schema = list()

for column in schema:
        columntxt = *do something to define the column metadata* 

        new_schema.append(bigquery.SchemaField(column.name, column.field_type, column.fields,  description=columntxt ))

orig_table.schema = new_schema
table = bigquery_client.update_table(orig_table, ['schema', 'labels'])

如何正确解决此问题/使代码与嵌套架构表一起使用?

1 个答案:

答案 0 :(得分:1)

您构建请求的方式是向SchemaField构造函数发送错误的参数(而后者又无法编码为JSON)。

请改为尝试:

for column in schema:
    columntxt = *do something to define the column metadata* 
    new_schema.append(bigquery.SchemaField(
        column.name,
        column.field_type,
        fields=column.fields,
        description=columntxt,
        mode=column.mode))

orig_table.schema = new_schema
table = bigquery_client.update_table(orig_table, ['schema'])