Exportar dados para o AlloyDB (ETL reverso)

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

Antes de começar

  • Crie um cluster e uma instância do AlloyDB, que incluem um banco de dados, um esquema e uma tabela, para receber os dados exportados. Você precisa ter o esquema e a tabela de destino antes de executar o job de exportação.

  • A instância de destino do AlloyDB precisa ser uma instância PRIMARY no estado READY.

  • Crie uma conexão do BigQuery para se conectar à sua instância do AlloyDB. A conexão precisa ser autenticada por nome de usuário e senha. O usuário do banco de dados especificado na conexão precisa ter privilégios INSERT na tabela de destino e USAGE no esquema de destino.

  • Crie uma reserva do BigQuery Enterprise ou Enterprise Plus.

  • Atribua papéis do Identity and Access Management (IAM) que concedam aos usuários as permissões necessárias para realizar cada tarefa deste documento.

Funções exigidas

Para ter as permissões necessárias para exportar dados do BigQuery para o AlloyDB, peça ao administrador para conceder a você os papéis do IAM a seguir 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 usando papéis personalizados ou outros papéis predefinidos.

Limitações

  • As exportações do AlloyDB só aceitam exportações em lote. Não é possível usar consultas contínuas para exportar para o AlloyDB.

  • Os dados exportados para o AlloyDB são adicionados exclusivamente como novas linhas. O processo de exportação não modifica nem exclui registros existentes no AlloyDB. Se a tabela de destino não tiver restrições PRIMARY KEY ou UNIQUE definidas, a exportação dos mesmos dados várias vezes vai resultar em entradas duplicadas.

  • Para garantir a integridade de dados, recomendamos definir restrições PRIMARY KEY ou UNIQUE nas tabelas do AlloyDB. Os jobs de exportação não realizam "upserts", em que um registro existente é atualizado se houver uma chave exclusiva correspondente. Se alguma linha recebida violar uma restrição PRIMARY KEY ou UNIQUE, todo o job de exportação vai falhar.

  • Não recomendamos executar vários jobs EXPORT DATA simultâneos na mesma tabela do AlloyDB. Isso pode resultar em comportamento imprevisível, como perda de dados ou falhas de jobs. Recomendamos verificar se apenas um job de exportação grava em uma tabela específica por vez.

  • Apenas a autenticação por nome de usuário e senha usando uma conexão do BigQuery é compatível.

  • Os tipos de dados ARRAY, BYTES, GEOGRAPHY, INTERVAL e STRUCT do BigQuery não são compatíveis.

  • Se a instrução SELECT do BigQuery omitir colunas que existem na tabela de destino do AlloyDB, essas colunas precisarão permitir valores NULL ou ter valores padrão definidos no AlloyDB. Se houver uma restrição NOT NULL e nenhum valor padrão, a exportação vai falhar.

  • As exportações para o AlloyDB só são compatíveis com as edições BigQuery Enterprise ou Enterprise Plus. A edição Standard do BigQuery e a computação sob demanda não são compatíveis. Para mais informações, consulte Recursos de administração.

  • Um job do BigQuery, como um job de extração para o AlloyDB, tem uma duração máxima de 6 horas. Para exportações muito grandes, recomendamos dividir a exportação em vários jobs menores.

Considerações sobre o local

A exportação de dados para o AlloyDB tem requisitos específicos em relação à localização do conjunto de dados do BigQuery e da instância do AlloyDB:

  • Exportações da mesma região:a instância de destino do AlloyDB precisa estar na mesma região Google Cloud do conjunto de dados do BigQuery. Por exemplo, um conjunto de dados em us-east1 só pode ser exportado para uma instância do AlloyDB em us-east1.

  • Exportações multirregionais:

    • Os conjuntos de dados na multirregião US só podem ser exportados para uma instância do AlloyDB localizada na região us-central1.
    • Os conjuntos de dados na multirregião EU só podem ser exportados para uma instância do AlloyDB localizada na região europe-west4.

Exportações entre regiões diferentes das combinações mencionadas anteriormente não são compatíveis.

Configurar exportações com alloydb_options

Você pode usar a opção alloydb_options para especificar o esquema, a tabela e o número máximo de conexões de destino do AlloyDB. A configuração é expressa como uma string JSON. Apenas o parâmetro table é obrigatório. Todos os outros são opcionais.

Ao configurar a exportação, as colunas na instrução SELECT precisam ter aliases que correspondam aos nomes das colunas na tabela de destino do AlloyDB.

EXPORT DATA
  WITH CONNECTION `PROJECT_ID.LOCATION.CONNECTION_ID`
  OPTIONS(
    format='ALLOYDB',
    uri="https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_ID/instances/INSTANCE_ID",
    alloydb_options="""{
      "schema": "SCHEMA_NAME",
      "table": "TABLE_NAME",
      "max_parallel_connections": MAX_CONNECTIONS
    }"""
  )
AS SELECT * FROM `mydataset.table1`;

Substitua:

  • PROJECT_ID: o nome do projeto Google Cloud .
  • LOCATION: o local da conexão e da instância de destino.
  • CONNECTION_ID: o nome da sua conexão do BigQuery.
  • CLUSTER_ID: o nome do cluster do AlloyDB.
  • INSTANCE_ID: o nome da instância de destino do AlloyDB.
  • SCHEMA_NAME (opcional): o nome do esquema de destino no AlloyDB. Se não for fornecido, o esquema padrão configurado para o usuário do banco de dados será usado.
  • TABLE_NAME: o nome de uma tabela de destino atual no AlloyDB, sem o prefixo do esquema.
  • MAX_CONNECTIONS (opcional): o número máximo de conexões paralelas simultâneas de workers do BigQuery para a instância do AlloyDB. Limitar as conexões pode evitar a sobrecarga da instância de destino durante exportações grandes.

Exportar dados

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

O exemplo a seguir exporta campos selecionados de uma tabela chamada mydataset.table1 para uma tabela do AlloyDB chamada my_target_table:

EXPORT DATA
  WITH CONNECTION `myproject.us-central1.my-alloydb-conn`
  OPTIONS (
    format='ALLOYDB',
    uri="https://alloydb.googleapis.com/v1/projects/myproject/locations/us-central1/clusters/my-cluster/instances/my-instance",
    alloydb_options="""{
      "schema": "public",
      "table": "my_target_table"
    }"""
  )
AS SELECT
  col1 AS id,
  col2 AS name,
  col3 AS value
FROM
  `mydataset.table1`;

Preços

Quando você exporta dados para o AlloyDB usando a instrução EXPORT DATA, a cobrança é feita usando os preços de computação da capacidade do BigQuery.

Depois que os dados são exportados, você é cobrado pelo armazenamento deles no AlloyDB. Para mais informações, consulte Preços do AlloyDB para PostgreSQL.