Eseguire query sui dati di Cloud Storage nelle tabelle BigLake
Questo documento descrive come eseguire query sui dati archiviati in una 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 avere i seguenti ruoli:
- Visualizzatore dati BigQuery (
roles/bigquery.dataViewer) - Utente BigQuery (
roles/bigquery.user)
A seconda delle tue autorizzazioni, puoi concedere questi ruoli a te stesso 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 richieste per eseguire query sulle tabelle BigLake di Cloud Storage, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
bigquery.jobs.createbigquery.readsessions.create(richiesta solo se stai leggendo i dati con l' API BigQuery Storage Read)bigquery.tables.getbigquery.tables.getData
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti
Eseguire query sulle tabelle BigLake
Dopo aver creato una tabella BigLake di Cloud Storage, puoi
eseguirne query utilizzando la sintassi GoogleSQL,
come se fosse una tabella BigQuery standard. Ad esempio, SELECT field1, field2 FROM mydataset.my_cloud_storage_table;.
Eseguire query sulle tabelle BigLake utilizzando strumenti di elaborazione dei dati esterni
Puoi utilizzare i connettori BigQuery con altri strumenti di elaborazione dei dati per accedere alle tabelle BigLake in Cloud Storage. Per saperne di più, consulta Connettori.Apache Spark
Il seguente esempio utilizza Managed Service for Apache Spark, ma funziona anche con qualsiasi deployment 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 utente dell'analista dei dati.
Le versioni del connettore Spark-BigQuery sono elencate nel repository GitHub GoogleCloudDataproc/spark-bigquery-connector.
Crea un cluster a nodo singolo 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
Il seguente esempio utilizza Managed Service for Apache Spark, ma funziona anche con qualsiasi deployment di Hive che utilizza il connettore Hive-BigQuery.
In questo esempio, fornisci il connettore Hive-BigQuery come azione di inizializzazione quando crei un cluster.
Le versioni del connettore Hive-BigQuery sono elencate nel repository GitHub GoogleCloudDataproc/hive-bigquery-connector.
Crea un cluster a nodo singolo 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 saperne di più sul connettore Hive-BigQuery, consulta Utilizzare il connettore Hive-BigQuery.
Dataflow
Per leggere le tabelle BigLake da Dataflow, utilizza il connettore Dataflow
in DIRECT_READ modalità per utilizzare l'API BigQuery Storage. È supportata anche la lettura da una stringa di query. Consulta BigQuery I/O
nella documentazione di Apache Beam.
Eseguire query sulle tabelle BigLake temporanee
L'esecuzione di query su un'origine dati esterna utilizzando una tabella temporanea è utile per le query ad hoc una tantum sui dati esterni o per i processi di estrazione, trasformazione e caricamento (ETL) processi.
Per eseguire query su un'origine dati esterna senza creare una tabella permanente, fornisci una definizione della tabella temporanea e poi la utilizzi 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 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.
Puoi creare ed 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 il
bq query comando
con il
--external_table_definition flag.
(Facoltativo) Fornisci il flag --location e imposta il valore sulla tua
località.
Per eseguire query su una tabella temporanea collegata all'origine dati esterna utilizzando un file di definizione della tabella, 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 il file.bigqueryrc.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 stai inviando alla tabella temporanea.
Ad esempio, il seguente comando crea ed esegue query su una tabella temporanea
denominata sales utilizzando 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 dello 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 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 il file.bigqueryrc.TABLE: il nome della tabella temporanea che stai creando.SCHEMA: la definizione dello schema in linea 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 che contiene i dati per la 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 saperne di più, consulta Supporto dei caratteri jolly per gli URI di Cloud Storage.Puoi specificare più bucket per l'opzione
urisfornendo più percorsi.I seguenti esempi mostrano valori
urisvalidi:gs://bucket/path1/myfile.csvgs://bucket/path1/*.parquetgs://bucket/path1/file1*,gs://bucket1/path1/*
Quando specifichi valori
urische fanno riferimento a più file, tutti questi file devono condividere uno schema compatibile.Per saperne di più sull'utilizzo degli URI di Cloud Storage in BigQuery, consulta Percorso delle risorse di Cloud Storage.
PROJECT_ID: il progetto che contiene la 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 seguente comando crea ed esegue query su una tabella temporanea
denominata sales collegata a un file CSV archiviato in Cloud Storage con la
seguente definizione dello 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 query su una tabella temporanea collegata all'origine dati esterna utilizzando un file di 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 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 il file.bigqueryrc.SCHEMA_FILE: il percorso del file di schema JSON sul computer locale.SOURCE_FORMAT: il formato dell'origine dati esterna, ad esempioCSV.BUCKET_PATH: il percorso del bucket Cloud Storage che contiene i dati per la 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 saperne di più, consulta Supporto dei caratteri jolly per gli URI di Cloud Storage.Puoi specificare più bucket per l'opzione
urisfornendo più percorsi.I seguenti esempi mostrano valori
urisvalidi:gs://bucket/path1/myfile.csvgs://bucket/path1/*.parquetgs://bucket/path1/file1*,gs://bucket1/path1/*
Quando specifichi valori
urische fanno riferimento a più file, tutti questi file devono condividere uno schema compatibile.Per saperne di più sull'utilizzo degli URI di Cloud Storage in BigQuery, consulta Percorso delle risorse di Cloud Storage.
PROJECT_ID: il progetto che contiene la 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 seguente comando crea ed esegue query su una tabella temporanea
denominata sales collegata a un file CSV archiviato in Cloud Storage utilizzando il
/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
configurationdell'oggettoJobcon unJobConfigurationoggetto. - Compila la sezione
querydell'oggettoJobConfigurationcon unJobConfigurationQueryoggetto. - Compila la sezione
tableDefinitionsdell'oggettoJobConfigurationQuerycon un oggettoExternalDataConfiguration. Specifica la connessione da utilizzare per la connessione a Cloud Storage nel campoconnectionId. - Chiama il metodo
jobs.insertper eseguire la query in modo asincrono o il metodojobs.queryper 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.