Criar conjuntos de dados externos do Spanner
Os conjuntos de dados externos (também conhecidos como conjuntos de dados federados) permitem consultar dados transacionais no Spanner pelo BigQuery usando o GoogleSQL, sem copiar ou importar os dados para o armazenamento do BigQuery. Um conjunto de dados externo vincula um conjunto de dados do BigQuery a um banco de dados atual do GoogleSQL ou PostgreSQL no Spanner. As tabelas somente leitura refletem automaticamente as tabelas e atualizações nesse banco de dados.
Neste documento, descrevemos como criar, consultar e gerenciar um conjunto de dados externo do Spanner.
Permissões necessárias
Para receber a permissão necessária para criar um conjunto de dados externo, peça ao administrador para conceder a você o papel do IAM de Usuário do BigQuery (roles/bigquery.user).
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esse papel predefinido contém a permissão bigquery.datasets.create, que é necessária para criar um conjunto de dados externo.
Também é possível receber essa permissão com papéis personalizados ou outros papéis predefinidos.
Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Introdução ao IAM.
Usar uma conexão CLOUD_RESOURCE
Como opção, os conjuntos de dados externos do Spanner podem usar uma conexão CLOUD_RESOURCE para interagir com o banco de dados do Spanner. Assim, é possível fornecer a um usuário acesso aos dados do Spanner pelo BigQuery, sem dar acesso direto ao banco de dados do Spanner. Como a conta de serviço da conexão CLOUD_RESOURCE processa a recuperação de dados do Spanner, você só precisa conceder aos usuários acesso ao conjunto de dados externo do Spanner.
Antes de criar conjuntos de dados externos do Spanner com uma conexão CLOUD_RESOURCE, faça o seguinte:
Crie uma conexão
É possível criar ou usar uma
conexão do CLOUD_RESOURCE
para se conectar ao Spanner. Crie a conexão no
mesmo local em que você planeja criar o
conjunto de dados externo do Spanner.
Console
Acessar a página do BigQuery.
No painel à esquerda, clique em Explorer:

Se o painel esquerdo não aparecer, clique em Expandir painel esquerdo para abrir.
No painel Explorer, expanda o nome do projeto e clique em Conexões.
Na página Conexões, clique em Criar conexão.
Em Tipo de conexão, escolha Modelos remotos da Vertex AI, funções remotas, BigLake e Spanner (recurso do Cloud).
No campo ID da conexão, insira um nome para a conexão.
Em Tipo de local, selecione um local para a conexão. A conexão precisa estar no mesmo local que os outros recursos, como conjuntos de dados.
Clique em Criar conexão.
Clique em Ir para conexão.
No painel Informações da conexão, copie o ID da conta de serviço para uso em uma etapa posterior.
SQL
Use a instrução CREATE CONNECTION:
No console do Cloud de Confiance , acesse a página BigQuery.
No editor de consultas, digite a seguinte instrução:
CREATE CONNECTION [IF NOT EXISTS] `CONNECTION_NAME` OPTIONS ( connection_type = "CLOUD_RESOURCE", friendly_name = "FRIENDLY_NAME", description = "DESCRIPTION" );
Substitua:
-
CONNECTION_NAME: o nome da conexão no formatoPROJECT_ID.LOCATION.CONNECTION_ID,LOCATION.CONNECTION_IDouCONNECTION_ID. Se o projeto ou o local forem omitidos, eles serão inferidos do projeto e do local em que a instrução é executada. -
FRIENDLY_NAME(opcional): um nome descritivo para a conexão. -
DESCRIPTION(opcional): uma descrição da conexão.
-
Clique em Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
bq
Em um ambiente de linha de comando, crie uma conexão:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
O parâmetro
--project_idsubstitui o projeto padrão.Substitua:
REGION: sua região de conexãoPROJECT_ID: o ID do projeto do Cloud de Confiance .CONNECTION_ID: um ID para sua conexão
Quando você cria um recurso de conexão, o BigQuery cria uma conta de serviço do sistema exclusiva e a associa à conexão.
Solução de problemas: se você receber o seguinte erro de conexão, atualize o SDK Google Cloud:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
Recupere e copie o ID da conta de serviço para uso em uma etapa posterior:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
O resultado será o seguinte:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.s3ns-system.iam.gserviceaccount.com"}
Python
Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável de ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Node.js.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável de ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.
Java
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
Antes de executar os exemplos de código, defina a variável de ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.
Terraform
Use o
recurso
google_bigquery_connection.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
O exemplo a seguir cria uma conexão a recursos do Cloud chamada
my_cloud_resource_connection na região US:
Para aplicar a configuração do Terraform em um projeto do Cloud de Confiance , conclua as etapas nas seções a seguir.
Preparar o Cloud Shell
- Inicie o Cloud Shell.
-
Defina o projeto padrão do Cloud de Confiance em que você quer aplicar as configurações do Terraform.
Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.
Preparar o diretório
Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.
-
No Cloud Shell, crie um diretório e um novo
arquivo dentro dele. O nome do arquivo precisa ter a extensão
.tf, por exemplo,main.tf. Neste tutorial, o arquivo é chamado demain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.
Copie o exemplo de código no
main.tfrecém-criado.Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção
-upgrade:terraform init -upgrade
Aplique as alterações
-
Revise a configuração e verifique se os recursos que o Terraform vai criar ou
atualizar correspondem às suas expectativas:
terraform plan
Faça as correções necessárias na configuração.
-
Para aplicar a configuração do Terraform, execute o comando a seguir e digite
yesno prompt:terraform apply
Aguarde até que o Terraform exiba a mensagem "Apply complete!".
- Abra seu projeto do Cloud de Confiance para ver os resultados. No console do Cloud de Confiance , navegue até seus recursos na UI para verificar se foram criados ou atualizados pelo Terraform.
Depois de criar a conexão, abra-a e, no painel Informações da conexão, copie o ID da conta de serviço. Você precisa desse ID ao configurar as permissões da conexão. Quando você cria um recurso de conexão, o BigQuery cria uma conta de serviço do sistema exclusiva e a associa à conexão.
Configurar o acesso
Conceda à conta de serviço associada à nova conexão acesso de leitura à
instância ou ao banco de dados do Spanner. É recomendável usar o papel predefinido do IAM de Leitor de banco de dados do Cloud Spanner com Data Boost (roles/spanner.databaseReaderWithDataBoost).
Siga estas etapas para conceder acesso aos papéis no nível do banco de dados para a conta de serviço que você copiou anteriormente da conexão:
Acesse a página Instâncias do Spanner.
Clique no nome da instância que contém seu banco de dados para acessar a página Detalhes da instância.
Na guia Visão geral, marque a caixa de seleção do seu banco de dados.
O painel de informações é exibido.Clique em Adicionar principal.
No painel Adicionar principais, em Novos principais, insira o ID da conta de serviço que você copiou anteriormente.
No campo Selecionar um papel, escolha Leitor de banco de dados do Cloud Spanner com o papel DataBoost.
Clique em Salvar.
Criar um conjunto de dados externo
Para criar um conjunto de dados externo, faça o seguinte:
Console
Abra a página do BigQuery no console do Cloud de Confiance .
No painel à esquerda, clique em Explorer:

Se o painel esquerdo não aparecer, clique em Expandir painel esquerdo para abrir.
No painel Explorador, selecione o projeto em que você quer criar o conjunto de dados.
Clique em Acessar ações e depois em Criar conjunto de dados.
Na página Criar conjunto de dados, faça o seguinte:
- Em Código do conjunto de dados, digite um nome exclusivo.
- Em Tipo de local, escolha um local para o conjunto de dados, como
us-central1ou multirregiãous. Depois que você cria um conjunto de dados, o local não pode ser alterado. Em Conjunto de dados externo, faça o seguinte:
- Marque a caixa ao lado de Vincular a um conjunto de dados externo.
- Em Tipo de conjunto de dados externo, selecione
Spanner. - Em Origem externa, insira o identificador completo do banco de dados do Spanner no seguinte formato:
projects/PROJECT_ID/instances/INSTANCE/databases/DATABASE. Por exemplo:projects/my_project/instances/my_instance/databases/my_database. - Opcional: em Papel do banco de dados, insira o nome de um papel do banco de dados do Spanner. Para mais informações, leia sobre os papéis de banco de dados usados para criar conexões do Spanner.
- Se quiser, marque a caixa ao lado de Usar uma conexão a recursos do Cloud para criar o conjunto de dados externo com uma conexão.
Não altere as outras configurações.
Clique em Criar conjunto de dados.
SQL
Use a
instrução de linguagem de definição de dados (DDL) CREATE EXTERNAL SCHEMA:
No console do Cloud de Confiance , acesse a página BigQuery.
No editor de consultas, digite a seguinte instrução:
CREATE EXTERNAL SCHEMA DATASET_NAME OPTIONS ( external_source = 'SPANNER_EXTERNAL_SOURCE', location = 'LOCATION'); /* Alternatively, create with a connection: */ CREATE EXTERNAL SCHEMA DATASET_NAME WITH CONNECTION
PROJECT_ID.LOCATION.CONNECTION_NAMEOPTIONS ( external_source = 'SPANNER_EXTERNAL_SOURCE', location = 'LOCATION');Substitua:
DATASET_NAME: o nome do novo conjunto de dados no BigQuery.SPANNER_EXTERNAL_SOURCE: o nome completo e qualificado do banco de dados do Spanner, com um prefixo que identifica a origem, no seguinte formato:google-cloudspanner://[DATABASE_ROLE@]/projects/PROJECT_ID/instances/INSTANCE/databases/DATABASE. Por exemplo:google-cloudspanner://admin@/projects/my_project/instances/my_instance/databases/my_databaseougoogle-cloudspanner:/projects/my_project/instances/my_instance/databases/my_database.LOCATION: o local do novo conjunto de dados no BigQuery, por exemplo,us-central1. Depois de criar um conjunto de dados, não será possível alterar o local dele.- (Opcional)
CONNECTION_NAME: o nome da conexão a recursos do Cloud.
Clique em Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
bq
Em um ambiente de linha de comando, crie um conjunto de dados externo usando o
comando bq mk:
bq --location=LOCATION mk --dataset \ --external_source SPANNER_EXTERNAL_SOURCE \ DATASET_NAME
Como alternativa, crie com uma conexão:
bq --location=LOCATION mk --dataset \ --external_source SPANNER_EXTERNAL_SOURCE \ --connection_id PROJECT_ID.LOCATION.CONNECTION_NAME \ DATASET_NAME
Substitua:
LOCATION: o local do novo conjunto de dados no BigQuery. Por exemplo,us-central1. Depois de criar um conjunto de dados, não será possível alterar o local dele. É possível definir um valor de local padrão usando o arquivo.bigqueryrc.SPANNER_EXTERNAL_SOURCE: o nome completo e qualificado do banco de dados do Spanner, com um prefixo que identifica a origem, no seguinte formato:google-cloudspanner://[DATABASE_ROLE@]/projects/PROJECT_ID/instances/INSTANCE/databases/DATABASE. Por exemplo:google-cloudspanner://admin@/projects/my_project/instances/my_instance/databases/my_databaseougoogle-cloudspanner:/projects/my_project/instances/my_instance/databases/my_database.DATASET_NAME: o nome do novo conjunto de dados no BigQuery. Para criar um conjunto de dados em um projeto diferente do projeto padrão, adicione a ID do projeto ao nome do conjunto de dados no seguinte formato:PROJECT_ID:DATASET_NAME.- (Opcional)
CONNECTION_NAME: o nome da conexão a recursos do Cloud.
Terraform
Use o
recurso google_bigquery_dataset.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
O exemplo a seguir cria um conjunto de dados externo do Spanner:
Para aplicar a configuração do Terraform em um projeto do Cloud de Confiance , conclua as etapas nas seções a seguir.
Preparar o Cloud Shell
- Inicie o Cloud Shell.
-
Defina o projeto padrão do Cloud de Confiance em que você quer aplicar as configurações do Terraform.
Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.
Preparar o diretório
Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.
-
No Cloud Shell, crie um diretório e um novo
arquivo dentro dele. O nome do arquivo precisa ter a extensão
.tf, por exemplo,main.tf. Neste tutorial, o arquivo é chamado demain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.
Copie o exemplo de código no
main.tfrecém-criado.Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção
-upgrade:terraform init -upgrade
Aplique as alterações
-
Revise a configuração e verifique se os recursos que o Terraform vai criar ou
atualizar correspondem às suas expectativas:
terraform plan
Faça as correções necessárias na configuração.
-
Para aplicar a configuração do Terraform, execute o comando a seguir e digite
yesno prompt:terraform apply
Aguarde até que o Terraform exiba a mensagem "Apply complete!".
- Abra seu projeto do Cloud de Confiance para ver os resultados. No console do Cloud de Confiance , navegue até seus recursos na UI para verificar se foram criados ou atualizados pelo Terraform.
API
Chame o
método datasets.insert
com um recurso de conjunto de dados definido
e o campo externalDatasetReference
para o banco de dados do Spanner.
Os nomes das tabelas nos conjuntos de dados externos não diferenciam maiúsculas de minúsculas.
Ao criar os conjuntos de dados externos com uma conexão CLOUD_RESOURCE,
você precisa ter a permissão bigquery.connections.delegate (disponível no papel de Administrador de conexões do BigQuery) na conexão
usada pelos conjuntos de dados externos.
Controlar o acesso a tabelas
Os conjuntos de dados externos do Spanner são compatíveis com as credenciais de usuário final (EUC). Isso significa que o acesso às tabelas do Spanner por conjuntos de dados externos é controlado pelo Spanner. Os usuários só podem consultar essas tabelas se tiverem acesso concedido no Spanner.
Os conjuntos de dados externos do Spanner também são compatíveis com a delegação de acesso. A delegação de acesso separa o acesso às tabelas do Spanner dos conjuntos de dados externos e o acesso direto às tabelas do Spanner subjacentes. Uma conexão a recursos do Cloud associada a uma conta de serviço é usada para se conectar ao Spanner. Os usuários podem consultar essas tabelas do Spanner em conjuntos de dados externos, mesmo que não tenham acesso concedido no Spanner.
Listar tabelas em um conjunto de dados externo
Se quiser listar as tabelas disponíveis para consulta no conjunto de dados externo, confira Listar conjuntos de dados.
Receber informações de tabelas
Para informações sobre as tabelas no conjunto de dados externo, como detalhes de esquema, consulte Receber informações da tabela.
Consultar dados do Spanner
Consultar tabelas em conjuntos de dados externos é igual a consultar tabelas em qualquer outro conjunto de dados do BigQuery. No entanto, as operações de modificação de dados (DML) não são compatíveis.
As consultas em tabelas em conjuntos de dados externos do Spanner usam o Data Boost por padrão, e isso não pode ser alterado. Por isso, você precisa de permissões adicionais para executar essas consultas.
Os resultados da consulta são armazenados no BigQuery. Quando você consulta o Spanner, os resultados são salvos em tabelas temporárias por padrão. Também é possível salvá-los como uma nova tabela do BigQuery, mesclá-los com outras tabelas ou com tabelas atuais usando DML.
Criar uma visualização em um conjunto de dados externo
Não é possível criar uma visualização em um conjunto de dados externo. No entanto, é possível criar uma visualização em um conjunto de dados padrão com base em uma tabela em um conjunto de dados externo. Para mais informações, consulte Criar visualizações.
Excluir um conjunto de dados externo
Excluir um conjunto de dados externo é igual a excluir qualquer outro conjunto de dados do BigQuery. A exclusão de conjuntos de dados externos não afeta as tabelas no banco de dados do Spanner. Para mais informações, consulte Excluir conjuntos de dados.
Criar uma visualização materializada não incremental com base em tabelas de um conjunto de dados externo
Antes de continuar, crie o conjunto de dados externo do Spanner usando uma
conexão do CLOUD_RESOURCE.
É possível criar visualizações materializadas não incrementais que referenciam
tabelas de conjuntos de dados externos do Spanner
usando a opção allow_non_incremental_definition.
O exemplo a seguir usa uma tabela de conjunto de dados externo
base do Spanner:
/* You must create the spanner_external_dataset with a CLOUD_RESOURCE connection. */ CREATE MATERIALIZED VIEW sample_dataset.sample_spanner_mv OPTIONS ( enable_refresh = true, refresh_interval_minutes = 60, max_staleness = INTERVAL "24" HOUR, allow_non_incremental_definition = true) AS SELECT COUNT(*) cnt FROM spanner_external_dataset.spanner_table;
Limitações
- As limitações das consultas federadas do BigQuery são aplicáveis.
- Somente as tabelas de um esquema padrão do Spanner podem ser acessadas no BigQuery. Não há suporte para tabelas de esquemas nomeados.
- As chaves primárias e externas definidas no banco de dados do Spanner não ficam visíveis no BigQuery.
- Se uma tabela no banco de dados do Spanner tiver uma coluna de um tipo que não é compatível com o BigQuery, ela não poderá ser acessada no BigQuery.
- Não é possível adicionar, excluir ou atualizar dados ou metadados em tabelas em um conjunto de dados externo do Spanner.
- Não é possível criar tabelas, visualizações ou visualizações materializadas em um conjunto de dados externo do Spanner.
- As visualizações
INFORMATION_SCHEMAnão têm suporte. - Não há suporte para armazenamento em cache de metadados.
- As configurações no nível do conjunto de dados relacionadas aos padrões de criação de tabelas não afetam os conjuntos de dados externos porque não é possível criar tabelas de modo manual.
- As APIs Write e Read não são compatíveis.
- A segurança no nível da linha, a segurança no nível da coluna e o mascaramento de dados não são compatíveis.
- As visualizações materializadas incrementais com base em tabelas de conjuntos de dados externos do Spanner não são compatíveis. No entanto, as visualizações materializadas não incrementais são compatíveis em pré-lançamento.
- A integração com o Knowledge Catalog não é compatível. Por exemplo, perfis de dados e verificações de qualidade de dados não são compatíveis.
- Não é possível usar tags no nível da tabela.
- O preenchimento automático de SQL não funciona com tabelas externas do Spanner ao escrever consultas.
- A verificação com a Proteção de Dados Sensíveis não é compatível com conjuntos de dados externos.
- O compartilhamento com o BigQuery Sharing (antigo Analytics Hub) não é compatível com conjuntos de dados externos.
- Se o conjunto de dados externo do Spanner usar credenciais de usuário final (EUC, na sigla em inglês), será possível criar uma visualização autorizada que faça referência ao conjunto de dados externo. No entanto, quando essa visualização for consultada, o EUC de uma pessoa que executa uma consulta será enviado ao Spanner.
- Se o conjunto de dados externo do Spanner usar uma conexão a recursos do Cloud para delegação de acesso, será possível criar uma visualização ou rotina autorizada que faça referência ao conjunto de dados externo.
A seguir
- Saiba mais sobre as consultas federadas do Spanner.
- Saiba como criar visualizações materializadas em conjuntos de dados externos do Spanner.