背景
我想bigquery通过python客户端API将换行格式的JSON插入/添加到表中。
bigquery
例如:
{"name":"xyz",mobile:xxx,location:"abc"} {"name":"xyz",mobile:xxx,age:22}
问题是,一行中的所有字段都是可选的,并且没有针对数据的固定定义模式。
询问
我已经读过我们可以使用支持自动模式检测的联合表。
但是,我正在寻找一种功能,该功能将自动从数据中检测模式,相应地创建表,甚至在数据中出现任何额外的列/键而不是创建新表时甚至调整表模式。
使用python客户端API是否有可能。
您可以对BigQuery加载API使用自动检测,即使用bq cli工具的示例如下所示:
~$ cat /tmp/x.json {"name":"xyz","mobile":"xxx","location":"abc"} {"name":"xyz","mobile":"xxx","age":"22"} ~$ bq load --autodetect --source_format=NEWLINE_DELIMITED_JSON tmp.x /tmp/x.json Upload complete. ~$ bq show tmp.x Table tmp.x Last modified Schema Total Rows Total Bytes Expiration ----------------- --------------------- ------------ ------------- ------------ 16 Aug 08:23:35 |- age: integer 2 33 |- location: string |- mobile: string |- name: string ~$ bq query "select * from tmp.x" +------+----------+--------+------+ | age | location | mobile | name | +------+----------+--------+------+ | NULL | abc | xxx | xyz | | 22 | NULL | xxx | xyz | +------+----------+--------+------+
更新: 如果以后需要添加其他字段,则可以使用schema_update_option允许新字段。遗憾的是,它还不能与自动检测一起使用,因此您需要为负载API明确提供新的架构:
~$ cat /tmp/x1.json {"name":"abc","mobile":"yyy","age":"25","gender":"male"} ~$ bq load --schema=name:STRING,age:INTEGER,location:STRING,mobile:STRING,gender:STRING --schema_update_option=ALLOW_FIELD_ADDITION --source_format=NEWLINE_DELIMITED_JSON tmp.x /tmp/x1.json Upload complete. ~$ bq show tmp.x Table tmp.x Last modified Schema Total Rows Total Bytes Expiration ----------------- --------------------- ------------ ------------- ----------- 19 Aug 10:43:09 |- name: string 3 57 |- age: integer |- location: string |- mobile: string |- gender: string ~$ bq query "select * from tmp.x" status: DONE +------+------+----------+--------+--------+ | name | age | location | mobile | gender | +------+------+----------+--------+--------+ | abc | 25 | NULL | yyy | male | | xyz | NULL | abc | xxx | NULL | | xyz | 22 | NULL | xxx | NULL | +------+------+----------+--------+--------+