Esegui query sui dati di Cloud Storage nelle tabelle esterne
Questo documento descrive come eseguire query sui dati archiviati in una tabella esterna Cloud Storage.
Prima di iniziare
Assicurati di avere una tabella esterna Cloud Storage.
Ruoli obbligatori
Per eseguire query sulle tabelle esterne di Cloud Storage, assicurati di disporre dei 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 assegnare questi ruoli a te stesso o chiedere all'amministratore di assegnarteli. 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 leggi i dati con l'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 esterne permanenti
Dopo aver creato una tabella esterna 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;
.
Esegui query sulle tabelle esterne temporanee
L'esecuzione di query su un'origine dati esterna utilizzando una tabella temporanea è utile per query una tantum e ad hoc su dati esterni o per processi ETL (estrazione, trasformazione e caricamento).
Per eseguire query su un'origine dati esterna senza creare una tabella permanente, fornisci una definizione della tabella 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 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 su questa tabella.
Quando utilizzi una tabella esterna temporanea, non crei una tabella in uno dei tuoi set di dati BigQuery. Poiché la tabella non viene archiviata 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
Esegui una query su una tabella temporanea collegata a un'origine dati esterna utilizzando il comando
bq query
con il
flag --external_table_definition
.
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 (salvato sul tuo computer locale)
- Una definizione di schema in linea
- Un file dello schema JSON (salvato nella tua macchina locale)
(Facoltativo) Fornisci il flag --location
e imposta il valore sulla tua
posizione.
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 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.DEFINITION_FILE
: il percorso del file di definizione della tabella sulla tua macchina locale.QUERY
: la query che stai inviando alla tabella temporanea.
Ad esempio, il comando seguente crea e 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 di 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 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 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 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 ulteriori informazioni, consulta Supporto dei caratteri jolly per gli URI di 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.
QUERY
: la query che stai inviando alla tabella temporanea.
Ad esempio, il seguente comando crea e esegue query su una tabella temporanea
denominata sales
collegata a un file CSV memorizzato 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 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 \ '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.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 ulteriori informazioni, consulta Supporto dei caratteri jolly per gli URI di 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.
QUERY
: la query che stai inviando alla tabella temporanea.
Ad esempio, il comando seguente crea e esegue query su una tabella temporanea
chiamata sales
collegata a un file CSV archiviato in Cloud Storage utilizzando il
file dello schema /tmp/sales_schema.json
.
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
configuration
dell'oggettoJob
con un oggettoJobConfiguration
. - Compila la sezione
query
dell'oggettoJobConfiguration
con un oggettoJobConfigurationQuery
. - Compila la sezione
tableDefinitions
dell'oggettoJobConfigurationQuery
con un oggettoExternalDataConfiguration
. - 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
.
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 la documentazione di riferimento dell'API BigQuery Java.
Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione Node.js riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Node.js.
Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Python.
Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Esegui una query sulla pseudocolonna _FILE_NAME
Le tabelle basate su origini dati esterne forniscono una pseudocolonna 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 Azure Blob Storage.
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 pseudocolonna.
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 in Google Cloud CLI) -
DATASET
è il nome del set di dati che memorizza la tabella esterna permanente -
TABLE_NAME
è il nome della tabella esterna permanente
Quando la query ha un predicato di filtro sulla pseudocolonna _FILE_NAME
,
BigQuery tenta di saltare la lettura dei file che non soddisfano il filtro. Consigli simili per eseguire
una query sulle tabelle partizionate per data di importazione utilizzando le pseudocolonne
si applicano anche alla costruzione dei predicati di query con la pseudocolonna _FILE_NAME
.
Passaggi successivi
- Scopri di più sull'utilizzo di SQL in BigQuery.
- Scopri di più sulle tabelle esterne.
- Scopri di più sulle quote di BigQuery.