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
Clique em APIs e Serviços no painel de navegação esquerdo.
Clique no botão HABILITAR 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á habilitada.
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:
Clique em IAM e Administrador 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 Selecionar 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 conta recém-criada.
Na seção Chaves, selecione o botão ADICIONAR CHAVE > Criar chave.
Aceite o tipo de chave JSON.
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.
Clique em Armazenamento no painel de navegação esquerdo.
Clique em CRIAR 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 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.
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
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.