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.