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

Posted

技术标签:

【中文标题】使用 Python API 使用 RECORD 字段更新 BigQuery 架构【英文标题】:update BigQuery schema with a RECORD field using Python API 【发布时间】:2018-01-23 10:55:08 【问题描述】:

我们正在编写代码以使用 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'])

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

【问题讨论】:

bigquery_client 是什么?从您的代码中不清楚。 【参考方案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'])

【讨论】:

谢谢,成功了!甚至通过编码使其更加明确: new_schema.append(bigquery.SchemaField(name=column.name, field_type=column.field_type, fields=column.fields, description=columntxt, mode=column.mode)) 有趣的事情,如果你喜欢这样,你可能会向那些阅读你的代码的人指出方法签名是由关键字参数组成的,这可能会导致一些混乱。虽然这可行,但我怀疑(仍然需要确认)最好像这样表达位置参数,并且只像你一样使用关键字,所以你的代码没有模棱两可的解释。不过,您可以选择最适合您的编码风格的任何内容。很高兴知道答案有效:) Willian,说到 Python 编码,我还是个初学者。因此,我不完全理解你的最后一句话。但正如我想知道的那样:你有任何外部参考来解释你的意思吗? 这个blog post 似乎已经足够好了。虽然这只是几分钟的阅读时间,但对于学习这些东西来说,这似乎是一个不错的起点。

以上是关于使用 Python API 使用 RECORD 字段更新 BigQuery 架构的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Smack API 实现 Google “Off the Record”

ruby 使用多态数据库模型自动创建Active Record关联:http://api.rubyonrails.org/classes/ActiveRecord/Associat

Google Custom Search API 中的保留字

如何在flutter中从record_mp3包中为api上传mp3文件

如何在 bigquery 中使用 python 将数据添加到 RECORD 类型的列

Branch.io API 在创建时抛出 SSLException Unsupported record version Unknown-0.0