Partilhar via


Google BigQuery

Este artigo descreve como ler e gravar em tabelas do Google BigQuery no Azure Databricks.

Importante

As configurações descritas neste artigo são experimentais. Os recursos experimentais são fornecidos no estado em que se encontram e não são suportados pelo Databricks por meio do suporte técnico ao cliente. Para obter suporte completo à federação de consultas, você deve usar a Lakehouse Federation, que permite que os usuários do Azure Databricks aproveitem a sintaxe do Catálogo Unity e as ferramentas de governança de dados.

Você deve se conectar ao BigQuery usando a autenticação baseada em chave.

Permissões

Seus projetos devem ter permissões específicas do Google para ler e gravar usando o BigQuery.

Nota

Este artigo discute as exibições materializadas do BigQuery. Para obter detalhes, consulte o artigo do Google Introdução às visualizações materializadas. Para saber mais sobre a terminologia do BigQuery e o modelo de segurança do BigQuery, consulte a documentação do Google BigQuery.

A leitura e gravação de dados com o BigQuery depende de dois projetos do Google Cloud:

  • Projeto (project): A ID do projeto do Google Cloud a partir do qual o Azure Databricks lê ou grava a tabela do BigQuery.
  • Projeto pai (parentProject): o ID do projeto pai, que é o ID do projeto do Google Cloud para cobrar pela leitura e gravação. Defina isso para o projeto do Google Cloud associado à conta de serviço do Google para a qual você gerará chaves.

Você deve fornecer explicitamente os project valores e parentProject no código que acessa o BigQuery. Use um código semelhante ao seguinte:

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

As permissões necessárias para os projetos do Google Cloud dependem se project e parentProject são as mesmas. As seções a seguir listam as permissões necessárias para cada cenário.

Permissões necessárias se project e parentProject corresponderem

Se os IDs para o seu project e parentProject forem os mesmos, use a tabela a seguir para determinar permissões mínimas:

Tarefa Azure Databricks Permissões do Google necessárias no projeto
Ler uma tabela do BigQuery sem vista materializada project No projeto:

- Usuário da sessão de leitura do BigQuery
- BigQuery Data Viewer (opcionalmente conceda isso no nível do conjunto de dados/tabela em vez do nível do projeto)
Ler uma tabela do BigQuery com vista materializada project No projeto:

- Usuário do BigQuery Job
- Usuário da sessão de leitura do BigQuery
- BigQuery Data Viewer (opcionalmente conceda isso no nível do conjunto de dados/tabela em vez do nível do projeto)

No projeto de materialização:

- Editor de dados do BigQuery
Escrever uma tabela do BigQuery project No projeto:

- Usuário do BigQuery Job
- Editor de dados do BigQuery

Permissões necessárias se project e parentProject forem diferentes

Se os IDs para o seu project e parentProject forem diferentes, use a tabela a seguir para determinar permissões mínimas:

Tarefa Azure Databricks Permissões do Google necessárias
Ler uma tabela do BigQuery sem vista materializada parentProject No projeto:

- Usuário da sessão de leitura do BigQuery

project No projeto:

- BigQuery Data Viewer (opcionalmente conceda isso no nível do conjunto de dados/tabela em vez do nível do projeto)
Ler uma tabela do BigQuery com vista materializada parentProject No projeto:

- Usuário da sessão de leitura do BigQuery
- Usuário do BigQuery Job

project No projeto:

- BigQuery Data Viewer (opcionalmente conceda isso no nível do conjunto de dados/tabela em vez do nível do projeto)

No projeto de materialização:

- Editor de dados do BigQuery
Escrever uma tabela do BigQuery parentProject No projeto:

- Usuário do BigQuery Job

project No projeto:

- Editor de dados do BigQuery

Etapa 1: configurar o Google Cloud

Habilite a API de armazenamento do BigQuery

A API de armazenamento do BigQuery é ativada por padrão em novos projetos do Google Cloud nos quais o BigQuery está habilitado. No entanto, se você tiver um projeto existente e a API de armazenamento do BigQuery não estiver habilitada, siga as etapas nesta seção para habilitá-lo.

Você pode ativar a API de armazenamento do BigQuery usando a CLI do Google Cloud ou o Google Cloud Console.

Ativar a API de armazenamento do BigQuery usando a CLI do Google Cloud

gcloud services enable bigquerystorage.googleapis.com

Ativar a API de armazenamento do BigQuery usando o Google Cloud Console

  1. Clique em APIs & Serviços no painel de navegação esquerdo.

  2. Clique no botão ATIVAR APIS E SERVIÇOS .

    Serviços de ativação do Google

  3. Digite bigquery storage api na barra de pesquisa e selecione o primeiro resultado.

    Armazenamento do Google BigQuery

  4. Verifique se a API de armazenamento do BigQuery está ativada.

    Google BigQuery

Criar uma conta de serviço do Google para o Azure Databricks

Crie uma conta de serviço para o cluster do Azure Databricks. O Databricks recomenda dar a essa conta de serviço o mínimo de privilégios necessários para executar suas tarefas. Consulte Funções e permissões do BigQuery.

Você pode criar uma conta de serviço usando a CLI do Google Cloud ou o Google Cloud Console.

Criar uma conta de serviço do Google usando a CLI do 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"

Crie as chaves para a sua conta de serviço:

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

Criar uma conta de serviço do Google usando o Google Cloud Console

Para criar a conta:

  1. Clique em IAM e Admin no painel de navegação esquerdo.

  2. Clique em Contas de Serviço.

  3. Clique em + CRIAR CONTA DE SERVIÇO.

  4. Insira o nome e a descrição da conta de serviço.

    Google criar conta de serviço

  5. Clique em CRIAR.

  6. Especifique funções para sua conta de serviço. Na lista suspensa Selecione uma função, digite BigQuery e adicione as seguintes funções:

    Permissões do Google

  7. Clique em CONTINUAR.

  8. Clique em CONCLUÍDO.

Para criar chaves para sua conta de serviço:

  1. Na lista de contas de serviço, clique na sua conta recém-criada.

  2. Na seção Chaves, selecione ADICIONAR CHAVE > Criar novo botão de chave .

    Chave de criação do Google

  3. Aceite o tipo de chave JSON.

  4. Clique em CRIAR. O arquivo de chave JSON é baixado para o seu computador.

    Importante

    O arquivo de chave JSON gerado para a conta de serviço é uma chave privada que deve ser compartilhada apenas com usuários autorizados, pois controla o acesso a conjuntos de dados e recursos em sua conta do Google Cloud.

Criar um bucket do Google Cloud Storage (GCS) para armazenamento temporário

Para gravar dados no BigQuery, a fonte de dados precisa acessar um bucket GCS.

  1. Clique em Armazenamento no painel de navegação esquerdo.

  2. Clique em CREATE BUCKET.

    Bucket de criação do Google

  3. Configure os detalhes do bucket.

    Detalhes do bucket do Google

  4. Clique em CRIAR.

  5. Clique na guia Permissões e Adicionar membros.

  6. Forneça as seguintes permissões para a conta de serviço no bucket.

    Permissões do Google Bucket

  7. Clique em GUARDAR.

Etapa 2: Configurar o Azure Databricks

Para configurar um cluster para acessar tabelas do BigQuery, você deve fornecer seu arquivo de chave JSON como uma configuração do Spark. Use uma ferramenta local para codificar seu arquivo de chave JSON Base64. Por motivos de segurança, não utilize uma ferramenta remota ou baseada na Web que possa aceder às suas chaves.

Quando você configura o cluster:

Na guia Configuração do Spark , adicione a seguinte configuração do Spark. Substitua <base64-keys> pela cadeia de caracteres do arquivo de chave JSON codificado em Base64. Substitua os outros itens entre colchetes (como <client-email>) pelos valores desses campos do arquivo de chave 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>

Ler e gravar em uma tabela do BigQuery

Para ler uma tabela do BigQuery, especifique

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

Para gravar em uma tabela do BigQuery, especifique

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

onde <bucket-name> é o nome do bucket criado em Criar um bucket do Google Cloud Storage (GCS) para armazenamento temporário. Consulte Permissões para saber mais sobre requisitos <project-id> e <parent-id> valores.

Criar uma tabela externa a partir do BigQuery

Importante

Esse recurso não é suportado pelo Unity Catalog.

Você pode declarar uma tabela não gerenciada no Databricks que lerá dados diretamente do 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'
)

Exemplo de bloco de anotações Python: carregar uma tabela do Google BigQuery em um DataFrame

O bloco de anotações Python a seguir carrega uma tabela do Google BigQuery em um DataFrame do Azure Databricks.

Bloco de anotações de exemplo do Google BigQuery Python

Obter o bloco de notas

Exemplo de bloco de anotações Scala: carregar uma tabela do Google BigQuery em um DataFrame

O bloco de anotações Scala a seguir carrega uma tabela do Google BigQuery em um DataFrame do Azure Databricks.

Bloco de notas de exemplo do Google BigQuery Scala

Obter o bloco de notas