Condividi tramite


Google BigQuery

Questo articolo descrive come leggere e scrivere nelle tabelle di Google BigQuery in Azure Databricks.

Importante

La documentazione di federazione delle query legacy è stata ritirata e potrebbe non essere più aggiornata. Le configurazioni indicate in questo contenuto non sono ufficialmente approvate o testate da Databricks. Se Lakehouse Federation supporta il database di origine, Databricks consiglia di usarlo.

È necessario connettersi a BigQuery usando l'autenticazione basata su chiave.

Autorizzazioni

I progetti devono disporre di autorizzazioni Google specifiche per la lettura e la scrittura tramite BigQuery.

Annotazioni

Questo articolo illustra le visualizzazioni materializzate di BigQuery. Per informazioni dettagliate, vedere l'articolo di Google Introduzione alle visualizzazioni materializzate. Per altre informazioni sulla terminologia di BigQuery e sul modello di sicurezza BigQuery, vedere la documentazione di Google BigQuery.

La lettura e la scrittura di dati con BigQuery dipendono da due progetti Google Cloud:

  • Progetto (project): ID del progetto Google Cloud da cui Azure Databricks legge o scrive la tabella BigQuery.
  • Progetto principale (parentProject): ID del progetto principale, ovvero l'ID progetto Google Cloud a cui vengono addebitate le letture e le scritture. Impostare questa opzione sul progetto Google Cloud associato all'account del servizio Google per cui verranno generate le chiavi.

È necessario specificare in modo esplicito i valori project e parentProject nel codice che accede a BigQuery. Usare un codice simile al seguente:

spark.read.format("bigquery") \
  .option("table", table) \
  .option("project", <project-id>) \
  .option("parentProject", <parent-project-id>) \
  .load()

Le autorizzazioni necessarie per i progetti Google Cloud dipendono dal fatto che project e parentProject siano uguali. Nelle sezioni seguenti sono elencate le autorizzazioni necessarie per ciascuno scenario.

Autorizzazioni necessarie se project e parentProject corrispondono

Se gli ID per project e parentProject sono uguali, usare la tabella seguente per determinare le autorizzazioni minime:

Attività di Azure Databricks Autorizzazioni Google necessarie nel progetto
Leggere una tabella BigQuery senza vista materializzata Nel progetto project:
  • Utente della sessione di lettura di BigQuery
  • Visualizzatore dati BigQuery (facoltativamente concedere questa opzione a livello di set di dati/tabella anziché a livello di progetto)
Leggere una tabella con vista materializzata di BigQuery Nel progetto project:
  • Utente del job di BigQuery
  • Utente della sessione di lettura di BigQuery
  • Visualizzatore dati BigQuery (facoltativamente concedere questa opzione a livello di set di dati/tabella anziché a livello di progetto)

Nel progetto di materializzazione:
  • BigQuery Data Editor
Scrivere una tabella BigQuery Nel progetto project:
  • Utente del job di BigQuery
  • BigQuery Data Editor

Autorizzazioni necessarie se project e parentProject sono diversi

Se gli ID per project e parentProject sono diversi, usare la tabella seguente per determinare le autorizzazioni minime:

Attività di Azure Databricks Autorizzazioni obbligatorie di Google
Leggere una tabella BigQuery senza vista materializzata Nel progetto parentProject:
  • Utente della sessione di lettura di BigQuery

Nel progetto project:
  • Visualizzatore dati BigQuery (facoltativamente concedere questa opzione a livello di set di dati/tabella anziché a livello di progetto)
Leggere una tabella con vista materializzata di BigQuery Nel progetto parentProject:
  • Utente della sessione di lettura di BigQuery
  • Utente del job di BigQuery

Nel progetto project:
  • Visualizzatore dati BigQuery (facoltativamente concedere questa opzione a livello di set di dati/tabella anziché a livello di progetto)

Nel progetto di materializzazione:
  • BigQuery Data Editor
Scrivere una tabella BigQuery Nel progetto parentProject:
  • Utente del job di BigQuery

Nel progetto project:
  • BigQuery Data Editor

Passaggio 1: configurare Google Cloud

Abilitare l'API di archiviazione BigQuery

L'API di archiviazione BigQuery è abilitata per impostazione predefinita nei nuovi progetti Google Cloud in cui è abilitato BigQuery. Tuttavia, se si dispone di un progetto esistente e l'API di archiviazione BigQuery non è abilitata, seguire la procedura descritta in questa sezione per abilitarla.

È possibile abilitare l'API di archiviazione BigQuery usando la CLI di Google Cloud o Google Cloud Console.

Abilitare l'API di archiviazione BigQuery usando la CLI di Google Cloud

gcloud services enable bigquerystorage.googleapis.com

Abilitare l'API di archiviazione BigQuery con Google Cloud Console

  1. Nel riquadro di spostamento a sinistra fare clic su API e servizi.

  2. Fare clic sul pulsante ABILITA API E SERVIZI.

    Abilitazione dei servizi di Google

  3. Digitare bigquery storage api nella barra di ricerca e selezionare il primo risultato.

    Archiviazione Google BigQuery

  4. Assicurarsi che l'API di archiviazione BigQuery sia abilitata.

    Google BigQuery

Creare un account del servizio Google per Azure Databricks

Creare un account del servizio per il cluster Azure Databricks. Databricks consiglia di assegnare a questo servizio i privilegi minimi necessari per eseguire i task. Consultare Ruoli e autorizzazioni BigQuery.

È possibile creare un account del servizio usando la CLI di Google Cloud o Google Cloud Console.

Creare un account del servizio Google usando la CLI di Google Cloud

gcloud iam service-accounts create <service-account-name>

gcloud projects add-iam-policy-binding <project-name> \
--role roles/bigquery.user \
--member="serviceAccount:<service-account-name>@<project-name>.iam.gserviceaccount.com"

gcloud projects add-iam-policy-binding <project-name> \
--role roles/bigquery.dataEditor \
--member="serviceAccount:<service-account-name>@<project-name>.iam.gserviceaccount.com"

Creare le chiavi per l'account di servizio:

gcloud iam service-accounts keys create --iam-account \
"<service-account-name>@<project-name>.iam.gserviceaccount.com" \
<project-name>-xxxxxxxxxxx.json

Creare un account del servizio Google con Google Cloud Console

Per creare l'account:

  1. Nel pannello di navigazione a sinistra, fare clic su IAM e Admin.

  2. Fare clic su Account di servizio.

  3. Fare clic su + CREA ACCOUNT DI SERVIZIO.

  4. Immettere un nome e una descrizione per l’account del servizio.

    Google crea l’account del servizio

  5. Fare clic su Crea.

  6. Specifica i ruoli per l'account di servizio. Nell'elenco a discesa Selezionare un ruolo digitare BigQuery e aggiungere i ruoli seguenti:

    Autorizzazioni Google

  7. Fare clic su CONTINUA.

  8. Fare clic su FATTO.

Per creare chiavi per l'account del servizio:

  1. Nell'elenco degli account del servizio fare clic sull'account appena creato.

  2. Nella sezione Chiavi selezionare AGGIUNGI CHIAVE > e Crea nuova chiave.

    Creazione della chiave con Google

  3. Accettare il tipo di chiave JSON.

  4. Fare clic su Crea. Il file della chiave JSON viene scaricato sul computer.

    Importante

    Il file di chiave JSON generato per l'account del servizio è una chiave privata che deve essere condivisa solo con utenti autorizzati, perché controlla l'accesso ai set di dati e alle risorse nell'account Google Cloud.

Creare un bucket GCS (Google Cloud Storage) per l'archiviazione temporanea

Per scrivere dati in BigQuery, l'origine dati deve accedere a un bucket GCS.

  1. Nel pannello di navigazione a sinistra, fare clic su Archiviazione.

  2. Fare clic su CREA BUCKET.

    Creazione di bucket con Google

  3. Configurare i dettagli del bucket.

    Dettagli Google bucket

  4. Fare clic su Crea.

  5. Fare clic sulla scheda Autorizzazioni e Aggiungi membri.

  6. Fornire le seguenti autorizzazioni all'account di servizio sul bucket.

    Autorizzazioni per il bucket in Google

  7. Fare clic su Salva.

Passaggio 2: configurare Azure Databricks

Per configurare un cluster per accedere alle tabelle BigQuery, è necessario specificare il file di chiave JSON come configurazione Spark. Utilizzare uno strumento locale per codificare in Base64 il file chiave JSON. Per motivi di sicurezza non usare uno strumento basato sul Web o remoto che può accedere alle chiavi.

Quando si configura il cluster:

Nella scheda Configurazione Spark, aggiungere la configurazione spark seguente. Sostituire <base64-keys> con la stringa del file di chiave JSON con codifica Base64. Sostituire gli altri elementi tra parentesi quadre (ad esempio <client-email>) con i valori di tali campi dal file di chiave JSON.

credentials <base64-keys>

spark.hadoop.google.cloud.auth.service.account.enable true
spark.hadoop.fs.gs.auth.service.account.email <client-email>
spark.hadoop.fs.gs.project.id <project-id>
spark.hadoop.fs.gs.auth.service.account.private.key <private-key>
spark.hadoop.fs.gs.auth.service.account.private.key.id <private-key-id>

Leggere e scrivere in una tabella BigQuery

Per leggere una tabella BigQuery, specificare

df = spark.read.format("bigquery") \
  .option("table",<table-name>) \
  .option("project", <project-id>)  \
  .option("parentProject", <parent-project-id>) \
  .load()

Per scrivere in una tabella BigQuery, specificare

df.write.format("bigquery") \
  .mode("<mode>") \
  .option("temporaryGcsBucket", "<bucket-name>") \
  .option("table", <table-name>) \
  .option("project", <project-id>) \
  .option("parentProject", <parent-project-id>) \
  .save()

dove <bucket-name> è il nome del bucket creato in Creare un bucket GCS (Google Cloud Storage) per l'archiviazione temporanea. Vedere Permessi per informazioni sui requisiti relativi ai valori <project-id> e <parent-id>.

Creare una tabella esterna da BigQuery

Importante

Questa funzionalità non è supportata da Unity Catalog.

È possibile dichiarare una tabella non gestita in Databricks che leggerà i dati direttamente da BigQuery:

CREATE TABLE chosen_dataset.test_table
USING bigquery
OPTIONS (
  parentProject 'gcp-parent-project-id',
  project 'gcp-project-id',
  temporaryGcsBucket 'some-gcp-bucket',
  materializationDataset 'some-bigquery-dataset',
  table 'some-bigquery-dataset.table-to-copy'
)

Esempio di notebook Python: Caricare una tabella di Google BigQuery in un DataFrame

Il Notebook Python seguente carica una tabella Google BigQuery in un DataFrame di Azure Databricks.

Notebook di esempio di Google BigQuery Python

Ottieni il notebook

Esempio di notebook Scala: Caricare una tabella di Google BigQuery in un DataFrame

Il notebook Scala seguente carica una tabella di Google BigQuery in un DataFrame di Azure Databricks.

Notebook di esempio di Google BigQuery Scala

Ottieni il notebook