Esegui 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 disporre dei 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 concederli. Per ulteriori informazioni sulla concessione dei ruoli, consulta Visualizzazione dei ruoli assegnabili sulle risorse.

Per visualizzare le autorizzazioni esatte necessarie per eseguire query sulle tabelle BigLake di Cloud Storage, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Potresti anche essere in grado di 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 una query utilizzando la sintassi di GoogleSQL, come se si trattasse di una tabella BigQuery standard. Ad esempio, SELECT field1, field2 FROM mydataset.my_cloud_storage_table;.

Esegui query sulle tabelle BigLake utilizzando strumenti di elaborazione dati esterni

Puoi usare i connettori BigQuery con altri strumenti di elaborazione dati per accedere alle tabelle BigLake su Cloud Storage. Per ulteriori informazioni, consulta la sezione Connettori.

Apache Spark

L'esempio seguente utilizza Dataproc, ma funziona anche con qualsiasi deployment 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 consente di utilizzare un blocco note Zeppelin ed eseguire il percorso utente di data analyst.

Le versioni del connettore Spark-BigQuery sono elencate nel repository 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

L'esempio seguente utilizza Dataproc, ma funziona anche con qualsiasi deployment Hive che utilizzi il connettore Hive-BigQuery.

In questo esempio, devi fornire il connettore Hive-BigQuery come azione di inizializzazione quando crei un cluster.

Le versioni del connettore Hive-BigQuery sono elencate nel repository 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 modalità DIRECT_READ per utilizzare l'API BigQuery Storage. È supportata anche la lettura da una stringa di query. Consulta BigQuery I/O nella documentazione di Apache Beam.

Esegui query su tabelle BigLake temporanee

Eseguire query su un'origine dati esterna utilizzando una tabella temporanea è utile per query una tantum ad hoc su dati esterni o per i processi ETL (estrazione, trasformazione e caricamento).

Per eseguire query su un'origine dati esterna senza creare una tabella permanente, fornisci una definizione per la tabella temporanea, quindi 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:

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 crei una tabella in uno dei 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 comando bq query con il flag --external_table_definition.

(Facoltativo) Fornisci il flag --location e imposta il valore sulla tua località.

Per eseguire una query su una tabella temporanea collegata all'origine dati esterna utilizzando un file di definizione della tabella, inserisci il comando seguente.

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 nell'area geografica di Tokyo, puoi impostare il valore del flag su asia-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 tua 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@us.myconnection \
'SELECT
  Region,
  Total_sales
FROM
  sales'

Per eseguire una query su una tabella temporanea collegata all'origine dati esterna utilizzando una definizione dello schema in linea, inserisci il comando seguente.

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 nell'area geografica di Tokyo, puoi impostare il valore del flag su asia-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 incorporato nel formato field:data_type,field:data_type.
  • SOURCE_FORMAT: il formato dell'origine dati esterna, ad esempio CSV.
  • BUCKET_PATH: il percorso del bucket Cloud Storage che contiene i dati per la tabella, nel formato gs://bucket_name/[folder_name/]file_pattern.

    Puoi selezionare più file dal bucket specificando un carattere jolly asterisco (*) in file_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.

    I seguenti esempi 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 delle risorse di Cloud Storage.

  • PROJECT_ID: il progetto che contiene la connessione.

  • REGION: la regione che contiene la connessione, ad esempio us.

  • CONNECTION_ID: il nome della connessione, ad esempio myconnection.

  • 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 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 di schema JSON, inserisci il comando seguente.

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 nell'area geografica di Tokyo, puoi impostare il valore del flag su asia-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 esempio CSV.
  • BUCKET_PATH: il percorso del bucket Cloud Storage che contiene i dati per la tabella, nel formato gs://bucket_name/[folder_name/]file_pattern.

    Puoi selezionare più file dal bucket specificando un carattere jolly asterisco (*) in file_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.

    I seguenti esempi 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 delle risorse di Cloud Storage.

  • PROJECT_ID: il progetto che contiene la connessione.

  • REGION: la regione che contiene la connessione, ad esempio us.

  • CONNECTION_ID: il nome della connessione, ad esempio myconnection.

  • 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 file di schema /tmp/sales_schema.json.

  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:

  1. Crea un oggetto Job.
  2. Completa la sezione configuration dell'oggetto Job con un oggetto JobConfiguration.
  3. Completa la sezione query dell'oggetto JobConfiguration con un oggetto JobConfigurationQuery.
  4. Completa la sezione tableDefinitions dell'oggetto JobConfigurationQuery con un oggetto ExternalDataConfiguration. Specifica la connessione da utilizzare per la connessione a Cloud Storage nel campo connectionId.
  5. Chiama il metodo jobs.insert per eseguire la query in modo asincrono o il metodo jobs.query per eseguire la query in modo sincrono, passando l'oggetto Job.

Passaggi successivi