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
PRIMARYno estadoREADY.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
INSERTna tabela de destino eUSAGEno esquema de destino.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:
-
Exporte dados de uma tabela do BigQuery:
Leitor de dados do BigQuery (
roles/bigquery.dataViewer) -
Execute um job de extração:
Usuário do BigQuery (
roles/bigquery.user) -
Usar uma conexão do BigQuery:
Usuário de conexão do BigQuery (
roles/bigquery.connectionUser) -
Conecte-se a uma instância do AlloyDB:
Cliente do AlloyDB (
roles/alloydb.client): a conta de serviço de conexão
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 KEYouUNIQUEdefinidas, 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 KEYouUNIQUEnas 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çãoPRIMARY KEYouUNIQUE, todo o job de exportação vai falhar.Não recomendamos executar vários jobs
EXPORT DATAsimultâ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,INTERVALeSTRUCTdo BigQuery não são compatíveis.Se a instrução
SELECTdo BigQuery omitir colunas que existem na tabela de destino do AlloyDB, essas colunas precisarão permitir valoresNULLou ter valores padrão definidos no AlloyDB. Se houver uma restriçãoNOT NULLe 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-east1só pode ser exportado para uma instância do AlloyDB emus-east1.Exportações multirregionais:
- Os conjuntos de dados na multirregião
USsó podem ser exportados para uma instância do AlloyDB localizada na regiãous-central1. - Os conjuntos de dados na multirregião
EUsó podem ser exportados para uma instância do AlloyDB localizada na regiãoeurope-west4.
- Os conjuntos de dados na multirregião
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.