create bigquery google-bigquery

google-bigquery - create dataset bigquery



Bigquery agregar columnas al esquema de tabla (4)

Estoy tratando de agregar una nueva columna a la tabla existente de BigQuery. He intentado la herramienta de comando bq y el enfoque API. Recibo el siguiente error cuando hago una llamada a Tables.update ().

He intentado proporcionar un esquema completo con un campo adicional y eso también me da el mismo error que se muestra a continuación.

Con API me sale el siguiente error:

{ "schema": { "fields": [{ "name": "added_column", "type": "integer", "mode": "nullable" }] } } { "error": { "errors": [{ "domain": "global", "reason": "invalid", "message": "Provided Schema does not match Table [blah]" }], "code": 400, "message": "Provided Schema does not match Table [blah]" } }

Con la herramienta BQ me sale el siguiente error:

./bq update -t blah added_column:integer

Error de BigQuery en la operación de actualización: el esquema proporcionado no coincide con la tabla [blah]


Ejemplo utilizando la API JS de BigQuery Node:

const fieldDefinition = { name: ''nestedColumn'', type: ''RECORD'', mode: ''REPEATED'', fields: [ {name: ''id'', type: ''INTEGER'', mode: ''NULLABLE''}, {name: ''amount'', type: ''INTEGER'', mode: ''NULLABLE''}, ], }; const table = bigQuery.dataset(''dataset1'').table(''source_table_name''); const metaDataResult = await table.getMetadata(); const metaData = metaDataResult[0]; const fields = metaData.schema.fields; fields.push(fieldDefinition); await table.setMetadata({schema: {fields}});


En mi caso, estaba tratando de agregar un campo REQUIRED a una tabla de plantillas, y estaba teniendo este error. Cambiando el campo a NULLABLE , déjame actualizar la tabla.

También la versión más reciente en las actualizaciones para cualquier persona tropezando desde Google.

#To create table bq mk --schema domain:string,pageType:string,source:string -t Project:Dataset.table #Or using schema file bq mk --schema SchemaFile.json -t Project:Dataset.table #SchemaFile.json format [{ "mode": "REQUIRED", "name": "utcTime", "type": "TIMESTAMP" }, { "mode": "REQUIRED", "name": "domain", "type": "STRING" }, { "mode": "NULLABLE", "name": "testBucket", "type": "STRING" }, { "mode": "REQUIRED", "name": "isMobile", "type": "BOOLEAN" }, { "mode": "REQUIRED", "name": "Category", "type": "RECORD", "fields": [ { "mode": "NULLABLE", "name": "Type", "type": "STRING" }, { "mode": "REQUIRED", "name": "Published", "type": "BOOLEAN" } ] }] # TO update bq update --schema UpdatedSchema.json -t Project:Dataset.table # Updated Schema contains old and any newly added columns

Algunos documentos para tablas de plantillas


Me quedé atascado tratando de agregar columnas a una tabla existente en BigQuery usando el cliente Python y encontré esta publicación varias veces. Luego dejaré el código que lo resolvió por mí, en caso de que alguien tenga el mismo problema:

# update table schema bigquery_client = bigquery.Client() dataset_ref = bigquery_client.dataset(dataset_id) table_ref = dataset_ref.table(table_id) table = bigquery_client.get_table(table_ref) new_schema = list(table.schema) new_schema.append(bigquery.SchemaField(''LOLWTFMAN'',''STRING'')) table.schema = new_schema table = bigquery_client.update_table(table, [''schema'']) # API request


Prueba esto:

bq --format=prettyjson show yourdataset.yourtable > table.json

Edite table.json y elimine todo excepto el interior de "campos" (por ejemplo, mantenga el [ { "name": "x" ... }, ... ] ). Luego agrega tu nuevo campo al esquema.

O tubo a través de jq

bq --format=prettyjson show yourdataset.yourtable | jq .schema.fields > table.json

Entonces corre:

bq update yourdataset.yourtable table.json

Puede agregar --apilog=apilog.txt al principio de la línea de comando que mostrará exactamente lo que se envía / devuelve desde el servidor de bigquery.