2013-05-22 10 views
17

Próbuję dodać nową kolumnę do istniejącej tabeli BigQuery. Próbowałem polecenia narzędzia bq i API. Dostaję następujący błąd podczas wywoływania funkcji Tables.update().BigQery dodaje kolumny do schematu tabeli

Próbowałem z zapewnieniem pełnego schematu z dodatkowym polem i to również daje mi ten sam błąd, jak pokazano poniżej.

Dzięki API dostaję następujący błąd:

{ 
"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]" 
} 
} 

Dzięki narzędziu BQ mi się następujący błąd: ./bq aktualizacji -t bla added_column: integer

BigQuery błąd w operacji aktualizacji: Pod warunkiem Schema robi nie odpowiada tabeli [bla]

Odpowiedz

37

Spróbuj:

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

Edytuj plik table.json i usuń wszystkie elementy poza polem "pól" (np. zachować [ { "name": "x" ... }, ... ]). Następnie dodaj nowe pole do schematu.

lub rury przez jq

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

Następnie uruchom:

bq update yourdataset.yourtable table.json 

Możesz dodać --apilog=apilog.txt do początku linii poleceń, które pokaże dokładnie to, co jest wysyłane/zwracane z serwera BigQuery.

+0

thnx. To działało – archman

+1

Można również określić schemat w wierszu poleceń jako pojedynczą linię CSV, np. bq update dataset.table "name: string, age: integer". – Jon

+0

To działa całkiem dobrze, mimo że dokumentacja bigquery mówi, że schematu tabeli nie można zaktualizować po utworzeniu: Po określeniu schematu tabeli nie można go zmienić bez uprzedniego usunięcia wszystkich powiązanych z nim danych. Jeśli chcesz zmienić schemat tabeli, musisz podać parametr writeDisposition WRITE_TRUNCATE. Aby uzyskać więcej informacji, zobacz zasób Praca. –

2

W moim przypadku próbowałem dodać pole REQUIRED do tabeli szablonów i wystąpił ten błąd. Zmiana pola na NULLABLE, pozwól mi zaktualizować tabelę.

Nowsza wersja najnowszych aktualizacji dla każdego, kto potknie się o 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 tabel szablonu

Powiązane problemy