Eseguire query sui dati di Cloud Storage nelle tabelle esterne
Questo documento descrive come eseguire query sui dati archiviati in una tabella esterna di Cloud Storage.
Prima di iniziare
Assicurati di avere una tabella esterna di Cloud Storage.
Ruoli obbligatori
Per eseguire query sulle tabelle esterne di Cloud Storage, assicurati di avere i seguenti ruoli:
- Visualizzatore dati BigQuery (
roles/bigquery.dataViewer) - Utente BigQuery (
roles/bigquery.user) - Storage Object Viewer (
roles/storage.objectViewer)
A seconda delle tue autorizzazioni, puoi concedere questi ruoli a te stesso o chiedere all'amministratore di concederteli. Per saperne di più 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.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 esterne permanenti
Dopo aver creato una tabella esterna di Cloud Storage, puoi eseguirvi 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 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 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 per la tabella temporanea, quindi utilizza questa definizione della tabella 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
Esegui query su una tabella temporanea collegata a un'origine dati esterna utilizzando il
bq query comando
con il
--external_table_definition flag.
Quando utilizzi lo strumento a riga di comando bq per eseguire query su una tabella temporanea collegata a un'origine dati esterna, puoi identificare lo schema della tabella utilizzando:
- Un file di definizione della tabella (memorizzato sulla macchina locale)
- Una definizione dello schema in linea
- Un file di schema JSON (memorizzato sulla macchina locale)
(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 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 sales utilizzando un file di definizione della tabella denominato sales_def.
bq query \
--external_table_definition=sales::sales_def \
'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 \ '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 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 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.
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 \
'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 \ '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 sulla macchina locale.SOURCE_FORMAT: il formato dell'origine dati esterna, ad esempioCSV.BUCKET_PATH: il percorso del bucket Cloud Storage che contiene 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 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.
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 \ '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. - Chiama il metodo
jobs.insertper eseguire la query in modo asincrono o il metodojobs.queryper eseguire la query in modo sincrono, passando l'oggettoJob.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell' API Java di BigQuery.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery.Node.js
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'APIPython di BigQuery.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Eseguire query sulla pseudo-colonna _FILE_NAME
Le tabelle basate su origini dati esterne forniscono una pseudo-colonna denominata _FILE_NAME. Questa
colonna contiene il percorso completo del file a cui appartiene la riga. Questa colonna è
disponibile solo per le tabelle che fanno riferimento a dati esterni archiviati in
Cloud Storage, Google Drive,
Amazon S3 e Archiviazione BLOB di Azure.
Il nome della colonna _FILE_NAME è riservato, il che significa che non puoi creare una colonna
con questo nome in nessuna delle tue tabelle. Per selezionare il valore di _FILE_NAME, devi utilizzare
un alias. La seguente query di esempio mostra la selezione di _FILE_NAME assegnando
l'alias fn alla pseudo-colonna.
bq query \
--project_id=PROJECT_ID \
--use_legacy_sql=false \
'SELECT
name,
_FILE_NAME AS fn
FROM
`DATASET.TABLE_NAME`
WHERE
name contains "Alex"' Sostituisci quanto segue:
-
PROJECT_IDè un ID progetto valido (questo flag non è obbligatorio se utilizzi Cloud Shell o se imposti un progetto predefinito nella Google Cloud CLI) -
DATASETè il nome del set di dati che memorizza la tabella esterna permanente tabella -
TABLE_NAMEè il nome della tabella esterna permanente
Quando la query ha un predicato di filtro sulla pseudo-colonna _FILE_NAME,
BigQuery tenta di saltare la lettura dei file che non soddisfano il filtro. Quando crei predicati di query con la _FILE_NAME pseudo-colonna, si applicano consigli simili a quelli per
l'esecuzione di query sulle tabelle partizionate per data di importazione utilizzando le pseudo-colonne
.
Ottimizzare le query sulle tabelle esterne
Valuta la possibilità di abilitare Rapid Cache quando esegui query sui dati di Cloud Storage con tabelle esterne. La cache rapida fornisce una cache di lettura zonale basata su SSD per i bucket Cloud Storage, che può potenzialmente migliorare le prestazioni delle query e ridurre i costi delle query quando esegui query sulle tabelle esterne. Per saperne di più, consulta Ottimizzare le query sulle tabelle esterne di Cloud Storage.
Passaggi successivi
- Scopri di più sull'utilizzo di SQL in BigQuery.
- Scopri di più sulle tabelle esterne.
- Scopri di più sulle quote di BigQuery.