Esta página explica como usar o Spanner Data Boost quando executa consultas federadas do BigQuery para uma base de dados do Spanner. Com o Data Boost, as consultas federadas são executadas com um impacto mínimo nos volumes de trabalho existentes na instância do Spanner aprovisionada. As consultas do Data Boost do BigQuery a uma base de dados do Spanner podem juntar dados do BigQuery com dados do Spanner.
Pode executar consultas federadas do BigQuery para o Spanner usando o Data Boost com um dos seguintes métodos:
- Execute uma consulta de Data Boost federada, que usa a
EXTERNAL_QUERYfunção de consulta federada. - Use o aumento de dados com conjuntos de dados externos.
A federação do Spanner permite que o BigQuery consulte dados residentes no Spanner em tempo real, sem copiar nem mover dados. Para saber mais sobre as consultas federadas do Spanner, consulte o artigo Consultas federadas do Spanner. Para saber mais sobre o Aumento de dados, consulte a vista geral do Aumento de dados.
Antes de começar
Antes de poder executar consultas federadas com o Data Boost, tem de concluir as seguintes tarefas:
Crie uma instância e uma base de dados do Spanner
Se não tiver uma instância e uma base de dados do Spanner, siga os passos em Criar e consultar uma base de dados através da Google Cloud consola para as criar.
Ative a API BigQuery Connection
A API BigQuery Connection permite-lhe gerir ligações do BigQuery a origens de dados externas, como uma base 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.
Conceda autorizações de IAM para o aumento de dados a diretores
Um principal tem de receber as seguintes autorizações para executar consultas federadas com o Data Boost:
spanner.instances.get: permite obter a configuração de uma instância.spanner.databases.useDataBoost– permite-lhe usar os recursos de computação do Spanner Data Boost para processar consultas particionadas.
Para mais informações sobre as autorizações do Spanner, consulte o artigo Autorizações de gestão de identidade e de acesso (IAM).
Para conceder estas autorizações necessárias, recomendamos que use a função de IAM Cloud
Spanner Database Reader With DataBoost
(roles/spanner.databaseReaderWithDataBoost). Pode
adicionar essa função a qualquer principal que precise de executar consultas federadas
com o Data Boost. Para saber mais acerca das funções predefinidas no Spanner, consulte o artigo Funções predefinidas. Para saber como criar uma função do IAM personalizada, consulte o artigo Crie uma função
personalizada.
Execute uma consulta de Data Boost federada
Para executar uma consulta do Data Boost a partir do BigQuery para uma origem externa, precisa de uma ligação do BigQuery à origem externa e do ID da ligação. Quando executa uma consulta federada do Spanner com o Data Boost, a origem externa é uma base de dados do Spanner. Depois de criar o ID da associação, o BigQuery usa-o para executar uma consulta de Data Boost de uma base de dados do Spanner.
Use uma das seguintes opções para criar um ID de ligação do BigQuery e, de seguida, use o ID de ligação para executar uma consulta do Data Boost a partir do BigQuery:
Comece no Spanner: crie o ID da ligação externa do BigQuery na consola do Spanner. Depois de o ID da ligação ser criado na consola do Spanner, é feito o redirecionamento para a consola do BigQuery para executar uma consulta federada do Data Boost numa base de dados do Spanner.
Comece no BigQuery: crie o ID da associação externa do Data Boost na consola do BigQuery ou através da ferramenta de linha de comandos
bq. Depois de criar o ID da associação, permanece na consola do BigQuery para executar uma consulta federada do Data Boost a uma base de dados do Spanner.
Comece no Spanner para executar uma consulta do Data Boost
Para executar uma consulta federada do Data Boost a partir do Spanner Studio, faça o seguinte:
Aceda à página Instances do Spanner na Google Cloud consola.
A consola mostra uma lista das suas instâncias do Spanner.
Selecione uma instância do Spanner e, de seguida, selecione uma base de dados.
Na página Vista geral da base de dados, no menu de navegação, clique em Spanner Studio.
Clique em Ver no BigQuery.
Na caixa de diálogo Ver no BigQuery, introduza um ID da associação.
O ID da ligação é usado para criar uma nova ligação externa do BigQuery à sua base de dados do Spanner. Faz referência à sua ligação externa através do seguinte padrão:
PROJECT-ID.LOCATION.CONNECTION-IDOcorre um erro se o ID já existir.
Preencha o resto da caixa de diálogo e faça o seguinte:
- Selecione Ler dados em paralelo.
- Selecione Usar otimização de dados 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;");Pode substituir isto pela sua consulta federada. Por exemplo, pode fazer uma consulta semelhante ao seguinte exemplo. Este exemplo faz uma consulta federada a partir de uma tabela denominada
ordersnuma base de dados do Spanner e junta os resultados a uma tabela do BigQuery denominadamydataset.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;
Comece no BigQuery para executar uma consulta do Data Boost
Para criar uma associação de dados externa do BigQuery a uma base de dados do Spanner e usar essa associação para executar uma consulta federada do Data Boost a partir do BigQuery, selecione uma das seguintes opções:
Consola
Aceda a Criar ligações do Spanner na documentação do BigQuery e siga as instruções no separador Consola.
No painel Origem de dados externa, faça o seguinte:
- Selecione Ler dados em paralelo.
- Selecione Usar otimização de dados do Spanner.
bq
Aceda a Criar ligações do Spanner na documentação do BigQuery e siga as instruções no separador bq*.
Defina as seguintes propriedades da ligação como
true:useParallelismuseDataBoost
O exemplo seguinte usa o comando bq
mk para criar uma nova ligação denominada my_connection com as duas propriedades necessárias para a Otimização de dados:
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
Use o aumento de dados com conjuntos de dados externos
Para executar uma consulta do Data Boost do BigQuery para o Spanner como uma origem externa, pode criar um conjunto de dados externo (também conhecido como um conjunto de dados federado) no BigQuery que esteja associado a uma base de dados GoogleSQL ou PostgreSQL existente no Spanner.
Use uma ligação CLOUD_RESOURCE
Por predefinição, os conjuntos de dados externos do Spanner usam credenciais do utilizador final (EUC), o que requer que os utilizadores tenham acesso direto às respetivas bases de dados do Spanner. Os utilizadores podem consultar estes conjuntos de dados se tiverem acesso concedido no Spanner.
Opcionalmente, os conjuntos de dados externos do Spanner podem usar uma CLOUD_RESOURCEligação para interagir com a sua base de dados do Spanner, de modo que possa conceder aos utilizadores acesso aos dados do Spanner através do BigQuery, sem lhes dar acesso direto à base de dados do Spanner.
Uma vez que a conta de serviço da associação CLOUD_RESOURCE processa a obtenção de dados do Spanner, só tem de conceder aos utilizadores acesso ao conjunto de dados externo do Spanner.
Esta delegação de acesso desvincula o acesso às tabelas do Spanner dos conjuntos de dados externos e do acesso direto às tabelas do Spanner subjacentes.
É usada uma associação de recursos do Cloud associada a uma conta de serviço para estabelecer ligação ao Spanner.
Os utilizadores podem consultar estas tabelas do Spanner a partir de conjuntos de dados externos, mesmo que não tenham acesso concedido no Spanner.
Antes de criar conjuntos de dados externos do Spanner com uma associação CLOUD_RESOURCE, faça o seguinte:
Crie uma associação
Pode criar ou usar uma
CLOUD_RESOURCE associação
existente para estabelecer ligação ao Spanner. Certifique-se de que cria a associação na localização onde planeia criar o conjunto de dados externo do Spanner.
Consola
Aceda à página do BigQuery.
No painel esquerdo, clique em Explorador:

Se não vir o painel esquerdo, clique em Expandir painel esquerdo para o abrir.
No painel Explorador, expanda o nome do projeto e, de seguida, clique em Ligações.
Na página Associações, clique em Criar associação.
Em Tipo de ligação, escolha Modelos remotos do Vertex AI, funções remotas, BigLake e Spanner (recurso da nuvem).
No campo ID da associação, introduza um nome para a associação.
Em Tipo de localização, selecione uma localização para a sua ligação. A ligação deve estar localizada com os seus outros recursos, como conjuntos de dados.
Clique em Criar associação.
Clique em Aceder à associação.
No painel Informações da ligação, copie o ID da conta de serviço para utilização num passo posterior.
bq
Num ambiente de linha de comandos, crie uma associação:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
O parâmetro
--project_idsubstitui o projeto predefinido.Substitua o seguinte:
REGION: a sua região de ligaçãoPROJECT_ID: o ID do seu Google Cloud projetoCONNECTION_ID: um ID para a sua ligação
Quando cria um recurso de ligação, o BigQuery cria uma conta de serviço do sistema única e associa-a à ligação.
Resolução de problemas: se receber o seguinte erro de ligação, atualize o SDK do 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 utilização num passo posterior:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
O resultado é semelhante ao 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 cliente do Spanner, consulte o artigo Bibliotecas cliente do Spanner.
Para se autenticar no Spanner, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca cliente do Spanner, consulte o artigo Bibliotecas cliente do Spanner.
Para se autenticar no Spanner, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Terraform
Use o recurso
google_bigquery_connection.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
O exemplo seguinte cria uma associação de recursos da nuvem com o nome my_cloud_resource_connection na região US:
Para aplicar a configuração do Terraform num Google Cloud projeto, conclua os passos nas secções seguintes.
Prepare o Cloud Shell
- Inicie o Cloud Shell.
-
Defina o Google Cloud projeto predefinido onde quer aplicar as suas configurações do Terraform.
Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
As variáveis de ambiente são substituídas se definir valores explícitos no ficheiro de configuração do Terraform.
Prepare o diretório
Cada ficheiro de configuração do Terraform tem de ter o seu próprio diretório (também denominado módulo raiz).
-
No Cloud Shell, crie um diretório e um novo ficheiro nesse diretório. O nome do ficheiro tem de ter a extensão
.tf, por exemplo,main.tf. Neste tutorial, o ficheiro é denominadomain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se estiver a seguir um tutorial, pode copiar o código de exemplo em cada secção ou passo.
Copie o exemplo de código para o ficheiro
main.tfcriado recentemente.Opcionalmente, copie o código do GitHub. Isto é recomendado quando o fragmento do Terraform faz parte de uma solução completa.
- Reveja e modifique os parâmetros de exemplo para aplicar ao seu ambiente.
- Guarde as alterações.
-
Inicialize o Terraform. Só tem de fazer isto uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do fornecedor Google, inclua a opção
-upgrade:terraform init -upgrade
Aplique as alterações
-
Reveja a configuração e verifique se os recursos que o Terraform vai criar ou
atualizar correspondem às suas expetativas:
terraform plan
Faça correções à configuração conforme necessário.
-
Aplique a configuração do Terraform executando o seguinte comando e introduzindo
yesno comando:terraform apply
Aguarde até que o Terraform apresente a mensagem "Apply complete!" (Aplicação concluída!).
- Abra o seu Google Cloud projeto para ver os resultados. Na Google Cloud consola, navegue para os seus recursos na IU para se certificar de que o Terraform os criou ou atualizou.
Depois de criar a associação, abra-a e, no painel Informações de associação, copie o ID da conta de serviço. Precisa deste ID quando configura as autorizações para a ligação. Quando cria um recurso de ligação, o BigQuery cria uma conta de serviço do sistema exclusiva e associa-a à ligação.
Configure o acesso
Tem de conceder à conta de serviço associada à nova ligação acesso de leitura à sua instância ou base de dados do Spanner. Recomendamos que use a função predefinida do IAM
Leitor de base de dados do Cloud Spanner com o serviço de otimização de dados (roles/spanner.databaseReaderWithDataBoost).
Siga estes passos para conceder acesso a funções ao nível da base de dados para a conta de serviço que copiou anteriormente da associação:
Aceda à página Instâncias do Spanner.
Clique no nome da instância que contém a sua base de dados para aceder à página Detalhes da instância.
No separador Vista geral, selecione a caixa de verificação da sua base de dados.
O painel Informações é apresentado.Clique em Adicionar principal.
No painel Adicionar membros, em Novos membros, introduza o ID da conta de serviço que copiou anteriormente.
No campo Selecionar uma função, selecione Leitor de base de dados do Cloud Spanner com função DataBoost.
Clique em Guardar.
Crie um conjunto de dados externo
Para criar um conjunto de dados externo, faça o seguinte:
Consola
Abra a página do BigQuery na Google Cloud consola.
No painel esquerdo, clique em Explorador:

Se não vir o painel do lado esquerdo, clique em Expandir painel do lado esquerdo para o abrir.
No painel Explorador, selecione o projeto onde quer criar o conjunto de dados.
Clique em Ver ações e, de seguida, em Criar conjunto de dados.
Na página Criar conjunto de dados, faça o seguinte:
- Para ID do conjunto de dados, introduza um nome exclusivo para o conjunto de dados.
- Para Tipo de localização, escolha uma localização para o conjunto de dados, como
us-central1ou multirregiãous. Depois de criar um conjunto de dados, não é possível alterar a localização. Para o conjunto de dados externo, faça o seguinte:
- Selecione a caixa junto a Associar a um conjunto de dados externo.
- Para Tipo de conjunto de dados externo, selecione
Spanner. - Para Origem externa, introduza o identificador completo da sua base 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. - Opcionalmente, para Função da base de dados, introduza o nome de uma função da base de dados do Spanner. Para mais informações, leia acerca das funções da base de dados usadas para criar associações do Spanner
- Opcionalmente, selecione a caixa junto a Usar uma associação de recursos na nuvem para criar o conjunto de dados externo com uma associação.
Deixe as outras predefinições como estão.
Clique em Criar conjunto de dados.
SQL
Use a CREATE EXTERNAL SCHEMAdeclaração de linguagem de definição de dados (LDD).
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaraçã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 o seguinte:
DATASET_NAME: o nome do novo conjunto de dados no BigQuery.SPANNER_EXTERNAL_SOURCE: o nome completo e qualificado da base 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: a localização do seu novo conjunto de dados no BigQuery, por exemplo,us-central1. Depois de criar um conjunto de dados, não pode alterar a respetiva localização.- (Opcional)
CONNECTION_NAME: o nome da associação de recursos da nuvem.
Clique em Executar.
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
bq
Num ambiente de linha de comandos, crie um conjunto de dados externo através do comando bq mk:
bq --location=LOCATION mk --dataset \ --external_source SPANNER_EXTERNAL_SOURCE \ DATASET_NAME
Em alternativa, crie com uma associação:
bq --location=LOCATION mk --dataset \ --external_source SPANNER_EXTERNAL_SOURCE \ --connection_id PROJECT_ID.LOCATION.CONNECTION_NAME \ DATASET_NAME
Substitua o seguinte:
LOCATION: a localização do seu novo conjunto de dados no BigQuery, por exemplo,us-central1. Depois de criar um conjunto de dados, não pode alterar a respetiva localização. Pode definir um valor de localização predefinido através do ficheiro.bigqueryrc.SPANNER_EXTERNAL_SOURCE: o nome completo e qualificado da base 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 num projeto que não seja o seu projeto predefinido, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato:PROJECT_ID:DATASET_NAME.- (Opcional)
CONNECTION_NAME: o nome da associação de recursos da nuvem.
Terraform
Use o
google_bigquery_dataset recurso.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
O exemplo seguinte cria um conjunto de dados externo do Spanner:
Para aplicar a configuração do Terraform num Google Cloud projeto, conclua os passos nas secções seguintes.
Prepare o Cloud Shell
- Inicie o Cloud Shell.
-
Defina o Google Cloud projeto predefinido onde quer aplicar as suas configurações do Terraform.
Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
As variáveis de ambiente são substituídas se definir valores explícitos no ficheiro de configuração do Terraform.
Prepare o diretório
Cada ficheiro de configuração do Terraform tem de ter o seu próprio diretório (também denominado módulo raiz).
-
No Cloud Shell, crie um diretório e um novo ficheiro nesse diretório. O nome do ficheiro tem de ter a extensão
.tf, por exemplo,main.tf. Neste tutorial, o ficheiro é denominadomain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se estiver a seguir um tutorial, pode copiar o código de exemplo em cada secção ou passo.
Copie o exemplo de código para o ficheiro
main.tfcriado recentemente.Opcionalmente, copie o código do GitHub. Isto é recomendado quando o fragmento do Terraform faz parte de uma solução completa.
- Reveja e modifique os parâmetros de exemplo para aplicar ao seu ambiente.
- Guarde as alterações.
-
Inicialize o Terraform. Só tem de fazer isto uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do fornecedor Google, inclua a opção
-upgrade:terraform init -upgrade
Aplique as alterações
-
Reveja a configuração e verifique se os recursos que o Terraform vai criar ou
atualizar correspondem às suas expetativas:
terraform plan
Faça correções à configuração conforme necessário.
-
Aplique a configuração do Terraform executando o seguinte comando e introduzindo
yesno comando:terraform apply
Aguarde até que o Terraform apresente a mensagem "Apply complete!" (Aplicação concluída!).
- Abra o seu Google Cloud projeto para ver os resultados. Na Google Cloud consola, navegue para os seus recursos na IU para se certificar de que o Terraform os criou ou atualizou.
API
Chame o método datasets.insert com um recurso de conjunto de dados definido e um campo externalDatasetReference para a sua base de dados do Spanner.
Tenha em atenção que os nomes das tabelas nos conjuntos de dados externos não são sensíveis a maiúsculas e minúsculas.
Quando cria os conjuntos de dados externos com uma ligação CLOUD_RESOURCE,
tem de ter a autorização bigquery.connections.delegate (disponível na função de administrador da ligação do BigQuery) na ligação
usada pelos conjuntos de dados externos.
Crie uma vista materializada não incremental com base em tabelas de um conjunto de dados externo
Antes de continuar, tem de criar o conjunto de dados externo do Spanner subjacente através de uma
CLOUD_RESOURCE associação.
Pode criar vistas materializadas não incrementais que referenciam
tabelas de conjuntos de dados externos do Spanner
usando a opção allow_non_incremental_definition.
O exemplo seguinte 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;
Apenas as vistas materializadas não incrementais do BigQuery podem ter tabelas de conjuntos de dados externos do Spanner como tabelas base.
Se a última atualização de uma vista materializada não incremental ocorreu fora do intervalo max_staleness, a consulta lê as tabelas do conjunto de dados externo do Spanner base. Saiba mais acerca das vistas materializadas não incrementais do BigQuery.
O que se segue?
- Saiba mais sobre a Otimização de dados no artigo Vista geral da Otimização de dados
- Use o Data Boost nas suas aplicações
- Monitorize a utilização do aumento de dados
- Monitorize e faça a gestão da utilização da quota do Aumento de dados
- Saiba mais sobre o conjunto de dados externo do Spanner.
- Saiba mais sobre como criar vistas materializadas sobre conjuntos de dados externos do Spanner.