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
Clique em APIs & Serviços no painel de navegação esquerdo.
Clique no botão ATIVAR APIS E SERVIÇOS .
Digite
bigquery storage api
na barra de pesquisa e selecione o primeiro resultado.Verifique se a API de armazenamento do BigQuery está ativada.
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:
Clique em IAM e Admin no painel de navegação esquerdo.
Clique em Contas de Serviço.
Clique em + CRIAR CONTA DE SERVIÇO.
Insira o nome e a descrição da conta de serviço.
Clique em CRIAR.
Especifique funções para sua conta de serviço. Na lista suspensa Selecione uma função, digite
BigQuery
e adicione as seguintes funções:Clique em CONTINUAR.
Clique em CONCLUÍDO.
Para criar chaves para sua conta de serviço:
Na lista de contas de serviço, clique na sua conta recém-criada.
Na seção Chaves, selecione ADICIONAR CHAVE > Criar novo botão de chave .
Aceite o tipo de chave JSON.
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.
Clique em Armazenamento no painel de navegação esquerdo.
Clique em CREATE BUCKET.
Configure os detalhes do bucket.
Clique em CRIAR.
Clique na guia Permissões e Adicionar membros.
Forneça as seguintes permissões para a conta de serviço no bucket.
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
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.