Nesta página, explicamos como usar o Data Boost do Spanner ao executar consultas federadas do BigQuery em um banco de dados do Spanner. Com o Data Boost, as consultas federadas são executadas com impacto mínimo nas cargas de trabalho atuais na instância provisionada do Spanner. As consultas do Data Boost do BigQuery para um banco de dados do Spanner podem unir dados do BigQuery com dados do Spanner.
É possível executar consultas federadas do BigQuery para o Spanner usando o Data Boost com um dos seguintes métodos:
- Execute uma consulta federada do Data Boost, que usa a função de consulta federada
EXTERNAL_QUERY. - Usar o Data Boost com conjuntos de dados externos.
A federação do Spanner permite que o BigQuery consulte dados que residem no Spanner em tempo real, sem copiar ou mover dados. Para saber mais sobre consultas federadas do Spanner, consulte Consultas federadas do Spanner. Para saber mais sobre o Data Boost, consulte a visão geral do Data Boost.
Antes de começar
Antes de executar consultas federadas com o Data Boost, conclua as seguintes tarefas:
Criar uma instância e um banco de dados do Spanner
Se você não tiver uma instância e um banco de dados do Spanner, siga as etapas em Criar e consultar um banco de dados usando o console do Google Cloud .
Ativar a API BigQuery Connection
Com a API BigQuery Connection, é possível gerenciar conexões do BigQuery com fontes de dados externas, como um banco de dados do Spanner.
-
Enable the BigQuery connection API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Para mais informações, consulte a API BigQuery Connection na documentação do BigQuery.
Conceder permissões do IAM para o Data Boost aos principais
Uma principal precisa receber as seguintes permissões para executar consultas federadas com o Data Boost:
spanner.instances.get: permite receber a configuração de uma instância.spanner.databases.useDataBoost: permite usar os recursos de computação do Spanner Data Boost para processar consultas particionadas.
Para mais informações sobre as permissões do Spanner, consulte Permissões do Identity and Access Management (IAM).
Para conceder essas permissões necessárias, recomendamos que você use o papel do IAM Cloud
Spanner Database Reader With DataBoost
(roles/spanner.databaseReaderWithDataBoost). Você pode
adicionar essa função a qualquer principal que precise executar consultas federadas
com o Data Boost. Para saber mais sobre os papéis predefinidos no Spanner, consulte Papéis predefinidos. Para saber
como criar um papel personalizado do IAM, consulte Criar um papel
personalizado.
Executar uma consulta federada do Data Boost
Para executar uma consulta do Data Boost do BigQuery em uma fonte externa, você precisa de uma conexão do BigQuery com a fonte externa e o ID da conexão. Quando você executa uma consulta federada do Spanner com o Data Boost, a fonte externa é um banco de dados do Spanner. Depois de criar o ID de conexão, ele será usado pelo BigQuery para executar uma consulta do Data Boost em um banco de dados do Spanner.
Use uma das opções a seguir para criar um ID de conexão do BigQuery e, em seguida, use esse ID para executar uma consulta do Data Boost no BigQuery:
Começar no Spanner: crie o ID de conexão externa do BigQuery no console do Spanner. Depois que o ID da conexão for criado no console do Spanner, você será redirecionado para o console do BigQuery para executar uma consulta federada do Data Boost em um banco de dados do Spanner.
Comece no BigQuery: crie o ID de conexão externa do Data Boost no console do BigQuery ou usando a ferramenta de linha de comando
bq. Depois de criar o ID da conexão, você permanece no console do BigQuery para executar uma consulta federada do Data Boost em um banco de dados do Spanner.
Começar no Spanner para executar uma consulta do Data Boost
Para executar uma consulta federada do Data Boost no Spanner Studio, faça o seguinte:
Acesse a página Instâncias do Spanner no console do Google Cloud .
O console mostra uma lista das suas instâncias do Spanner.
Selecione uma instância e um banco de dados do Spanner.
Na página Visão geral do banco de dados, no menu de navegação, clique em Spanner Studio.
Clique em Abrir no BigQuery.
Na caixa de diálogo Ver no BigQuery, insira um ID de conexão.
O ID da conexão é usado para criar uma nova conexão externa do BigQuery com seu banco de dados do Spanner. Faça referência à sua conexão externa usando o seguinte padrão:
PROJECT-ID.LOCATION.CONNECTION-IDUm erro vai ocorrer se o ID já existir.
Preencha o restante da caixa de diálogo e faça o seguinte:
- Selecione Ler dados em paralelo.
- Selecione Usar o Data Boost do Spanner.
Clique em Ver no BigQuery.
O BigQuery Studio é aberto com a seguinte consulta:
SELECT * FROM EXTERNAL_QUERY("PROJECT-ID.LOCATION.CONNECTION-ID", "SELECT * FROM INFORMATION_SCHEMA.TABLES;");Você pode substituir isso pela sua consulta federada. Por exemplo, você pode fazer uma consulta semelhante ao exemplo a seguir. Este exemplo faz uma consulta federada de uma tabela chamada
ordersem um banco de dados do Spanner e mescla os resultados com uma tabela do BigQuery chamadamydataset.customers.SELECT c.customer_id, c.name, rq.first_order_date FROM mydataset.customers AS c LEFT OUTER JOIN EXTERNAL_QUERY( 'my-project.us.example-db', '''SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id''') AS rq ON rq.customer_id = c.customer_id GROUP BY c.customer_id, c.name, rq.first_order_date;
Começar no BigQuery para executar uma consulta do Data Boost
Para criar uma conexão de dados externa do BigQuery com um banco de dados do Spanner e usar essa conexão para executar uma consulta federada do Data Boost no BigQuery, selecione uma das seguintes opções:
Console
Acesse Criar conexões do Spanner na documentação do BigQuery e siga as instruções na guia Console.
No painel Fonte de dados externa, faça o seguinte:
- Selecione Ler dados em paralelo.
- Selecione Usar o Data Boost do Spanner.
bq
Acesse Criar conexões do Spanner na documentação do BigQuery e siga as instruções na guia bq*.
Defina as seguintes propriedades de conexão como
true:useParallelismuseDataBoost
O exemplo a seguir usa o comando bq
mk para criar uma
conexão chamada my_connection com as duas propriedades necessárias para o
Data Boost:
bq mk --connection --connection_type='CLOUD_SPANNER' --location='us' \
--properties='{"database":"projects/my-project/instances/my-instance/databases/my-database", "useParallelism":true, "useDataBoost": true}' my_connection
Usar o Data Boost com conjuntos de dados externos
Para executar uma consulta do Data Boost do BigQuery no Spanner como uma fonte externa, crie um conjunto de dados externo (também conhecido como conjunto de dados federado) no BigQuery vinculado a um banco de dados GoogleSQL ou PostgreSQL no Spanner.
Usar uma conexão CLOUD_RESOURCE
Por padrão, os conjuntos de dados externos do Spanner usam credenciais de usuário final (EUC, na sigla em inglês), o que exige que os usuários tenham acesso direto aos bancos de dados do Spanner. Os usuários podem consultar esses conjuntos de dados se tiverem acesso concedido no Spanner.
De maneira opcional, os conjuntos de dados externos do Spanner podem usar uma conexão CLOUD_RESOURCE para interagir com seu banco de dados do Spanner. Assim, é possível dar acesso do usuário aos dados do Spanner pelo BigQuery sem conceder 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.
Essa delegação de acesso desacopla o acesso às tabelas do Spanner de conjuntos de dados externos e o acesso direto às tabelas subjacentes do Spanner.
Uma conexão de 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.
Antes de criar conjuntos de dados externos do Spanner com uma conexão CLOUD_RESOURCE, faça o seguinte:
Crie uma conexão
Você pode criar ou usar uma conexão 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 sua conexão. A conexão precisa estar alocada com seus 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 usar em uma etapa posterior.
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 Google CloudCONNECTION_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.iam.gserviceaccount.com"}
Python
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente do Spanner, consulte Bibliotecas de cliente do Spanner.
Para autenticar no Spanner, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
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 de recurso do Google Cloud chamada
my_cloud_resource_connection na região US:
Para aplicar a configuração do Terraform em um projeto Google Cloud , siga as etapas nas seções a seguir.
Preparar o Cloud Shell
- Inicie o Cloud Shell.
-
Defina o projeto Google Cloud padrão 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 Google Cloud projeto para conferir os resultados. No console do Google Cloud , 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 à sua instância ou banco de dados do Spanner. Recomendamos usar o papel predefinido do IAM de Leitor do banco de dados do Cloud Spanner com Data Boost (roles/spanner.databaseReaderWithDataBoost).
Siga estas etapas para conceder acesso a papéis no nível do banco de dados à conta de serviço que você copiou 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.
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 Google Cloud .
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 Ver ações e 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 Fonte externa, insira o identificador completo do seu 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 as funções de banco de dados usadas para criar conexões do Spanner.
- Se quiser, marque a caixa ao lado de Usar uma conexão de recurso 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 Google Cloud , 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 sua conexão de recurso 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
Outra opção é criar 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 sua conexão de recurso 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 Google Cloud , siga as etapas nas seções a seguir.
Preparar o Cloud Shell
- Inicie o Cloud Shell.
-
Defina o projeto Google Cloud padrão 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 Google Cloud projeto para conferir os resultados. No console do Google Cloud , 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 seu 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 Administrador de conexões do BigQuery) na conexão
usada pelos conjuntos de dados externos.
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 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 externa 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;
Somente as visualizações materializadas não incrementais do BigQuery podem ter tabelas de conjunto de dados externos do Spanner como tabelas de base.
Se a última atualização de uma visualização materializada não incremental ocorreu
fora do intervalo max_staleness, a consulta lê as tabelas do conjunto de dados
externo do Spanner. Saiba mais sobre as visualizações materializadas não incrementais do BigQuery.
A seguir
- Saiba mais sobre o Data Boost na Visão geral do Data Boost
- Usar o Data Boost nos seus aplicativos
- Monitorar o uso do Data Boost
- Monitorar e gerenciar o uso da cota do Data Boost
- Saiba mais sobre o conjunto de dados externo do Spanner.
- Saiba mais sobre como criar visualizações materializadas em conjuntos de dados externos do Spanner.