esegui una query sui dati Bigtable
Questo documento descrive come utilizzare BigQuery per eseguire query sui dati archiviati in una tabella esterna Bigtable. Per informazioni su come eseguire query sui dati direttamente da Bigtable, consulta la panoramica di GoogleSQL per Bigtable.
Bigtable è il database NoSQL di Google con popolamento sparso che può essere scalato a miliardi di righe, migliaia di colonne e petabyte di dati. Per informazioni sul modello dei dati Bigtable, consulta Modello di archiviazione.
Eseguire query su tabelle esterne permanenti
Prima di iniziare, tu o un amministratore della tua organizzazione dovete creare una tabella esterna da utilizzare. Per i dettagli e le autorizzazioni richieste, consulta Creare una tabella esterna BigQuery.
Ruoli obbligatori
Per eseguire query sulle tabelle esterne Bigtable, assicurati di disporre dei seguenti ruoli.
- Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) - Utente BigQuery (
roles/bigquery.user
) - Lettore Bigtable (
roles/bigtable.reader
)
A seconda delle tue autorizzazioni, puoi concederti questi ruoli o chiedere all'amministratore di concederteli. Per ulteriori informazioni sulla concessione dei ruoli, consulta Visualizzazione dei ruoli assegnabili sulle risorse.
Per vedere quali sono esattamente le autorizzazioni BigQuery richieste per eseguire query sulle tabelle esterne, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
bigquery.jobs.create
bigquery.readsessions.create
(obbligatorio solo se inserisci flussi di dati con l'API BigQuery Storage Write)bigquery.tables.get
bigquery.tables.getData
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
esegui una query sulla tabella
Puoi eseguire una query su una tabella esterna permanente di Bigtable esattamente come se fosse una tabella BigQuery standard, soggetta alle limitazioni relative alle origini dati esterne. Per ulteriori informazioni, consulta Eseguire query interattive e batch.
Eseguire query sulle tabelle esterne temporanee
L'esecuzione di query su un'origine dati esterna utilizzando una tabella temporanea è utile per query ad hoc una tantum sui dati esterni o per processi ETL (Extract, Transform, Load).
Per eseguire query su un'origine dati esterna senza creare una tabella permanente, fornisci una definizione di tabella per la tabella temporanea e poi utilizza questa definizione di tabella in un comando o una chiamata per eseguire query sulla tabella temporanea. Puoi fornire la definizione della tabella in uno dei seguenti modi:
- Un file di definizione della tabella
- Una definizione dello schema in linea
- Un file di schema JSON
Il file di definizione della tabella o lo schema fornito viene utilizzato per creare la tabella esterna temporanea e la query viene eseguita sulla tabella esterna temporanea.
Quando utilizzi una tabella esterna temporanea, non crei una tabella in uno dei tuoi set di dati BigQuery. Poiché la tabella non è archiviata in modo permanente in un set di dati, non può essere condivisa con altri.
L'utilizzo di una tabella esterna temporanea anziché di una tabella esterna permanente presenta alcune limitazioni, tra cui le seguenti:
- Devi disporre del ruolo Amministratore Bigtable (
roles/bigtable.admin
). - Questo approccio non ti consente di utilizzare la console Google Cloud per dedurre lo schema della tabella Bigtable e creare automaticamente la definizione della tabella. Devi creare tu stesso la definizione della tabella.
Ruoli obbligatori
Per eseguire query sulle tabelle esterne temporanee Bigtable, assicurati di disporre dei seguenti ruoli:
- Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) - Utente BigQuery (
roles/bigquery.user
) - Bigtable Admin (
roles/bigtable.admin
)
A seconda delle tue autorizzazioni, puoi concederti questi ruoli o chiedere all'amministratore di concederteli. Per ulteriori informazioni sulla concessione dei ruoli, consulta Visualizzazione dei ruoli assegnabili sulle risorse.
Per vedere quali sono esattamente le autorizzazioni BigQuery richieste per eseguire query sulle tabelle esterne, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
bigquery.jobs.create
bigquery.readsessions.create
(obbligatorio solo se inserisci flussi di dati con l'API BigQuery Storage Write)bigquery.tables.get
bigquery.tables.getData
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Crea ed esegui query sulla tabella
Per eseguire query sui dati Bigtable utilizzando una tabella esterna temporanea:
- Crea un file di definizione della tabella
- Invia sia una query che un file di definizione della tabella
La creazione e l'esecuzione di query su una tabella esterna temporanea sono supportate dallo strumento a riga di comando bq e dall'API.
bq
Per eseguire una query su una tabella temporanea utilizzando un file di definizione della tabella, inserisci il
comando bq query
con il flag --external_table_definition
.
(Facoltativo) Fornisci il flag --location
e imposta il valore sulla tua
posizione.
bq --location=LOCATION query \ --use_legacy_sql=false \ --external_table_definition=TABLE::DEFINITION_FILE \ 'QUERY'
Sostituisci quanto segue:
LOCATION
: il nome della tua posizione. Il flag--location
è facoltativo.TABLE
: il nome della tabella temporanea che stai creando.DEFINITION_FILE
: il percorso del file di definizione della tabella sul computer locale.QUERY
: la query che invii alla tabella temporanea.
Ad esempio, il comando seguente crea ed esegue query su una tabella temporanea
denominata follows
utilizzando un file di definizione della tabella denominato follows_def
.
bq query \
--use_legacy_sql=false \
--external_table_definition=follows::/tmp/follows_def \
'SELECT
COUNT(rowkey)
FROM
follows'
API
Crea una query. Consulta Esecuzione di query sui dati per informazioni sulla creazione di un job di query.
(Facoltativo) Specifica la tua posizione nella proprietà
location
nella sezionejobReference
della risorsa job.Specifica le proprietà dell'origine dati esterna impostando
ExternalDataConfiguration
per la risorsa tabella.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.
Considerazioni sulle prestazioni
Le prestazioni delle query sulle origini dati esterne di Bigtable dipendono da tre fattori:
- Il numero di righe
- La quantità di dati letti
- Il grado di parallelizzazione
BigQuery tenta di leggere il minor numero possibile di dati leggendo solo le famiglie di colonne a cui viene fatto riferimento nella query. Il grado di parallelizzazione dipende dal numero di nodi nel cluster Bigtable e dal numero di suddivisioni della tabella.
Tieni presente che Bigtable unisce automaticamente le suddivisioni in base al carico. Se la tua tabella non viene letta di frequente, nel tempo ci saranno meno suddivisioni e un graduale peggioramento delle prestazioni delle query. Per ulteriori informazioni, consulta la pagina Come BigQuery ottimizza i tuoi dati nel tempo.
Computing
Quando esegui query sui dati Bigtable da BigQuery, hai le seguenti opzioni di calcolo:
- Nodi del cluster, che è l'impostazione predefinita.
- Data Boost (anteprima), un'opzione di serverless computing che consente di isolare il traffico di analisi senza influire sul traffico di pubblicazione delle applicazioni gestito dai nodi dei cluster.
Per utilizzare Data Boost, tu o il tuo amministratore dovete creare un file di definizione che specifica un profilo dell'app Data Boost nell'URI Bigtable. Per saperne di più, consulta Creare una tabella esterna Bigtable.
Se non utilizzi Data Boost, tieni presente che l'esecuzione di query su Bigtable da BigQuery consuma cicli di CPU di Bigtable. Il consumo di CPU da parte di BigQuery quando si utilizzano nodi di cui è stato eseguito il provisioning per il calcolo potrebbe influire sulla latenza e sul throughput di altre richieste simultanee, ad esempio la pubblicazione del traffico degli utenti live. Ad esempio, un utilizzo elevato della CPU su Bigtable influisce sulle query long tail e aumenta la latenza al 99° percentile.
Di conseguenza, devi monitorare l'utilizzo della CPU di Bigtable per verificare di rientrare nei limiti consigliati, come indicato nella dashboard di monitoraggio di Bigtable nella console Google Cloud . Aumentando il numero di nodi per l'istanza, puoi gestire sia il traffico BigQuery sia il traffico di altre richieste simultanee.
Filtri delle query
Le query con un filtro di uguaglianza delle righe leggono solo quella riga specifica. Ad esempio, nella sintassi GoogleSQL:
SELECT COUNT(follows.column.name) FROM `dataset.table` WHERE rowkey = "alice";
Sono supportati anche i filtri di intervallo come rowkey > '1'
e rowkey < '8'
, ma
solo quando la chiave di riga viene letta come stringa con l'opzione readRowkeyAsString
.