Compartilhar via


BigQuery do Google

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

Importante

As configurações descritas nesse artigo são Experimentais. Recursos experimentais são fornecidos no estado em que se encontram e não têm suporte do Databricks por meio do suporte técnico para clientes. Para obter suporte completo à federação de consultas, você deve usar a Federação do Lakehouse, que permite que os usuários do Azure Databricks aproveitem a sintaxe do Catálogo do 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 leitura e gravação usando o BigQuery.

Observação

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

Ler e gravar 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 BigQuery.
  • Projeto pai (parentProject): a ID do projeto pai, que é a ID do Projeto do Google Cloud a ser cobrada pela leitura e gravação. Defina isso como o projeto do Google Cloud associado à conta de serviço do Google para a qual você gerará chaves.

Você deve fornecer explicitamente os valores project 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 de project e parentProject serem iguais. 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 as IDs do project e parentProject forem iguais, use a tabela a seguir para determinar as permissões mínimas:

Tarefas do Azure Databricks Permissões do Google necessárias no projeto
Ler uma tabela do BigQuery sem exibição materializada No projeto project:

- Usuário da Sessão de Leitura do BigQuery
- Visualizador de Dados do BigQuery (opcionalmente, conceda no nível do conjunto de dados/tabela, e não no nível do projeto)
Ler uma tabela do BigQuery com exibição materializada No projeto project:

- Usuário de Trabalho do BigQuery
- Usuário da Sessão de Leitura do BigQuery
- Visualizador de Dados do BigQuery (opcionalmente, conceda no nível do conjunto de dados/tabela, e não no nível do projeto)

No projeto de materialização:

- Editor de Dados do BigQuery
Gravar uma tabela do BigQuery No projeto project:

- Usuário de Trabalho do BigQuery
- Editor de Dados do BigQuery

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

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

Tarefas do Azure Databricks Permissões necessárias do Google
Ler uma tabela do BigQuery sem exibição materializada No projeto parentProject:

- Usuário da Sessão de Leitura do BigQuery

No projeto project:

- Visualizador de Dados do BigQuery (opcionalmente, conceda no nível do conjunto de dados/tabela, e não no nível do projeto)
Ler uma tabela do BigQuery com exibição materializada No projeto parentProject:

- Usuário da Sessão de Leitura do BigQuery
- Usuário de Trabalho do BigQuery

No projeto project:

- Visualizador de Dados do BigQuery (opcionalmente, conceda no nível do conjunto de dados/tabela, e não no nível do projeto)

No projeto de materialização:

- Editor de Dados do BigQuery
Gravar uma tabela do BigQuery No projeto parentProject:

- Usuário de Trabalho do BigQuery

No projeto project:

- Editor de Dados do BigQuery

Etapa 1: configurar o Google Cloud

Habilitar a API de Armazenamento do BigQuery

A API de Armazenamento do BigQuery está habilitada 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á-la.

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

Habilitar a API de Armazenamento do BigQuery usando a CLI do Google Cloud

gcloud services enable bigquerystorage.googleapis.com

Habilitar a API de Armazenamento do BigQuery usando o Console do Google Cloud

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

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

    Habilitar Serviços do Google

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

    Armazenamento do BigQuery do Google

  4. Verifique se a API de Armazenamento do BigQuery está habilitada.

    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 fornecer a essa conta de serviço os privilégios mínimos necessários para execução das 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 Console do Google Cloud.

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 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 Console do Google Cloud

Para criar a conta:

  1. Clique em IAM e Administrador 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.

    Criar conta de serviço do Google

  5. Clique em CRIAR.

  6. Especifique funções para sua conta de serviço. Na lista suspensa Selecionar 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 conta recém-criada.

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

    Criar chave do Google

  3. Aceite o tipo de chave JSON.

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

    Importante

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

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

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

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

  2. Clique em CRIAR BUCKET.

    Criar bucket 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 bucket do Google

  7. Clique em SALVAR.

Etapa 2: Configurar o Azure Databricks

Para configurar um cluster para acessar tabelas de BigQuery, você precisa fornecer seu arquivo de chave JSON como uma configuração do Spark. Use uma ferramenta local para codificar em Base64 o arquivo de chave JSON. Para fins de segurança, não use uma ferramenta remota ou baseada na Web que possa acessar suas chaves.

Ao configurar o cluster:

Na guia Configuração do Spark, adicione as seguintes configurações 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>

Leitura e gravação 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 GCS (Google Cloud Storage) para armazenamento temporário. Consulte Permissões para saber mais sobre os requisitos para valores de <project-id> e <parent-id>.

Criar uma tabela externa do BigQuery

Importante

Essa funcionalidade não tem suporte no Catálogo do Unity.

Você pode declarar uma tabela não gerenciada no Databricks que lerá os 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 notebook Python: carregar uma tabela do Google BigQuery em um DataFrame

O notebook Python a seguir carrega uma tabela do Google BigQuery em um DataFrame do Azure Databricks.

Notebook de exemplo do Python do BigQuery do Google

Obter notebook

Exemplo de notebook scala: carregar uma tabela do Google BigQuery em um DataFrame

O notebook Scala a seguir carrega uma tabela do Google BigQuery em um DataFrame do Azure Databricks.

Notebook de exemplo do Scala do BigQuery do Google

Obter notebook