Esegui query sui dati di Bigtable
Questo documento descrive come eseguire query sui dati archiviati in una tabella esterna di Bigtable.
Bigtable è il database NoSQL di Google scarsamente popolato in grado di scalare fino a miliardi di righe, migliaia di colonne e petabyte di dati. Per informazioni sul modello dei dati di Bigtable, consulta Modello di archiviazione.
Esegui query su tabelle esterne permanenti
Prima di iniziare, tu o un altro utente dell'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 permanenti di 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 concedere questi ruoli a te stesso o chiedere all'amministratore di concederli. Per ulteriori informazioni sulla concessione dei ruoli, consulta Visualizzazione dei ruoli assegnabili sulle risorse.
Per visualizzare le autorizzazioni BigQuery esatte necessarie per eseguire query sulle tabelle esterne, espandi la sezione Autorizzazioni richieste:
Autorizzazioni obbligatorie
bigquery.jobs.create
bigquery.readsessions.create
(Obbligatorio solo se stai eseguendo il flusso di dati con l'API BigQuery Storage Write)bigquery.tables.get
bigquery.tables.getData
Potresti essere in grado di ottenere queste autorizzazioni anche con i ruoli personalizzati o altri ruoli predefiniti.
esegui una query sulla tabella
Puoi eseguire una query su una tabella Bigtable esterna permanente esattamente come se fosse una tabella BigQuery standard, in conformità alle limitazioni sulle origini dati esterne. Per ulteriori informazioni, consulta Eseguire query interattive e batch.
Esegui query su tabelle esterne temporanee
L'esecuzione di query su un'origine dati esterna utilizzando una tabella temporanea è utile per le query una tantum ad hoc su dati esterni o per i processi di estrazione, trasformazione e caricamento (ETL).
Per eseguire query su un'origine dati esterna senza creare una tabella permanente, fornisci una definizione per la tabella temporanea e poi utilizzala in un comando o in 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 di 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, dopodiché la query viene eseguita nella tabella esterna temporanea.
Quando utilizzi una tabella esterna temporanea, non ne crei una 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:
- Devi avere il ruolo Amministratore Bigtable (
roles/bigtable.admin
). - Questo approccio non consente di utilizzare la console Google Cloud per dedurre lo schema della tabella Bigtable e creare automaticamente la definizione della tabella. Devi creare personalmente la definizione della tabella.
Ruoli obbligatori
Per eseguire query sulle tabelle esterne temporanee di Bigtable, assicurati di avere i seguenti ruoli:
- Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) - Utente BigQuery (
roles/bigquery.user
) - Amministratore Bigtable (
roles/bigtable.admin
)
A seconda delle tue autorizzazioni, puoi concedere questi ruoli a te stesso o chiedere all'amministratore di concederli. Per ulteriori informazioni sulla concessione dei ruoli, consulta Visualizzazione dei ruoli assegnabili sulle risorse.
Per visualizzare le autorizzazioni BigQuery esatte necessarie per eseguire query sulle tabelle esterne, espandi la sezione Autorizzazioni richieste:
Autorizzazioni obbligatorie
bigquery.jobs.create
bigquery.readsessions.create
(Obbligatorio solo se stai eseguendo il flusso di dati con l'API BigQuery Storage Write)bigquery.tables.get
bigquery.tables.getData
Potresti essere in grado di ottenere queste autorizzazioni anche con i ruoli personalizzati o altri ruoli predefiniti.
Crea ed esegui query sulla tabella
Per eseguire query sui dati Bigtable utilizzando una tabella esterna temporanea:
- Creare un file di definizione della tabella
- Invia una query e 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
località.
bq --location=LOCATION query \ --use_legacy_sql=false \ --external_table_definition=TABLE::DEFINITION_FILE \ 'QUERY'
Sostituisci quanto segue:
LOCATION
: il nome della tua località. Il flag--location
è facoltativo.TABLE
: il nome della tabella temporanea che stai creando.DEFINITION_FILE
: il percorso del file di definizione della tabella sulla macchina locale.QUERY
: la query che stai inviando alla tabella temporanea.
Ad esempio, il seguente comando 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 località nella proprietà
location
nella sezionejobReference
della risorsa job.Specifica le proprietà dell'origine dati esterna impostando
ExternalDataConfiguration
per la risorsa di tabella.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.
Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.
Considerazioni sul rendimento
Le prestazioni delle query sulle origini dati esterne di Bigtable dipendono da tre fattori:
- Il numero di righe
- La quantità di dati letti
- L'estensione del caricamento in contemporanea
BigQuery cerca di leggere il minor numero possibile di dati leggendo solo le famiglie di colonne a cui viene fatto riferimento nella query. L'estensione del parallelizzazione dipende dal numero di nodi presenti nel cluster Bigtable e dal numero di suddivisioni presenti per la tabella.
Tieni presente che Bigtable unisce automaticamente le suddivisioni in base al carico. Se la tabella non viene letta di frequente, ci saranno meno suddivisioni nel tempo e un peggioramento graduale delle prestazioni delle query. Per ulteriori informazioni sulla suddivisione di una tabella per chiave di riga, consulta Gestione delle tabelle.
Le query su Bigtable da BigQuery utilizzano cicli di CPU di Bigtable. Il consumo della CPU da parte di BigQuery potrebbe influire sulla latenza e sulla velocità effettiva di altre richieste in parallelo, come la gestione del traffico degli utenti in tempo reale. Ad esempio, l'utilizzo elevato della CPU su Bigtable influisce sulle query long-tail e aumenta la latenza al 99° percentile.
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. L'aumento del numero di nodi per l'istanza consente di gestire sia il traffico di BigQuery sia quello proveniente da altre richieste in parallelo.
Filtri per le query
Le query con un filtro di uguaglianza delle righe leggono solo quella riga specifica. Ad esempio, nella sintassi di 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 rowkey viene letta come una stringa con l'opzione readRowkeyAsString
.