Pular para o conteúdo principal

Google BigQuery

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

info

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.

nota

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:

Python
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 project:

  • Usuário da sessão de leitura do BigQuery
  • BigQuery Data Viewer (Opcionalmente, conceda isso no nível dataset/table em vez de no nível do projeto)

Ler uma BigQuery tabela com materialização view

No projeto project:

  • Usuário do BigQuery Job
  • Usuário da sessão de leitura do BigQuery
  • BigQuery Data Viewer (Opcionalmente, conceda isso no nível dataset/table em vez de no nível do projeto)

No projeto de materialização:

  • Editor de dados do BigQuery

Escreva uma tabela do BigQuery

No projeto project:

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

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 parentProject:

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

No projeto project:

  • BigQuery Data Viewer (Opcionalmente, conceda isso no nível dataset/table em vez de no nível do projeto)

Ler uma BigQuery tabela com materialização view

No projeto parentProject:

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

No projeto project:

  • BigQuery Data Viewer (Opcionalmente, conceda isso no nível dataset/table em vez de no nível do projeto)

No projeto de materialização:

  • Editor de dados do BigQuery

Escreva uma tabela do BigQuery

No projeto parentProject:

  • Usuário do BigQuery Job

No projeto project:

  • Editor de dados do BigQuery

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

Bash
gcloud services enable bigquerystorage.googleapis.com

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

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

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

    Google Enable serviço

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

    Armazenamento do Google BigQuery

  4. Certifique-se de que a API de armazenamento do BigQuery esteja ativada.

    Google BigQuery

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

Bash
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:

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

  2. Clique em conta de serviço .

  3. Clique em + CREATE serviço account .

  4. Digite o nome e a descrição do serviço account.

    Google create service account

  5. Clique em Criar .

  6. Especifique funções para seu serviço account. No menu suspenso 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 uma chave para seu serviço account:

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

  2. Na seção de chaves, selecione o botão ADD key > Create new key .

    Chave do Google Create

  3. Aceite o JSON key tipo.

  4. Clique em CRIAR . O arquivo JSON key é transferido para o seu computador.

important

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.

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

  2. Clique em Criar bucket .

    Bucket do Google Create

  3. Configure os detalhes do bucket.

    Detalhes do Google Bucket

  4. Clique em Criar .

  5. Clique em Permissions (Permissões ) tab e Add members (Adicionar membros ).

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

    Permissões do Google Bucket

  7. 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 .

ini
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

important

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:

SQL
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

Open notebook in new tab

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.

Google BigQuery Scala sample Notebook

Open notebook in new tab