esegui una query sui dati Bigtable
Questo documento descrive come utilizzare BigQuery per eseguire query sui dati archiviati in un 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 sparso scalabile fino a miliardi di righe, migliaia di colonne e e petabyte di dati. Per informazioni sul modello di dati Bigtable, consulta Modello di archiviazione.
Esegui query su tabelle esterne permanenti
Prima di iniziare, tu o un altro utente 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 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
)
In base alle tue autorizzazioni, puoi concediti questi ruoli o chiedi all'amministratore per concederteli. 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 sei tu i flussi di dati con API BigQuery Storage Writer)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 Bigtable esterna permanente esattamente come se si trattasse di un tabella BigQuery standard, soggetto alle limitazioni su origini dati esterne. Per ulteriori informazioni, consulta Eseguire query interattive e batch query.
Esegui query sulle tabelle esterne temporanee
È utile eseguire query su un'origine dati esterna utilizzando una tabella temporanea per query una tantum ad hoc su dati esterni o per l'estrazione, la trasformazione e il caricamento (ETL) i processi di machine learning.
Per eseguire una query su un'origine dati esterna senza creare una tabella permanente, fornisci una tabella definizione della tabella temporanea e poi utilizzarla in un comando o in una chiamata per eseguire una query sulla tabella temporanea. Puoi fornire la definizione della tabella in uno dei seguenti modi:
- Un file di definizione della tabella
- Definizione di uno schema in linea
- Un file di schema JSON
Il file di definizione della tabella o lo schema fornito vengono utilizzati per creare la tabella esterna temporanea. e la query viene eseguita sulla tabella esterna temporanea.
Quando utilizzi una tabella esterna temporanea, non ne crei una in una delle set di dati BigQuery. Poiché la tabella non è archiviata in modo permanente in un set di dati, non possono essere condivisi con altri.
Utilizzo di una tabella esterna temporanea anziché di una tabella esterna permanente presenta alcune limitazioni, tra cui:
- 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 personalmente la definizione della tabella.
Ruoli obbligatori
Per eseguire query sulle tabelle esterne temporanee di Bigtable, assicurati di disporre dei seguenti ruoli:
- Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) - Utente BigQuery (
roles/bigquery.user
) - Bigtable Admin (
roles/bigtable.admin
)
In base alle tue autorizzazioni, puoi concediti questi ruoli o chiedi all'amministratore per concederteli. 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 esegui lo streaming di dati con l'API BigQuery Storage Write)bigquery.tables.get
bigquery.tables.getData
Potresti anche riuscire a ottenere queste autorizzazioni 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:
- Crea un file di definizione della tabella
- Invia sia una query sia un file di definizione della tabella
La creazione e l'esecuzione di query su una tabella esterna temporanea sono supportate dall'API e dallo strumento a riga di comando bq.
bq
Per eseguire query su una tabella temporanea utilizzando un file di definizione della tabella, inserisci il metodo
Comando bq query
con il flag --external_table_definition
.
(Facoltativo) Fornisci il flag --location
e imposta il valore su
località.
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 file di definizione della tabella sul tuo computer locale.QUERY
: la query che stai inviando alla tabella temporanea.
Ad esempio, il seguente comando crea ed esegue una query su una tabella temporanea
denominato follows
mediante 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
del SezionejobReference
della risorsa job.Specifica le proprietà delle origini dati esterne impostando il parametro
ExternalDataConfiguration
per la risorsa tabella.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta API Java BigQuery documentazione di riferimento.
Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.
Considerazioni sulle prestazioni
Le prestazioni delle query sulle origini dati esterne di Bigtable dipende da tre fattori:
- Il numero di righe
- La quantità di dati letta
- L'entità della parallellizzazione
BigQuery prova a leggere la minor quantità di dati possibile leggendo solo le famiglie di colonne a cui viene fatto riferimento nella query. L'estensione il caricamento in contemporanea dipende da quanti nodi Cluster Bigtable e quante suddivisioni hai per la tua tabella.
Tieni presente che Bigtable unisce automaticamente le suddivisioni in base al carico. Se le tue una tabella non viene letta di frequente, ci saranno meno suddivisioni nel tempo un peggioramento graduale delle prestazioni delle query. Per ulteriori informazioni sulla suddivisione una tabella per chiave di riga, consulta Gestione delle tabelle.
L'esecuzione di query su Bigtable da BigQuery Cicli di CPU di Bigtable. Il consumo della CPU da parte di BigQuery potrebbe influire sulla latenza e sul throughput di altre richieste concorrenti, ad esempio la pubblicazione del traffico degli utenti in tempo reale. Ad esempio, 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 entro i limiti consigliati, come indicato nella nella console Google Cloud. Aumentando il numero di i nodi per l'istanza consentono di gestire Traffico BigQuery e traffico da altri richieste in parallelo.
Filtri di query
Le query con un filtro di uguaglianza delle righe leggono solo quella riga specifica. Ad esempio, nel Sintassi GoogleSQL:
SELECT COUNT(follows.column.name) FROM `dataset.table` WHERE rowkey = "alice";
Sono supportati anche i filtri per intervallo, come rowkey > '1'
e rowkey < '8'
, ma
solo quando rowkey viene letta come stringa con l'opzione readRowkeyAsString
.