5

sto recupero record da Google grande query utilizzando gemma 'google-api-client', Quando vado a prendere i record dalla tabellarisposta di analisi da parte di Google grande interrogazione

client.execute(api_method: @compute_api.tabledata.list, 
            parameters: {projectId: project, 
               datasetId: dataset, 
               tableId: table, 
               maxResults: 10}).body 

ottengo risposta come,

{ 
"kind": "bigquery#tableDataList", 
"etag": "\"iBDiwpngzDA0oFU52344ksWOrjA/-xEFKhLUueR63_XVaLG4z_mJt-8\"", 
"totalRows": "2000113", 
"pageToken": "BEIYURQ3J4AQAAAS23IIBAEAAUNAICAMCAGCBMFOCU======", 
"rows": [ 
{ 
"f": [ 
{ 
"v": "11873943041" 
}, 
{ 
"v": "[email protected]" 
}, 
{ 
"v": "1.430438401E9" 
}, 
{ 
"v": "1.430438402E9" 
}, 
{ 
"v": "1.430438404E9" 
}, 
{ 
"v": "1.430438862E9" 
}]}]} 

Quale non contiene i nomi delle colonne, Qualcuno ha qualche idea su come ottenere i nomi delle colonne insieme ai dati?

Attualmente ho bisogno di fare un'altra richiesta API per recuperare schema e ottenere i nomi delle colonne.

risposta

1

ho trovato risposta per questo io stesso utilizzando BigQuery strumento da riga di comando (bq),

bq --format=json query "select * from calls.details limit 10" 

quando si utilizza bq se noi non fornire opzione --quiet poi ritorna di risposta con testo aggiuntivo ad esso (sullo stato grande lavoro query), che causa problemi nel parsing JSON come illustrato di seguito

Waiting on bqjob_r36676afce1bcba8d_0000014f1ba0e36b_1 ... (0s) Current status: DONE 
[{"status":null,"userfield":null,"answer_stamp":"2015-05-01 00:00:04","term_roid":"a"}] 

Questo è il motivo mi sono trasferito a utilizzare le API di Google per recuperare i dati e ancora una volta che non ti dà i nomi delle colonne con i dati. Ma ho scoperto che siamo in grado di rimuovere il testo in più utilizzando l'opzione --quiet per il comando bq come

bq --quiet --format=json query "select * from calls.details limit 10" 
1

L'API non fornisce un modo per ottenere lo schema e le righe per una tabella arbitraria in una singola chiamata API. È necessario chiamare tables.get per ottenere lo schema e quindi tabledata.list per ottenere le righe.

Tuttavia, se si sta eseguendo una query, è possibile ottenere lo schema di output e le righe di output in una singola chiamata API utilizzando jobs.query o jobs.getQueryResults. È anche possibile chiamare jobs.getQueryResults in un processo di query già completato, anche se il lavoro di query è stato eseguito con altri mezzi.

https://cloud.google.com/bigquery/docs/reference/v2/jobs/query https://cloud.google.com/bigquery/docs/reference/v2/jobs/getQueryResults

+0

Anche dopo aver usato jobs.getQueryResults, sembra dovrai mappare le etichette dello schema con i dati reali. Lo strumento della riga di comando bq sembra essere la soluzione migliore per questo, che fornisce un'uscita corretta come ho accennato nella risposta di cui sopra. –

+0

Sì, devi ancora eseguire la mappatura, ma devi solo effettuare una chiamata API per ottenere tutte le informazioni. Usare bq va bene se funziona per te (dato che fa tutto questo sotto il cofano), ma non è nemmeno inteso come un'API, quindi la formattazione e l'output sono soggetti a modifiche. –