Exporte dados para o Spanner (ETL inverso)

Este documento descreve como pode configurar um fluxo de trabalho de extração, transformação e carregamento (ETL) inverso do BigQuery para o Spanner. Pode fazê-lo usando a declaração EXPORT DATA para exportar dados de uma tabela do BigQuery para uma tabela do Spanner.

Este fluxo de trabalho de ETL inverso combina capacidades analíticas no BigQuery com latência baixa e débito elevado no Spanner. Este fluxo de trabalho permite-lhe publicar dados para utilizadores de aplicações sem esgotar as quotas e os limites no BigQuery.

Antes de começar

Funções necessárias

Para receber as autorizações de que precisa para exportar dados do BigQuery para o Spanner, peça ao seu administrador que lhe conceda as seguintes funções do IAM no seu projeto:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Limitações

  • Esta funcionalidade não é suportada no Assured Workloads.

  • Os seguintes tipos de dados do BigQuery não têm equivalentes no Spanner e não são suportados:

Dialeto da base de dados do Spanner Tipos do BigQuery não suportados
Todos os dialetos
  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME
GoogleSQL
  • BIGNUMERIC: o tipo NUMERIC suportado não é suficientemente largo. Considere adicionar conversões explícitas ao tipo NUMERIC na consulta.
  • O tamanho máximo de uma linha exportada não pode exceder 1 MiB.

  • O Spanner aplica a integridade referencial durante a exportação. Se a tabela de destino for subordinada de outra tabela (INTERLEAVE IN PARENT) ou se a tabela de destino tiver restrições de chaves externas, as chaves externas e a chave principal são validadas durante a exportação. Se uma linha exportada for escrita numa tabela com INTERLEAVE IN PARENT e a linha principal não existir, a exportação falha com a mensagem "Parent row is missing. Erro "Não é possível escrever na linha". Se a linha exportada for escrita numa tabela com restrições de chaves externas e estiver a fazer referência a uma chave que não existe, a exportação falha com o erro "Foreign key constraint is violated" (Restrição de chave externa violada). Quando exporta para várias tabelas, recomendamos que sequencie a exportação para garantir que a integridade referencial é mantida durante a exportação. Normalmente, isto significa exportar tabelas principais e tabelas referenciadas por chaves externas antes das tabelas que as referenciam.

    Se a tabela que é o destino da exportação tiver restrições de chaves estrangeiras, ou for um elemento secundário de outra tabela (INTERLEAVE IN PARENT), a tabela principal tem de ser preenchida antes de uma exportação de tabela secundária e deve conter todas as chaves correspondentes. Uma tentativa de exportar uma tabela secundária quando uma tabela principal não tem o conjunto completo de chaves relevantes falha.

  • Uma tarefa de exportação para o Spanner tem uma duração máxima de 6 horas. Para obter informações sobre a otimização de tarefas de exportação de grande volume, consulte o artigo Otimização da exportação. Em alternativa, considere dividir a entrada em blocos de dados individuais, que podem ser exportados como tarefas de exportação individuais.

  • As exportações para o Spanner só são suportadas para as edições BigQuery Enterprise ou Enterprise Plus. A edição padrão do BigQuery e a computação a pedido não são suportadas.

  • As exportações para esquemas do Spanner predefinidos são suportadas. As tabelas de esquemas com nome não são suportadas.

  • Não pode usar consultas contínuas para exportar para tabelas do Spanner com chaves primárias geradas automaticamente.

  • Não pode usar consultas contínuas para exportar para tabelas do Spanner numa base de dados com dialeto PostgreSQL.

  • Quando usar consultas contínuas para exportar para uma tabela do Spanner, certifique-se de que escolhe uma chave primária que não corresponda a um número inteiro monotonamente crescente na sua tabela do BigQuery. Caso contrário, pode causar problemas de desempenho na exportação. Para obter informações sobre as chaves primárias no Spanner e formas de mitigar estes problemas de desempenho, consulte o artigo Escolha uma chave primária.

Configure exportações com a opção spanner_options

Pode usar a opção spanner_options para especificar uma base de dados e uma tabela do Spanner de destino. A configuração é expressa sob a forma de uma string JSON, como mostra o exemplo seguinte:

EXPORT DATA OPTIONS(
   uri="https://spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID/databases/DATABASE_ID",
  format='CLOUD_SPANNER',
   spanner_options = """{
      "table": "TABLE_NAME",
      "change_timestamp_column": "CHANGE_TIMESTAMP",
      "priority": "PRIORITY",
      "tag": "TAG",
   }"""
)

Substitua o seguinte:

  • PROJECT_ID: o nome do seu Trusted Cloud projeto.
  • INSTANCE_ID: o nome da instância da base de dados.
  • DATABASE_ID: o nome da sua base de dados.
  • TABLE_NAME: o nome de uma tabela de destino existente.
  • CHANGE_TIMESTAMP: o nome de uma coluna do tipo TIMESTAMP numa tabela do Spanner para acompanhar a data/hora da atualização mais recente da linha correspondente numa tabela do BigQuery que está a ser exportada. Este é um campo opcional para exportações em lote e contínuas para o Spanner, mas é recomendado para exemplos de utilização em que a ordenação de linhas exportadas com a mesma chave primária é importante.
  • PRIORITY (opcional): prioridade dos pedidos de gravação. Valores permitidos: LOW, MEDIUM, HIGH. Valor predefinido: MEDIUM.
  • TAG (opcional): etiqueta de pedido para ajudar a identificar o tráfego do exportador na monitorização do Spanner. Valor predefinido: bq_export.

Requisitos da consulta de exportação

Para exportar resultados de consultas para o Spanner, os resultados têm de cumprir os seguintes requisitos:

  • Todas as colunas no conjunto de resultados têm de existir na tabela de destino e os respetivos tipos têm de corresponder ou ser convertíveis.
  • O conjunto de resultados tem de conter todas as colunas NOT NULL da tabela de destino.
  • Os valores das colunas não podem exceder os limites de tamanho dos dados do Spanner nas tabelas.
  • Todos os tipos de colunas não suportados têm de ser convertidos num dos tipos suportados antes da exportação para o Spanner.

Conversões de tipo

Para facilitar a utilização, o exportador do Spanner aplica automaticamente as seguintes conversões de tipos:

Tipo do BigQuery Tipo de chave inglesa
BIGNUMERIC NUMERIC (apenas no dialeto PostgreSQL)
FLOAT64 FLOAT32
BYTES PROTO
INT64 ENUM

Exportar dados

Pode usar a declaração EXPORT DATA para exportar dados de uma tabela do BigQuery para uma tabela do Spanner.

O exemplo seguinte exporta campos selecionados de uma tabela denominada mydataset.table1:

EXPORT DATA OPTIONS (
  uri="https://spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID/databases/DATABASE_ID",
  format='CLOUD_SPANNER',
  spanner_options="""{ "table": "TABLE_NAME" }"""
)
AS SELECT * FROM mydataset.table1;

Substitua o seguinte:

  • PROJECT_ID: o nome do seu Trusted Cloud projeto
  • INSTANCE_ID: o nome da sua instância de base de dados
  • DATABASE_ID: o nome da sua base de dados
  • TABLE_NAME: o nome de uma tabela de destino existente

Exporte vários resultados com o mesmo valor de rowkey

Quando exporta um resultado que contém várias linhas com o mesmo valor rowkey, os valores escritos no Spanner acabam na mesma linha do Spanner. Apenas uma linha do BigQuery correspondente (não existe garantia de qual) estará presente no conjunto de linhas do Spanner produzido pela exportação.

Exporte continuamente

Para processar continuamente uma consulta de exportação, pode configurá-la como uma consulta contínua.

Otimização da exportação

Para otimizar a exportação de registos do BigQuery para o Spanner, pode experimentar o seguinte:

  • Aumentar o número de nós na instância de destino do Spanner. Tenha em atenção que, durante as fases iniciais da exportação, o aumento do número de nós na instância pode não provocar imediatamente um aumento na taxa de transferência da exportação. Pode haver um ligeiro atraso enquanto o Spanner realiza a divisão baseada na carga. Com a divisão baseada no carregamento, o débito de exportação aumenta e estabiliza pouco depois. Para mais detalhes sobre como maximizar a taxa de transferência de gravação, consulte a secção Vista geral do desempenho.

  • Especifique a prioridade HIGH em spanner_options. No entanto, fazê-lo pode causar uma degradação significativa do desempenho para outras cargas de trabalho servidas pela mesma instância.

  • Evite ordenar os resultados da consulta. Se o conjunto de resultados contiver todas as colunas de chave primária, o exportador ordena automaticamente as chaves primárias da tabela de destino para simplificar as gravações e minimizar a contenção.

    Se a chave primária da tabela de destino incluir colunas geradas, deve adicionar as expressões das colunas geradas à consulta para garantir que os dados exportados são ordenados corretamente.

Preços

Quando exporta dados para o Spanner através da declaração EXPORT DATA, a faturação é feita com base nos preços de computação de capacidade do BigQuery. Para executar consultas contínuas, tem de ter uma atribuição de reserva que use o tipo de tarefa CONTINUOUS.

As exportações do BigQuery para o Spanner que atravessam limites regionais são cobradas com base nas taxas de extração de dados. Para mais informações, consulte os preços do BigQuery. Para evitar custos de transferência de dados, certifique-se de que a exportação do BigQuery é executada na mesma região que o líder predefinido do Spanner. As exportações de consultas contínuas não suportam exportações que atravessam limites regionais.

Após a exportação dos dados, é-lhe cobrado o armazenamento dos dados no Spanner. Para mais informações, consulte os preços do Spanner.