Bigquery aggiunge colonne allo schema della tabella

Sto cercando di aggiungere una nuova colonna alla tabella esistente di BigQuery. Ho provato bq command tool e l’approccio API. Ottengo il seguente errore quando effettuo una chiamata a Tables.update ().

Ho provato a fornire lo schema completo con campi aggiuntivi e questo mi dà lo stesso errore, come mostrato di seguito.

Con l’API ottengo il seguente errore:

{ "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 lo strumento BQ viene visualizzato l’errore seguente: ./bq update -t ​​blah added_column: intero

Errore BigQuery nell’operazione di aggiornamento: lo schema fornito non corrisponde alla tabella [blah]

Prova questo:

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

Modifica table.json e rimuovi tutto tranne l’interno dei “campi” (ad esempio, mantieni il [ { "name": "x" ... }, ... ] ). Quindi aggiungi il tuo nuovo campo allo schema.

O passa attraverso jq

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

Quindi esegui:

 bq update yourdataset.yourtable table.json 

È ansible aggiungere --apilog=apilog.txt all’inizio della riga di comando che mostrerà esattamente ciò che viene inviato / restituito dal server bigquery.

Nel mio caso stavo cercando di aggiungere un campo REQUIRED a una tabella di template e stavo correndo in questo errore. Cambiando il campo in NULLABLE , permettimi di aggiornare la tabella.

Anche la versione più recente sugli aggiornamenti per chiunque inciampi da 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 

Alcuni documenti per le tabelle dei modelli

Ero bloccato cercando di aggiungere colonne a una tabella esistente in BigQuery usando il client Python e ho trovato questo post più volte. Allora lascerò il pezzo di codice che lo ha risolto per me, nel caso qualcuno abbia lo stesso 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