Como conectar o Databricks ao BigQuery


Neste tutorial, mostramos como conectar uma tabela ou visualização do BigQuery para ler e gravar dados de um notebook do Databricks. As etapas são descritas usando o Console do Google Cloud e os espaços de trabalho do Databricks. Também é possível executar essas etapas usando as ferramentas de linha de comando gcloud e databricks, embora essa orientação esteja fora do escopo deste tutorial.

O Databricks no Google Cloud é um ambiente do Databricks hospedado no Google Cloud, executado no Google Kubernetes Engine (GKE) e que oferece integração interna com o BigQuery e outras tecnologias do Google Cloud. Se você é novo no Databricks, assista ao vídeo Introdução à Databricks Unified Data Platform para ter uma visão geral da plataforma de lakehouse do Databricks.

Objetivos

  • Configurar o Google Cloud para se conectar ao Databricks.
  • Implantar o Databricks no Google Cloud.
  • Consultar o BigQuery no Databricks.

Custos

Neste tutorial, usamos componentes faturáveis do Console do Google Cloud, incluindo o BigQuery e o GKE. São aplicados os preços do BigQuery e os preços do GKE. Para informações sobre os custos associados a uma conta do Databricks em execução no Google Cloud, consulte a seção Configurar sua conta e criar um espaço de trabalho na documentação do Databricks.

Antes de começar

Antes de conectar o Databricks ao BigQuery, conclua as etapas a seguir:

  1. Ative a API BigQuery Storage.
  2. Crie uma conta de serviço para o Databricks.
  3. Crie um bucket do Cloud Storage para armazenamento temporário.

Ative a API BigQuery Storage

A API BigQuery Storage é ativada por padrão para todos os novos projetos em que o BigQuery for usado. Para projetos existentes que não têm a API ativada, siga estas instruções:

  1. No console do Google Cloud, acesse a página da API BigQuery Storage.

    Acesse a API BigQuery Storage

  2. Confirme se a API BigQuery Storage está ativada.

    API BigQuery Storage ativada

Crie uma conta de serviço para o Databricks

Em seguida, crie uma conta de serviço do Identity and Access Management (IAM) para permitir que um cluster do Databricks execute consultas no BigQuery. Recomendamos que você conceda a essa conta de serviço o privilégio mínimo necessário para executar as tarefas. Consulte Papéis e permissões do BigQuery.

  1. No Console do Google Cloud, acesse a página Contas de serviço.

    Acessar a página "Contas de serviço"

  2. Clique em Criar conta de serviço, nomeie a conta de serviço como databricks-bigquery, insira uma breve descrição, como Databricks tutorial service account, e clique em Criar e continuare.

  3. Em Conceder acesso a essa conta de serviço a um projeto, especifique os papéis dela. Para conceder à conta de serviço permissão para ler dados com o espaço de trabalho do Databricks e a tabela do BigQuery no mesmo projeto, especificamente sem fazer referência a uma visualização materializada, conceda os seguintes papéis:

    • Usuário de sessão de leitura do BigQuery
    • Visualizador de dados do BigQuery

    Para conceder permissão para gravar dados, conceda os seguintes papéis:

    • Usuário de jobs do BigQuery
    • Editor de dados do BigQuery
  4. Registre o endereço de e-mail da nova conta de serviço para referência nas etapas futuras.

  5. Clique em Concluído.

crie um bucket do Cloud Storage

Para gravar no BigQuery, o cluster do Databricks precisa acessar um bucket do Cloud Storage para armazenar os dados gravados em buffer.

  1. No console do Google Cloud, acesse o Navegador do Cloud Storage.

    Acessar navegador do Storage

  2. Clique em Criar bucket para abrir a caixa de diálogo Criar um bucket.

  3. Especifique um nome para o bucket usado para gravar dados no BigQuery. O nome do bucket precisa ser um nome exclusivo globalmente. Se você especificar um nome de bucket que já existe, o Cloud Storage responderá com uma mensagem de erro. Se isso ocorrer, especifique um nome diferente para o bucket.

    Dê o nome databricks-bq-123 à caixa de diálogo do seu bucket

  4. Para este tutorial, use as configurações padrão do local de armazenamento, classe de armazenamento, controle de acesso e configurações avançadas.

  5. Clique em Criar para criar um bucket do Cloud Storage.

  6. Clique em Permissão, Adicionar e, em seguida, especifique o endereço de e-mail da conta de serviço que você criou para acesso ao Databricks na página de contas de serviço.

    imagem

  7. Clique em Selecionar um papel e adicione o papel Administrador do Storage.

  8. Clique em Save.

Implante o Databricks no Google Cloud

Conclua as etapas a seguir para se preparar para implantar o Databricks no Google Cloud.

  1. Para configurar sua conta do Databricks, siga as instruções na documentação do Databricks, Configurar sua conta do Databricks no Google Cloud.
  2. Depois de se inscrever, saiba mais sobre como Gerenciar sua conta da Databricks.

Crie um espaço de trabalho, um cluster e um notebook do Databricks

Nas etapas a seguir, descrevemos como criar um espaço de trabalho do Databricks, um cluster e um notebook do Python para gravar códigos para acessar o BigQuery.

  1. Confirme os pré-requisitos do Databrick.

  2. Crie seu primeiro espaço de trabalho. No console da conta do Databricks, clique em Criar espaço de trabalho.

  3. Especifique gcp-bq como Nome do espaço de trabalho e selecione sua Região.

    Tela "Criar espaço de trabalho" com o nome, a região e o ID do projeto do
Google Cloud

  4. Para determinar o ID do projeto do Google Cloud, acesse o console do Google Cloud e copie o valor para o campo ID do projeto do Google Cloud.

    Acessar o Console do Google Cloud

  5. Clique em Salvar para criar seu espaço de trabalho do Databricks.

  6. Para criar um cluster do Databricks com o ambiente de execução do Databricks 7.6 ou posterior, na barra de menu à esquerda, selecione Clusters e depois clique em Criar cluster na parte superior.

  7. Especifique o nome e o tamanho do cluster, clique em Opções avançadas e especifique os endereços de e-mail da sua conta de serviço do Google Cloud.

    Superfície "Novo cluster" com detalhes da conta de serviço do Google

  8. Clique em Criar cluster.

  9. Para criar um notebook Python para o Databricks, siga as instruções em Criar um notebook.

Como consultar o BigQuery no Databricks

Com a configuração acima, você pode conectar o Databricks com segurança ao BigQuery. O Databricks usa uma bifurcação do adaptador Google Spark de código aberto para acessar o BigQuery.

O Databricks reduz a transferência de dados e acelera as consultas com o push-down automático de determinados predicados de consulta, como a filtragem de colunas aninhadas no BigQuery. Além disso, o recurso adicionado para executar primeiro uma consulta SQL no BigQuery com a API query() reduz o tamanho da transferência do conjunto de dados resultante.

Nas etapas a seguir, descrevemos como acessar um conjunto de dados no BigQuery e gravar seus próprios dados no BigQuery.

Acessar um conjunto de dados público no BigQuery

O BigQuery fornece uma lista de conjuntos de dados públicos disponíveis. Para consultar o conjunto de dados de Shakespeare do BigQuery, que faz parte dos conjuntos de dados públicos, siga estas etapas:

  1. Para ler a tabela do BigQuery, use o snippet de código a seguir no notebook do Databricks.

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

    Execute o código pressionando Shift+Return.

    Agora é possível consultar a tabela do BigQuery com o Spark DataFrame (df). Por exemplo, use o código abaixo para mostrar as três primeiras linhas do dataframe:

    df.show(3)
    

    Para consultar outra tabela, atualize a variável table.

  2. Um recurso importante dos notebooks do Databricks é que você pode misturar as células de diferentes linguagens, como Scala, Python e SQL, em um único notebook.

    A consulta SQL a seguir permite visualizar a contagem de palavras em Shakespeare depois de executar a célula anterior que cria a visualização temporária.

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

    Gráfico de barras da contagem de palavras de shakespeare

    A célula acima executa uma consulta SQL do Spark no DataFrame no cluster do Databricks, não no BigQuery. A vantagem dessa abordagem é que a análise de dados ocorre no nível do Spark, nenhuma outra chamada de API do BigQuery é emitida, e você não tem custos adicionais com o BigQuery.

  3. Como alternativa, é possível delegar a execução de uma consulta SQL ao BigQuery com a API query() e otimizar para reduzir o tamanho da transferência do frame de dados resultante. Diferentemente do exemplo acima, em que o processamento foi feito no Spark, se você usar essa abordagem, as otimizações de preço e de consulta serão aplicadas para executar a consulta no BigQuery.

    O exemplo abaixo usa Scala, a API query() e o conjunto de dados público de Shakespeare no BigQuery para calcular as cinco palavras mais comuns nas obras de Shakespeare. Antes de executar o código, primeiro é necessário criar um conjunto de dados vazio no BigQuery chamado mdataset, que pode ser referenciado pelo código. Para mais informações, consulte Como gravar dados no 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)
    

    Para mais exemplos de código, consulte o Notebook de exemplo do Databricks no BigQuery.

Como gravar dados no BigQuery

As tabelas do BigQuery estão em conjuntos de dados. Antes de gravar dados em uma tabela do BigQuery, crie um novo conjunto de dados no BigQuery. Para criar um conjunto de dados para um notebook Python do Databricks, siga estas etapas:

  1. Acesse a página do BigQuery no Console do Google Cloud.

    Ir para o BigQuery

  2. Expanda a opção Ações, clique em Criar conjunto de dados e, em seguida, nomeie-o como together.

  3. No notebook Python do Databricks, crie um DataFrame simples do Spark a partir de uma lista do Python com três entradas de string usando o snippet de código a seguir:

    from pyspark.sql.types import StringType
    mylist = ["Google", "Databricks", "better together"]
    
    df = spark.createDataFrame(mylist, StringType())
    
  4. Adicione outra célula ao notebook que grava o DataFrame do Spark da etapa anterior na tabela myTable do BigQuery no conjunto de dados together. A tabela será criada ou substituída. Use o nome do bucket especificado anteriormente.

    bucket = YOUR_BUCKET_NAME
    table = "together.myTable"
    
    df.write
      .format("bigquery")
      .option("temporaryGcsBucket", bucket)
      .option("table", table)
      .mode("overwrite").save()
    
  5. Para verificar se você gravou os dados com sucesso, consulte e exiba sua tabela do BigQuery com o DataFrame do Spark (df):

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

Limpeza

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Antes de remover o Databricks, sempre faça backup dos seus dados e notebooks. Para limpar e remover completamente o Databricks, cancele sua assinatura do Databricks no console do Google Cloud e remova todos os recursos relacionados criados no console do Google Cloud.

Se você excluir um espaço de trabalho do Databricks, os dois buckets do Cloud Storage com os nomes databricks-WORKSPACE_ID e databricks-WORKSPACE_ID-system que foram criados pelo Databricks podem não serão excluídos se os buckets do Cloud Storage não estiverem vazios. Após a exclusão do espaço de trabalho, exclua esses objetos manualmente no console do Google Cloud do seu projeto.

A seguir

Nesta seção, você encontra uma lista com mais documentos e tutoriais: