我有一个非常重要的表模式(包括嵌套和重复的字段),以JSON格式定义(带有name、type、mode属性)并存储在一个文件中。它已成功地用于用bqload命令填充bigquery表。在
但是当我尝试使用Dataflow Python SDK和BigQuerySink执行相同的操作时,schema
参数需要是一个以逗号分隔的'name':'type'
元素列表,或者是一个bigquery.TableSchema
对象。在
有没有什么方便的方法可以将我的JSON模式转换为bigquery.TableSchema
,还是必须将其转换为name:value
列表?在
我也有同样的问题。在我的例子中,我已经在bigquery中加载了一些json,并自动生成了一个模式。在
因此,我可以使用以下命令获得自动生成的模式:
然后可以使用这个片段将模式转换为
^{pr2}$bigquery.TableSchema
它将与bigqueryjson模式规范一起工作,如果您像我一样懒惰,您可以避免指定},前提是默认情况下可以为null的字符串。在
type
和{目前,您不能直接指定JSON模式。必须将模式指定为包含逗号分隔的字段列表的字符串或
bigquery.TableSchema
对象。在如果架构很复杂并且包含嵌套和/或重复的字段,我们建议构建一个
bigquery.TableSchema
对象。在下面是一个带有嵌套和重复字段的
bigquery.TableSchema
对象的示例。在andreapierleoni发布的上述代码片段适用于
google-cloud-bigquery
python客户机的旧版本,例如,google-cloud-bigquery
的0.25.0
版本,它碰巧通过pip install apache-beam[gcp]
安装。在但是,bigquerypython客户机API在}都不起作用。在
google-cloud-bigquery
的较新版本中发生了巨大的变化,例如在我当前使用的1.8.0
版本中,bigquery.TableFieldSchema()
和{如果您使用的是
google-cloud-bigquery
包的最新版本,下面介绍如何从JSON文件获取所需的SchemaField
列表(例如,创建表所必需的)。这是AndreaPierleoni发布的代码的改编版(谢谢!)在现在,假设您有一个表的schema already defined in JSON。假设您有this particular "schema.json" file,那么使用上面的helper方法,您可以获得Python客户机所需的
^{pr2}$SchemaField
表示,如下所示:现在,对于create a table having the above schema using the Python SDK,您将执行以下操作:
您可以选择按如下方式设置基于时间的分区(如果需要):
最后创建了表格:
相关问题 更多 >
编程相关推荐