Google BigQuery
Este artigo descreve como ler e gravar em tabelas do Google BigQuery em Databricks.
Experimental
As configurações descritas neste artigo são experimentais. Os recursos experimentais são fornecidos no estado em que se encontram e não recebem suporte do site Databricks por meio do suporte técnico ao cliente. Para obter suporte completo à federação de consultas, o senhor deve usar a lakehouse Federation, que permite que os usuários do Databricks aproveitem as ferramentas de sintaxe e governança de dados do Unity Catalog.
O senhor deve se conectar ao site BigQuery usando a autenticação baseada em key.
Permissões
Seus projetos devem ter permissões específicas do Google para ler e gravar usando o BigQuery.
Este artigo discute BigQuery materialized view. Para obter detalhes, consulte os artigos do Google Introdução à visualização materializada. 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 a gravação de dados com o BigQuery dependem de dois projetos do Google Cloud:
- Projeto (
project
): O ID do projeto do Google Cloud a partir do qual o Databricks lê ou grava a tabela do BigQuery. - Projeto principal (
parentProject
): o ID do projeto principal, que é o ID do projeto do Google Cloud a ser cobrado pela leitura e escrita. Defina isso como o projeto do Google Cloud associado ao serviço do Google account para o qual o senhor gerará a chave.
O senhor 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 os IDs de project
e parentProject
forem os mesmos, use a tabela a seguir para determinar as permissões mínimas:
Databricks tarefa | Permissões do Google necessárias no projeto |
---|---|
Ler uma tabela BigQuery sem materialização view | No projeto
|
Ler uma BigQuery tabela com materialização view | No projeto
No projeto de materialização:
|
Escreva uma tabela do BigQuery | No projeto
|
Permissões necessárias se project
e parentProject
forem diferentes
Se os IDs de project
e parentProject
forem diferentes, use a tabela a seguir para determinar as permissões mínimas:
Databricks tarefa | Permissões do Google necessárias |
---|---|
Ler uma tabela BigQuery sem materialização view | No projeto
No projeto
|
Ler uma BigQuery tabela com materialização view | No projeto
No projeto
No projeto de materialização:
|
Escreva uma tabela do BigQuery | No projeto
No projeto
|
Etapa 1: configurar o Google Cloud
Ativar a API de armazenamento do BigQuery
A API BigQuery Storage é ativada por default em novos projetos cloud do Google nos quais o BigQuery está ativado. No entanto, se você tiver um projeto existente e a API BigQuery Storage não estiver ativada, siga as passos nesta seção para ativá-la.
O senhor pode ativar a API de armazenamento do BigQuery usando a CLI do Google Cloud ou o Console do Google Cloud.
Ativar a API de armazenamento do BigQuery usando a CLI do Google Cloud
gcloud services enable bigquerystorage.googleapis.com
Habilite a API de armazenamento do BigQuery usando o Google Cloud Console
-
Clique em APIs & serviço no painel de navegação esquerdo.
-
Clique no botão HABILITAR APIS E SERVIÇO .
-
Digite
bigquery storage api
na barra de pesquisa e selecione o primeiro resultado. -
Certifique-se de que a API de armazenamento do BigQuery esteja ativada.
Crie um serviço do Google account para os senhores. Databricks
Crie um serviço account para o clustering Databricks. Databricks recomenda dar a esse serviço account o mínimo de privilégios necessários para realizar sua tarefa. Consulte Funções e permissões do BigQuery.
O senhor pode criar um serviço account usando o Google Cloud CLI ou o Google Cloud Console.
Crie um serviço do Google account usando o Google Cloud CLI
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 a chave para seu serviço account:
gcloud iam service-accounts keys create --iam-account \
"<service-account-name>@<project-name>.iam.gserviceaccount.com" \
<project-name>-xxxxxxxxxxx.json
Crie um serviço do Google account usando o Google Cloud Console
Para criar o site account:
-
Clique em IAM e Admin no painel de navegação esquerdo.
-
Clique em conta de serviço .
-
Clique em + CREATE serviço account .
-
Digite o nome e a descrição do serviço account.
-
Clique em Criar .
-
Especifique funções para seu serviço account. No menu suspenso Selecionar uma função , digite
BigQuery
e adicione as seguintes funções: -
Clique em "Continuar" .
-
Clique em Concluído .
Para criar uma chave para seu serviço account:
-
Na lista de contas de serviço, clique na conta recém-criada account.
-
Na seção de chaves, selecione o botão ADD key > Create new key .
-
Aceite o JSON key tipo.
-
Clique em CRIAR . O arquivo JSON key é transferido para o seu computador.
O arquivo JSON key que o senhor gera para o serviço account é um arquivo privado key que deve ser compartilhado apenas com usuários autorizados, pois controla o acesso ao conjunto de dados e ao recurso no seu Google Cloud account.
Criar um bucket do Google Cloud Storage (GCS) para armazenamento temporário
Para gravar dados em BigQuery, a fonte de dados precisa ter acesso a um bucket GCS.
-
Clique em Armazenamento no painel de navegação esquerdo.
-
Clique em Criar bucket .
-
Configure os detalhes do bucket.
-
Clique em Criar .
-
Clique em Permissions (Permissões ) tab e Add members (Adicionar membros ).
-
Forneça as seguintes permissões para o serviço account no bucket.
-
Clique em SALVAR .
Etapa 2: Configurar o Databricks
Para configurar um clustering para acessar as tabelas BigQuery, o senhor deve fornecer o arquivo JSON key como uma configuração Spark. Use uma ferramenta local para codificar em Base64 o arquivo JSON key . Por motivos de segurança, não use uma ferramenta remota ou baseada na Web que possa acessar sua chave.
Quando o senhor configura o clustering:
Em Spark Config tab, adicione a seguinte configuração Spark. Substitua <base64-keys>
pelas cadeias de caracteres do arquivo JSON key codificado em Base64. Substitua os outros itens entre colchetes (como <client-email>
) pelos valores desses campos do arquivo JSON key .
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()
em que <bucket-name>
é o nome do bucket que o senhor criou em Criar um bucket do Google Cloud Storage (GCS) para armazenamento temporário. Consulte Permissões para saber mais sobre os requisitos dos valores <project-id>
e <parent-id>
.
Criar uma tabela externa a partir do BigQuery
Esse recurso não é suportado pelo Unity Catalog.
O senhor 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'
)
Python Exemplo de notebook: Carregar uma tabela do Google em um BigQuery DataFrame
O seguinte Python Notebook carrega uma tabela do Google BigQuery em um Databricks DataFrame.
Google BigQuery Python sample Notebook
Scala Exemplo de notebook: Carregar uma tabela do Google em um BigQuery DataFrame
O seguinte Scala Notebook carrega uma tabela do Google BigQuery em um Databricks DataFrame.