python - delete - insert data to bigquery table
Cómo insertar/agregar datos no estructurados a la tabla bigquery (1)
Puede usar autodetectar con la API de carga de BigQuery, es decir, su ejemplo con la herramienta bq cli tendrá el siguiente aspecto:
~$ 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 |
+------+----------+--------+------+
Actualización: si más tarde necesita agregar campos adicionales, puede usar schema_update_option para permitir nuevos campos. Desafortunadamente, todavía no funciona con autodetección, por lo que debe proporcionar un nuevo esquema explícitamente a la API de carga:
~$ 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 |
+------+------+----------+--------+--------+
Fondo
Quiero insertar / agregar JSON formateado de nueva línea en la tabla bigquery
través de la API cliente de python.
P.ej:
{"name":"xyz",mobile:xxx,location:"abc"}
{"name":"xyz",mobile:xxx,age:22}
El problema es que todos los campos en una fila son opcionales y no hay un esquema fijo definido para los datos.
Consulta
He leído que podemos usar tablas federadas, que admite la detección de autosquema.
Sin embargo, estoy buscando una función que detecte automáticamente el esquema de los datos, cree las tablas en consecuencia e incluso ajuste el esquema de la tabla si aparecen columnas / claves adicionales en los datos en lugar de crear una nueva tabla.
¿Sería esto posible usando la API del cliente de Python?