从python字典自动生成BigQuery模式

从python字典自动生成BigQuery模式,python,google-bigquery,Python,Google Bigquery,如何从python字典自动生成BigQuery表模式 例如 这样的东西存在吗?目前,从BigQuery Python库中还没有这样做的方法 下面是一个递归函数来实现它 导入日期时间 从google.cloud.bigquery.schema导入SchemaField #[开始]将目录映射到模式 #字段类型映射字典 字段类型={ str:'字符串', 字节:“字节”, int:'整数', 浮动:“浮动”, 布尔:'布尔', datetime.datetime:“datetime”, datetim

如何从python字典自动生成BigQuery表模式

例如


这样的东西存在吗?

目前,从BigQuery Python库中还没有这样做的方法

下面是一个递归函数来实现它

导入日期时间
从google.cloud.bigquery.schema导入SchemaField
#[开始]将目录映射到模式
#字段类型映射字典
字段类型={
str:'字符串',
字节:“字节”,
int:'整数',
浮动:“浮动”,
布尔:'布尔',
datetime.datetime:“datetime”,
datetime.date:'date',
datetime.time:'time',
格言:“记录”,
}
#函数获取字典
#并返回一个bigquery模式
def映射目录到目录模式(源目录):
#SchemaField列表
模式=[]
#迭代现有字典
对于键,源目录项()中的值:
尝试:
schemaField=schemaField(键,字段类型[类型(值)])#默认为空
除KeyError外:
#我们期待一个重复的字段
如果值和len(值)>0:
schemaField=schemaField(键,字段类型[类型(值[0])],模式=重复]#重复
#将该字段添加到字段列表中
schema.append(schemaField)
#如果它是一个结构/记录字段,我们开始递归
如果schemaField.field_type==“记录”:
schemaField.\u fields=map\u dict\u to\u bq\u schema(值)
#返回字典值
返回模式
#[结束]将目录映射到模式
例如:


>>>将dict映射到bq模式({'data':'some_data','me':8})
#输出
>>>[SchemaField('data','STRING','NULLABLE',None,()),SchemaField('me','INTEGER','NULLABLE',None,())]
>>>映射到模式({'data':{'data2':'some_data','me2':8},'me':8,'h':[5,6,7]})
#输出
>>>[SchemaField('h','INTEGER','REPEATED',None,())、SchemaField('me','INTEGER','NULLABLE',None,())、SchemaField('data','RECORD','NULLABLE',None,,[SchemaField('data2','STRING','NULLABLE',None,())、SchemaField('me2','INTEGER','NULLABLE',None,())]
我在这个问题中使用了@luckylwk的代码作为参考:,特别是对于专栏


另外,检查BQ python库中的类。从那里,您可以获得希望在python客户端、CLI或与您的用例匹配的模式中使用的格式。

作为更新。我很确定,如果没有第三方插件,这是不可能的。看来我们得自己写代码了+9000比Python中的bigquery\u schema\u生成器工作得更好,谢谢
dict = {'data': 'some_data', 'me': 8}
schema = BigQuery.generateSchema(dict)

#schema is now:
# {'fields': [
#    {'name': 'data', 'type': 'STRING', 'mode': 'NULLABLE'},
#    {'name': 'me', 'type': 'INT', 'mode': 'NULLABLE'}
# ]}