2013-05-22 11 views
17

Sto tentando 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().Bigquery aggiunge colonne allo schema della tabella

Ho provato a fornire schema completo con campo aggiuntivo e che mi dà anche lo stesso errore mostrato di seguito.

Con API ottengo 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 strumento BQ ottengo errore seguente: ./bq aggiornamento -t bla added_column: intero

BigQuery errore in un'operazione di aggiornamento: fornito Schema fa non corrisponde Tabella [blah]

risposta

37

Prova questo:

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

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

o tubo attraverso jq

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

Poi gestita:

bq update yourdataset.yourtable table.json 

È possibile aggiungere --apilog=apilog.txt fino all'inizio della riga di comando che vi mostrerà esattamente ciò che viene inviato/restituito dal server BigQuery.

+0

thnx. Questo ha funzionato – archman

+1

Puoi anche specificare lo schema sulla riga di comando come una coppia CSV a riga singola, ad es. bq update dataset.table "name: string, age: integer". – Jon

+0

Funziona piuttosto bene, nonostante la documentazione di BigQuery affermi che uno schema di tabella non può essere aggiornato una volta creato: Una volta che lo schema di una tabella è stato specificato, non è possibile cambiarlo senza prima cancellare tutti i dati ad esso associati. Se si desidera modificare lo schema di una tabella, è necessario specificare una writeDisposition di WRITE_TRUNCATE. Per ulteriori informazioni, consultare la risorsa Lavori. –

2

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

Anche 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 

Some docs per le tabelle del modello

Problemi correlati