Eseguire query sui dati di Cloud Storage nelle tabelle BigLake
Questo documento descrive come eseguire query sui dati archiviati in un Tabella BigLake di Cloud Storage.
Prima di iniziare
Assicurati di avere una tabella BigLake di Cloud Storage.
Ruoli obbligatori
Per eseguire query sulle tabelle BigLake di Cloud Storage, assicurati di disporre dei seguenti ruoli:
- Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) - Utente BigQuery (
roles/bigquery.user
)
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 esatte necessarie per eseguire query nelle tabelle BigLake di Cloud Storage, espandi Sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
bigquery.jobs.create
bigquery.readsessions.create
(obbligatorio solo se sei tu leggi i dati con API BigQuery Storage Read)bigquery.tables.get
bigquery.tables.getData
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Esegui query sulle tabelle BigLake
Dopo aver creato una tabella BigLake di Cloud Storage, puoi
eseguire query utilizzando la sintassi di GoogleSQL,
come se fosse una tabella BigQuery standard. Ad esempio:
SELECT field1, field2 FROM mydataset.my_cloud_storage_table;
.
Eseguire query su tabelle BigLake utilizzando strumenti di elaborazione dati esterni
Puoi utilizzare i connettori BigQuery con altri strumenti di elaborazione dati per accedere alle tabelle BigLake su Cloud Storage. Per ulteriori informazioni, consulta Connettori.
Apache Spark
L'esempio seguente utilizza Dataproc, ma funziona anche con qualsiasi implementazione di Spark che utilizza il connettore Spark-BigQuery.
In questo esempio, fornisci il connettore Spark-BigQuery come azione di inizializzazione quando crei un cluster. Questa azione ti consente di utilizzare un notebook Zeppelin ed eseguire il percorso dell'utente data analyst.
Le versioni del connettore Spark-BigQuery sono elencate nel file GitHub Repository GoogleCloudDataproc/spark-bigquery-connector.
Crea un cluster a un solo nodo utilizzando l'azione di inizializzazione per il connettore Spark-BigQuery:
gcloud dataproc clusters create biglake-demo-cluster \ --optional-components=ZEPPELIN \ --region=REGION \ --enable-component-gateway \ --single-node \ --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \ --metadata spark-bigquery-connector-url= gs://spark-lib/bigquery/spark-bigquery-with-dependencies_SCALA_VERSION-CONNECTOR_VERSION.jar
Apache Hive
L'esempio seguente utilizza Dataproc, ma funziona anche con qualsiasi deployment Hive che utilizza Connettore Hive-BigQuery.
In questo esempio, fornisci il connettore Hive-BigQuery come inizializzazione quando crei un cluster.
Le versioni del connettore Hive-BigQuery sono elencate nel file GitHub Repository GoogleCloudDataproc/hive-bigquery-connector.
Crea un cluster a un solo nodo utilizzando l'azione di inizializzazione per il connettore Hive-BigQuery:
gcloud dataproc clusters create biglake-hive-demo-cluster \ --region=REGION \ --single-node \ --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \ --metadata hive-bigquery-connector-url=gs://goog-dataproc-artifacts-REGION/hive-bigquery/hive-bigquery-connector-CONNECTOR_VERSION.jar
Per ulteriori informazioni sul connettore Hive-BigQuery, consulta Utilizzare il connettore Hive-BigQuery.
Dataflow
Per leggere le tabelle BigLake da Dataflow, utilizza il connettore Dataflow in modalità DIRECT_READ
per utilizzare l'API BigQuery Storage. Lettura da una stringa di query
. Consulta BigQuery I/O
nella documentazione di Apache Beam.
Esegui query su tabelle BigLake 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 modi:
- Un file di definizione della tabella
- Definizione di uno schema in linea
- Un file dello 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 viene memorizzata in modo permanente in un set di dati, non può essere condivisa con altri.
Puoi creare e eseguire query su una tabella temporanea collegata a un'origine dati esterna utilizzando lo strumento a riga di comando bq, l'API o le librerie client.
bq
Utilizza la
Comando bq query
con
Flag --external_table_definition
.
(Facoltativo) Fornisci il flag --location
e imposta il valore su
località.
Per eseguire una query su una tabella temporanea collegata all'origine dati esterna utilizzando una tabella di definizione, inserisci il seguente comando.
bq --location=LOCATION query \ --external_table_definition=TABLE::DEFINITION_FILE \ 'QUERY'
Sostituisci quanto segue:
LOCATION
: il nome della tua località. Il flag--location
è facoltativo. Ad esempio, se utilizzi BigQuery nella regione di Tokyo, puoi impostare il valore del flag suasia-northeast1
. Puoi impostare un valore predefinito per la località utilizzando nel file.bigqueryrc.TABLE
: il nome della tabella temporanea che stai creando.DEFINITION_FILE
: il percorso del file di definizione della tabella. sul tuo computer locale.QUERY
: la query che stai inviando alla tabella temporanea.
Ad esempio, il comando seguente crea ed esegue una query su una tabella temporanea
denominato sales
mediante un file di definizione della tabella denominato sales_def
.
bq query \
--external_table_definition=sales::sales_def@us.myconnection \
'SELECT
Region,
Total_sales
FROM
sales'
Per eseguire query su una tabella temporanea collegata all'origine dati esterna utilizzando una definizione di schema in linea, inserisci il seguente comando.
bq --location=LOCATION query \ --external_table_definition=TABLE::SCHEMA@SOURCE_FORMAT=BUCKET_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \ 'query'
Sostituisci quanto segue:
LOCATION
: il nome della tua posizione. Il flag--location
è facoltativo. Ad esempio, se utilizzi BigQuery nella regione di Tokyo, puoi impostare il valore del flag suasia-northeast1
. Puoi impostare un valore predefinito per la posizione utilizzando il file .bigqueryrc.TABLE
: il nome della tabella temporanea che stai creando.SCHEMA
: la definizione dello schema incorporato nel formatofield:data_type,field:data_type
.SOURCE_FORMAT
: il formato dell'origine dati esterna, ad esempioCSV
.BUCKET_PATH
: il percorso del bucket Cloud Storage contenente i dati della tabella, nel formatogs://bucket_name/[folder_name/]file_pattern
.Puoi selezionare più file dal bucket specificando un asterisco (
*
) carattere jolly nel campofile_pattern
. Ad esempio:gs://mybucket/file00*.parquet
. Per maggiori informazioni le informazioni, vedi Supporto dei caratteri jolly per gli URI Cloud Storage.Puoi specificare più bucket per l'opzione
uris
fornendo più percorsi.Gli esempi seguenti mostrano valori
uris
validi:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.parquet
gs://bucket/path1/file1*
,gs://bucket1/path1/*
Quando specifichi valori
uris
che hanno come target più file, tutti questi file devono condividere uno schema compatibile.Per ulteriori informazioni sull'utilizzo degli URI Cloud Storage in BigQuery, consulta Percorso della risorsa Cloud Storage.
PROJECT_ID
: il progetto che contiene connessione.REGION
: la regione che contiene la connessione, ad esempious
.CONNECTION_ID
: il nome della connessione, ad esempiomyconnection
.QUERY
: la query che stai inviando alla tabella temporanea.
Ad esempio, il comando seguente crea ed esegue una query su una tabella temporanea
denominato sales
collegato a un file CSV archiviato in Cloud Storage con
seguente definizione di schema:
Region:STRING,Quarter:STRING,Total_sales:INTEGER
.
bq query \
--external_table_definition=sales::Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=gs://mybucket/sales.csv@us.myconnection \
'SELECT
Region,
Total_sales
FROM
sales'
Per eseguire una query su una tabella temporanea collegata all'origine dati esterna utilizzando un file schema JSON, inserisci il seguente comando.
bq --location=LOCATION query \ --external_table_definition=SCHEMA_FILE@SOURCE_FORMAT=BUCKET_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \ 'QUERY'
Sostituisci quanto segue:
LOCATION
: il nome della tua posizione. Il flag--location
è facoltativo. Ad esempio, se utilizzi BigQuery nella regione di Tokyo, puoi impostare il valore del flag suasia-northeast1
. Puoi impostare un valore predefinito per la località utilizzando nel file.bigqueryrc.SCHEMA_FILE
: il percorso del file dello schema JSON sulla tua macchina locale.SOURCE_FORMAT
: il formato dell'origine dati esterna, ad esempioCSV
.BUCKET_PATH
: il percorso del bucket Cloud Storage contenente i dati della tabella, nel formatogs://bucket_name/[folder_name/]file_pattern
.Puoi selezionare più file dal bucket specificando un carattere jolly asterisco (
*
) infile_pattern
. Ad esempio:gs://mybucket/file00*.parquet
. Per maggiori informazioni le informazioni, vedi Supporto dei caratteri jolly per gli URI Cloud Storage.Puoi specificare più bucket per l'opzione
uris
fornendo più percorsi.Gli esempi seguenti mostrano valori
uris
validi:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.parquet
gs://bucket/path1/file1*
,gs://bucket1/path1/*
Quando specifichi valori
uris
che hanno come target più file, tutti questi file devono condividere uno schema compatibile.Per ulteriori informazioni sull'utilizzo degli URI Cloud Storage in BigQuery, consulta Percorso della risorsa Cloud Storage.
PROJECT_ID
: il progetto che contiene connessione.REGION
: la regione che contiene la connessione, ad esempious
.CONNECTION_ID
: il nome della connessione, ad esempiomyconnection
.QUERY
: la query che stai inviando alla tabella temporanea.
Ad esempio, il comando seguente crea ed esegue una query su una tabella temporanea
denominato sales
e collegato a un file CSV archiviato in Cloud Storage utilizzando
/tmp/sales_schema.json
file di schema.
bq query \ --external_table_definition=sales::/tmp/sales_schema.json@CSV=gs://mybucket/sales.csv@us.myconnection \ 'SELECT Region, Total_sales FROM sales'
API
Per eseguire una query utilizzando l'API:
- Crea un oggetto
Job
. - Compila la sezione
configuration
dell'oggettoJob
con un oggettoJobConfiguration
. - Compila la sezione
query
dell'oggettoJobConfiguration
con un oggettoJobConfigurationQuery
. - Compila la sezione
tableDefinitions
dell'oggettoJobConfigurationQuery
con un oggettoExternalDataConfiguration
. Specifica la connessione da utilizzare per connettersi a Cloud Storage in il campoconnectionId
. - Chiama il metodo
jobs.insert
per eseguire la query in modo asincrono o il metodojobs.query
per eseguire la query in modo sincrono, passando l'oggettoJob
.
Passaggi successivi
- Scopri di più sull'utilizzo di SQL in BigQuery.
- Scopri di più sulle tabelle BigLake.
- Scopri di più sulle quote di BigQuery.