Exportar dados para o Spanner (ETL reverso)

Para enviar feedback ou solicitar suporte para esse recurso, envie um e-mail para bq-cloud-spanner-federation-preview@google.com.

Este documento descreve como configurar um fluxo de trabalho de extração, transformação e carregamento reverso (ETL reverso) do BigQuery para o Spanner. Para fazer isso, use a instrução EXPORT DATA para exportar dados de uma tabela do BigQuery para uma tabela do Spanner.

Esse fluxo de trabalho ETL reverso combina recursos analíticos no BigQuery com baixa latência e alta capacidade no Spanner. Esse fluxo de trabalho permite disponibilizar dados para usuários de aplicativos sem esgotar cotas e limites no BigQuery.

Antes de começar

Funções exigidas

Para conseguir as permissões necessárias para exportar dados do BigQuery para o Spanner, peça ao administrador para conceder a você os seguintes papéis do IAM no seu projeto:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

Limitações

  • Os seguintes tipos de dados do BigQuery não têm equivalentes no Spanner e não são compatíveis:
Dialeto do banco de dados do Spanner Tipos do BigQuery sem suporte
Todos os dialetos
  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME
GoogleSQL
  • BIGNUMERIC: o tipo de NUMERIC compatível não é grande o suficiente. Considere adicionar transmissões explícitas ao 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 filha de outra (INTERLEAVE IN PARENT) ou se tiver restrições de chave externa, as chaves externas e a chave mãe serão validadas durante a exportação. Se uma linha exportada for gravada em uma tabela com INTERLEAVE IN PARENT e a linha pai não existir, a exportação vai falhar com a mensagem "A linha pai está ausente. Erro "Não é possível gravar a linha". Se a linha exportada for gravada em uma tabela com restrições de chave externa e estiver referenciando uma chave que não existe, a exportação vai falhar com o erro "A restrição de chave estrangeira foi violada". Ao exportar para várias tabelas, recomendamos ordenar a exportação para garantir que a integridade referencial seja mantida durante a exportação. Isso geralmente significa exportar tabelas mães e tabelas referenciadas por chaves estrangeiras antes das tabelas que as referenciam.

    Se a tabela que é o destino da exportação tiver restrições de chave externa ou for filha de outra tabela (INTERLEAVE IN PARENT), a tabela mãe precisará ser preenchida antes da exportação da tabela filha e conter todas as chaves correspondentes. Uma tentativa de exportar uma tabela filha enquanto uma tabela mãe não tem o conjunto completo de chaves relevantes falhará.

  • Um job de exportação para o Spanner tem uma duração máxima de 6 horas. Para informações sobre como otimizar jobs de exportação grandes, consulte Otimização de exportação. Como alternativa, considere dividir a entrada em blocos individuais de dados, que podem ser exportados como jobs de exportação individuais.

  • As exportações para o Spanner só são compatíveis com as edições do BigQuery Enterprise ou Enterprise Plus. A edição padrão do BigQuery e a computação sob demanda não são compatíveis.

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

Você pode usar a opção spanner_options para especificar um banco de dados e uma tabela de destino do Spanner. A configuração é expressa na forma de uma string JSON, conforme mostrado neste exemplo:

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",
      "priority": "PRIORITY",
      "tag": "TAG",
   }"""
)

Substitua:

  • PROJECT_ID: o nome do seu projeto do Google Cloud.
  • INSTANCE_ID: o nome da instância do banco de dados.
  • DATABASE_ID: o nome do banco de dados.
  • TABLE_NAME: o nome de uma tabela de destino atual.
  • PRIORITY (opcional): prioridade das solicitações de gravação. Valores permitidos: LOW, MEDIUM, HIGH. Valor padrão: MEDIUM.
  • TAG (opcional): tag de solicitação para ajudar a identificar o tráfego do exportador no monitoramento do Spanner. Valor padrão: bq_export.

Requisitos de consulta de exportação

Para exportar resultados de consulta para o Spanner, eles precisam atender aos seguintes requisitos:

  • Todas as colunas do conjunto de resultados precisam existir na tabela de destino e seus tipos devem corresponder.
  • O conjunto de resultados precisa conter todas as colunas NOT NULL da tabela de destino.
  • Os valores das colunas não podem exceder os limites de tamanho de dados em tabelas do Spanner.
  • Os tipos de coluna incompatíveis precisam ser convertidos em um dos tipos compatíveis antes de exportar para o Spanner.

Exportar dados

É possível usar a instrução EXPORT DATA para exportar dados de uma tabela do BigQuery para uma tabela do Spanner.

O exemplo a seguir exporta campos selecionados de uma tabela chamada 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:

  • PROJECT_ID: o nome do seu projeto do Google Cloud
  • INSTANCE_ID: o nome da sua instância de banco de dados.
  • DATABASE_ID: o nome do banco de dados.
  • TABLE_NAME: o nome de uma tabela de destino atual.

Exportar vários resultados com o mesmo valor rowkey

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

Otimização da exportação

Para otimizar a exportação de registros do BigQuery para o Spanner, tente o seguinte:

  • Aumentar o número de nós na instância de destino do Spanner. Durante os estágios iniciais da exportação, aumentar o número de nós na instância pode não aumentar imediatamente o rendimento da exportação. Pode haver um pequeno atraso, já que o Spanner executa a divisão baseada em carga. Com a divisão baseada em carga, o throughput de exportação vai aumentar e se estabilizar logo depois. Para mais detalhes sobre como maximizar a capacidade de gravação, consulte Visão geral do desempenho.

  • Especifique a prioridade HIGH em spanner_options. No entanto, isso pode causar uma degradação significativa no desempenho de outras cargas de trabalho atendidas pela mesma instância.

  • Evite ordenar os resultados da consulta. Se o conjunto de resultados tiver todas as colunas de chaves primárias, o exportador classificará 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, você deverá adicionar as expressões das colunas geradas à consulta para garantir que os dados exportados sejam classificados corretamente.

Preços

Para informações sobre os preços de exportação de dados, consulte Preços do BigQuery.

Depois que os dados são exportados, você é cobrado pelo armazenamento dos dados no Spanner. Para mais informações, consulte os preços do Spanner.