2013-06-13 16 views
5

Nella documentazione dell'API di BigQuery esiste un metodo chiamato patch. Spero di poterlo usare per modificare lo schema di una tabella esistente. Sfortunatamente non è supportato da bq. Ma secondo il loro sito web, puoi provarlo allo https://developers.google.com/bigquery/docs/reference/v2/tables/patch. Tuttavia quando provo invia la seguente richiesta:.Come si usa la patch BigQuery?

PATCH https://www.googleapis.com/bigquery/v2/projects/(my project id)/datasets/tmp_bt/tables/change_cols?key={YOUR_API_KEY} 

Content-Type: application/json 
Authorization: Bearer (removed) 
X-JavaScript-User-Agent: Google APIs Explorer 

{ 
"schema": { 
    "fields": [ 
    { 
    }, 
    { 
    }, 
    { 
    "mode": "nullable", 
    "name": "gotchahere", 
    "type": "string" 
    } 
    ] 
} 
} 

(non ho idea di dove gli elementi vuoti venuti, e l'editor è troppo doloroso da usare per incollare solo nella mia definizione della tabella esistente Rilevo che manca elementi necessari come il mio ID progetto, che mi aspettavo di essere inclusi perché erano tenuti in forma) e poi ho ottenere la risposta:

cache-control: private, max-age=0 
content-encoding: gzip 
content-length: 122 
content-type: application/json; charset=UTF-8 
date: Thu, 13 Jun 2013 22:22:09 GMT 
expires: Thu, 13 Jun 2013 22:22:09 GMT 
server: GSE 

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "backendError", 
    "message": "Backend Error" 
    } 
    ], 
    "code": 503, 
    "message": "Backend Error" 
} 
} 

che è assolutamente inutile. Ho eseguito una ricerca sul Web e non sono riuscito a trovare alcun esempio in uso.

Qualcuno può darmi un esempio di utilizzo della patch BigQuery per modificare una tabella e una descrizione di cosa può effettivamente fare?

+1

Secondo http://googledevelopers.blogspot.com/2013/03/bigquery-gets-big-new-features-to-make.html il metodo di aggiornamento dovrebbe anche fare la stessa cosa. Alcuni esempi potrebbero funzionare allo stesso modo. – btilly

risposta

12

TLDR: è necessario fornire lo schema completo nel corpo della richiesta di patch, non solo i campi che si sta tentando di aggiungere. L'errore di backend è probabilmente causato dai campi vuoti in quell'array.


L'API di BigQuery consente di aggiornare le tabelle (e altre risorse) in due modi: aggiornamento e patch.

Il metodo update sostituisce la risorsa tabella con la nuova risorsa fornita. Questo metodo è utile nei casi in cui si desidera prendere una risorsa di tabella esistente, modificarla e quindi reinserire la risorsa di tabella modificata in BigQuery nella sua interezza. (Si noti, tuttavia, che alcuni campi dell'oggetto, come creationTime, sono considerati immutabili, quindi i nuovi valori forniti per questi campi verranno ignorati.)

Il metodo patch sostituisce solo i campi inclusi nella richiesta e lascia il resto della risorsa invariato. Questo metodo è utile se vuoi apportare una modifica isolata a un campo senza preoccuparti del resto. Questo algoritmo viene applicato in modo ricorsivo a tutti gli oggetti nidificati, ma non per gli array nidificati. In altre parole, la risorsa patch inviata con la richiesta viene unita in modo ricorsivo alla risorsa esistente fino a quando non viene rilevato un valore scalare o array, a quel punto la matrice o il valore nell'oggetto patch sostituisce quello della risorsa esistente.

Poiché lo schema che si sta tentando di aggiornare contiene una serie di campi e poiché il metodo patch aggiorna gli array all'ingrosso, l'oggetto patch deve contenere l'array completo di campi che si desidera nello schema risultante. (Non è possibile aggiungere un campo specificando una matrice a un campo nell'oggetto patch.)

Si noti che l'ID della tabella viene fornito nell'URL della richiesta, quindi non è necessario che sia incluso nell'oggetto stesso .

Infine, l'errore di backend è un problema sulla nostra estremità, probabilmente a causa dei due campi di schema vuoti nella richiesta. Scaveremo ulteriormente e, auspicabilmente, miglioreremo il messaggio di errore per il futuro.

+0

Diverse domande. Quando cambi campi, cosa succede ai campi esistenti? Corrisponde al nome? Potenzialmente li rinomina? Cosa succede se i tipi non corrispondono? – btilly

+0

E una domanda di prestazione non correlata. Supponiamo che io abbia un flusso di attività. Quando lo interrogo, voglio sempre limitare l'intervallo di volte e avere altre condizioni casuali (tipo di attività, utente, ecc. Ecc. Ecc.). Quindi avrò tutto il tempo sul tavolo, ma voglio solo un giorno, una settimana o un mese. Esistono suggerimenti per rendere più efficiente tale schema di utilizzo? – btilly

+0

Gli aggiornamenti dello schema consentono solo di aggiungere campi o modi di campo di relax (ad es. Richiesto -> opzionale). Non è possibile modificare nomi o tipi di campi e non è possibile riordinarli. –