Connessione di Databricks a BigQuery


Questo tutorial mostra come collegare una tabella o una vista BigQuery per leggere e scrivere dati da un notebook Databricks. I passaggi sono descritti utilizzando la console Google Cloud e Databricks Workspaces. Puoi anche eseguire questi passaggi utilizzando gli strumenti a riga di comando gcloud e databricks, anche se queste indicazioni non rientrano nell'ambito di questo tutorial.

Databricks su Google Cloud è un ambiente Databricks ospitato su Google Cloud, eseguito su Google Kubernetes Engine (GKE) e che offre un'integrazione integrata con BigQuery e altre tecnologie Google Cloud. Se non hai mai utilizzato Databricks, guarda il video Introduzione alla piattaforma di dati unificata Databricks per una panoramica della piattaforma lakehouse Databricks.

Obiettivi

  • Configura Google Cloud per connetterti a Databricks.
  • Esegui il deployment di Databricks su Google Cloud.
  • Esegui query su BigQuery da Databricks.

Costi

Questo tutorial utilizza i componenti fatturabili della console Google Cloud, tra cui BigQuery e GKE. Si applicano i prezzi di BigQuery e i prezzi di GKE. Per informazioni sui costi associati a un account Databricks in esecuzione su Google Cloud, consulta la sezione Configurare l'account e creare uno spazio di lavoro nella documentazione di Databricks.

Prima di iniziare

Prima di collegare Databricks a BigQuery, completa i seguenti passaggi:

  1. Abilita l'API BigQuery Storage.
  2. Crea un account di servizio per Databricks.
  3. Crea un bucket Cloud Storage per lo spazio di archiviazione temporaneo.

Abilita l'API BigQuery Storage

L'API BigQuery Storage è abilitata per impostazione predefinita per tutti i nuovi progetti in cui viene utilizzato BigQuery. Per i progetti esistenti in cui l'API non è abilitata, segui queste istruzioni:

  1. Nella console Google Cloud, vai alla pagina API BigQuery Storage.

    Vai all'API BigQuery Storage

  2. Verifica che l'API BigQuery Storage sia abilitata.

    L'API BigQuery Storage è abilitata

Creare un account di servizio per Databricks

Successivamente, crea un account di servizio Identity and Access Management (IAM) per consentire a un cluster Databricks di eseguire query su BigQuery. Ti consigliamo di assegnare a questo account di servizio i privilegi minimi necessari per svolgere le sue attività. Consulta Ruoli e autorizzazioni BigQuery.

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai a Service account

  2. Fai clic su Crea account di servizio, assegna un nome all'account di serviziodatabricks-bigquery, inserisci una breve descrizione, ad esempio Databricks tutorial service account, quindi fai clic su Crea e continua.

  3. In Concedi a questo account di servizio l'accesso al progetto, specifica i ruoli per l'account di servizio. Per concedere all'account di servizio l'autorizzazione per leggere i dati con lo spazio di lavoro Databricks e la tabella BigQuery nello stesso progetto, in particolare senza fare riferimento a una vista materializzata, concedi i seguenti ruoli:

    • BigQuery Read Session User
    • Visualizzatore dati BigQuery

    Per concedere l'autorizzazione a scrivere dati, assegna i seguenti ruoli:

    • Utente job BigQuery
    • BigQuery Data Editor
  4. Prendi nota dell'indirizzo email del nuovo account di servizio da utilizzare come riferimento per i passaggi futuri.

  5. Fai clic su Fine.

Crea un bucket Cloud Storage

Per scrivere in BigQuery, il cluster Databricks deve avere accesso a un bucket Cloud Storage per eseguire il buffering dei dati scritti.

  1. Nella console Google Cloud, vai a Browser Cloud Storage.

    Vai a Browser di archiviazione

  2. Fai clic su Crea bucket per aprire la finestra di dialogo Crea un bucket.

  3. Specifica un nome per il bucket utilizzato per scrivere i dati in BigQuery. Il nome del bucket deve essere un nome univoco a livello globale. Se specifichi un nome di bucket esistente, Cloud Storage risponde con un messaggio di errore. In questo caso, specifica un nome diverso per il bucket.

    Finestra di dialogo Assegna un nome al bucket con databricks-bq-123

  4. Per questo tutorial, utilizza le impostazioni predefinite per la posizione di archiviazione, la classe di archiviazione, controllo dell'accesso e le impostazioni avanzate.

  5. Fai clic su Crea per creare il bucket Cloud Storage.

  6. Fai clic su Autorizzazioni, poi su Aggiungi e specifica l'indirizzo email dell'account di servizio che hai creato per l'accesso a Databricks nella pagina Account di servizio.

    immagine

  7. Fai clic su Seleziona un ruolo e aggiungi il ruolo Amministratore dello spazio di archiviazione.

  8. Fai clic su Salva.

Esegui il deployment di Databricks su Google Cloud

Completa i seguenti passaggi per prepararti a eseguire il deployment di Databricks su Google Cloud.

  1. Per configurare il tuo account Databricks, segui le istruzioni riportate nella documentazione di Databricks, Configurare l'account Databricks su Google Cloud.
  2. Dopo la registrazione, scopri di più su come gestire il tuo account Databricks.

Crea uno spazio di lavoro, un cluster e un notebook Databricks

I passaggi che seguono descrivono come creare uno spazio di lavoro Databricks, un cluster e un blocco note Python per scrivere codice per accedere a BigQuery.

  1. Verifica i prerequisiti di Databrick.

  2. Crea il tuo primo spazio di lavoro. Nella console dell'account Databricks, fai clic su Crea spazio di lavoro.

  3. Specifica gcp-bq per il nome dello spazio di lavoro e seleziona la regione.

    Schermata Crea spazio di lavoro con nome, regione e ID progetto Google Cloud dello spazio di lavoro

  4. Per determinare l'ID del progetto Google Cloud, vai alla console Google Cloud e poi copia il valore nel campo ID progetto Google Cloud.

    Vai alla console Google Cloud

  5. Fai clic su Salva per creare lo spazio di lavoro Databricks.

  6. Per creare un cluster Databricks con il runtime Databricks 7.6 o versioni successive, seleziona Cluster nella barra dei menu a sinistra e poi fai clic su Crea cluster in alto.

  7. Specifica il nome e le dimensioni del cluster, poi fai clic su Opzioni avanzate e specifica l'indirizzo email del tuo account di servizio Google Cloud.

    Nuova piattaforma Cluster con i dettagli dell'account di servizio Google

  8. Fai clic su Crea cluster.

  9. Per creare un notebook Python per Databricks, segui le istruzioni riportate in Creare un notebook.

Eseguire query su BigQuery da Databricks

Con la configurazione riportata sopra, puoi collegare in modo sicuro Databricks a BigQuery. Databricks utilizza un fork dell'adattatore Google Spark open source per accedere a BigQuery.

Databricks riduce il trasferimento dei dati e accelera le query spingendo automaticamente determinati predicati delle query, ad esempio i filtri per le colonne nidificate, in BigQuery. Inoltre, la possibilità aggiunta di eseguire prima una query SQL su BigQuery con l'API query() riduce le dimensioni del trasferimento del set di dati risultante.

I passaggi che seguono descrivono come accedere a un set di dati in BigQuery e scrivere i tuoi dati in BigQuery.

Accedere a un set di dati pubblico su BigQuery

BigQuery fornisce un elenco di set di dati pubblici disponibili. Per eseguire query sul set di dati BigQuery Shakespeare che fa parte dei set di dati pubblici:

  1. Per leggere la tabella BigQuery, utilizza il seguente snippet di codice nel tuo notebook Databricks.

    table = "bigquery-public-data.samples.shakespeare"
    df = spark.read.format("bigquery").option("table",table).load()
    df.createOrReplaceTempView("shakespeare")
    

    Esegui il codice premendo Shift+Return.

    Ora puoi eseguire query sulla tabella BigQuery tramite il DataFrame Spark (df). Ad esempio, utilizza quanto segue per mostrare le prime tre righe del dataframe:

    df.show(3)
    

    Per eseguire una query su un'altra tabella, aggiorna la variabile table.

  2. Una funzionalità chiave dei notebook Databricks è che puoi combinare le celle di diversi linguaggi, come Scala, Python e SQL, in un unico notebook.

    La seguente query SQL consente di visualizzare il conteggio delle parole in Shakespeare dopo aver eseguito la cella precedente che crea la vista temporanea.

    %sql
    SELECT word, SUM(word_count) AS word_count FROM words GROUP BY word ORDER BY word_count DESC LIMIT 12
    
    

    Conteggio parole in grafico a barre di Shakespeare

    La cella sopra esegue una query Spark SQL sul dataframe nel cluster Databricks, non in BigQuery. Il vantaggio di questo approccio è che l'analisi dei dati avviene a livello di Spark, non vengono emesse altre chiamate all'API BigQuery e non sono previsti costi aggiuntivi per BigQuery.

  3. In alternativa, puoi delegare l'esecuzione di una query SQL a BigQuery con l'API query() e ottimizzare per ridurre le dimensioni del trasferimento del frame di dati risultante. A differenza dell'esempio riportato sopra, in cui l'elaborazione è stata eseguita in Spark, se utilizzi questo approccio, per l'esecuzione della query su BigQuery vengono applicate le ottimizzazioni dei prezzi e delle query.

    L'esempio seguente utilizza Scala, l'API query() e il set di dati pubblico di Shakespeare in BigQuery per calcolare le cinque parole più comuni nelle opere di Shakespeare. Prima di eseguire il codice, devi creare un set di dati vuoto in BigQuery chiamato mdataset a cui il codice può fare riferimento. Per ulteriori informazioni, consulta Scrivere dati in BigQuery.

    %scala
    // public dataset
    val table = "bigquery-public-data.samples.shakespeare"
    
    // existing dataset where the Google Cloud user has table creation permission
    val tempLocation = "mdataset"
    // query string
    val q = s"""SELECT word, SUM(word_count) AS word_count FROM ${table}
        GROUP BY word ORDER BY word_count DESC LIMIT 10 """
    
    // read the result of a GoogleSQL query into a DataFrame
    val df2 =
      spark.read.format("bigquery")
      .option("query", q)
      .option("materializationDataset", tempLocation)
      .load()
    
    // show the top 5 common words in Shakespeare
    df2.show(5)
    

    Per altri esempi di codice, consulta il notebook di esempio BigQuery di Databricks.

Scrittura di dati in BigQuery

Le tabelle BigQuery esistono nei set di dati. Prima di poter scrivere dati in una tabella BigQuery, devi creare un nuovo set di dati in BigQuery. Per creare un set di dati per un notebook Python di Databricks:

  1. Vai alla pagina BigQuery nella console Google Cloud.

    Vai a BigQuery

  2. Espandi l'opzione Azioni, fai clic su Crea set di dati e poi assegnagli un nome, together.

  3. Nel notebook Python di Databricks, crea un semplice dataframe Spark da un elenco Python con tre voci di stringa utilizzando il seguente snippet di codice:

    from pyspark.sql.types import StringType
    mylist = ["Google", "Databricks", "better together"]
    
    df = spark.createDataFrame(mylist, StringType())
    
  4. Aggiungi un'altra cella al notebook che scriva il dataframe Spark del passaggio precedente nella tabella BigQuery myTable nel set di dati together. La tabella viene creata o sovrascritta. Utilizza il nome del bucket specificato in precedenza.

    bucket = YOUR_BUCKET_NAME
    table = "together.myTable"
    
    df.write
      .format("bigquery")
      .option("temporaryGcsBucket", bucket)
      .option("table", table)
      .mode("overwrite").save()
    
  5. Per verificare di aver scritto correttamente i dati, esegui query e visualizza la tabella BigQuery tramite il DataFrame Spark (df):

    display(spark.read.format("bigquery").option("table", table).load)
    

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Prima di rimuovere Databricks, esegui sempre il backup dei dati e dei notebook. Per eseguire la pulizia e rimuovere completamente Databricks, annulla l'abbonamento a Databricks nella console Google Cloud e rimuovi le risorse correlate che hai creato dalla console Google Cloud.

Se elimini uno spazio di lavoro Databricks, i due bucket Cloud Storage con i nomi databricks-WORKSPACE_ID edatabricks-WORKSPACE_ID-system che sono staticreati da Databricks potrebbero non essere eliminati se i bucket Cloud Storage non sono vuoti. Dopo l'eliminazione dello spazio di lavoro, puoi eliminare manualmente questi oggetti nella console Google Cloud per il tuo progetto.

Passaggi successivi

Questa sezione fornisce un elenco di documenti e tutorial aggiuntivi: