Importar dados do BigQuery e do Iceberg para o AlloyDB para PostgreSQL

Nesta página, descrevemos como usar as visualizações do BigQuery para AlloyDB a fim de importar dados do BigQuery, incluindo tabelas nativas, tabelas externas do BigLake e tabelas gerenciadas do Apache Iceberg. O Iceberg é um formato de tabela aberta para gerenciar e trocar dados.

Nesta página, presumimos que você tenha um cluster e uma instância principal do AlloyDB, além de um conjunto de dados e tabelas do BigQuery. Para mais informações, consulte Criar conjuntos de dados e Criar e usar tabelas.

Antes de começar

  1. Solicite acesso ao recurso BigQueryViews para seu cluster e aguarde até receber a confirmação de ativação antes de seguir as instruções nesta página.
  2. Conheça os tipos de dados e mapeamentos de colunas do BigQuery compatíveis.
  3. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Enable the AlloyDB, Compute Engine, Resource Manager, and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. Enable the AlloyDB, Compute Engine, Resource Manager, and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  10. Ative as APIs do Cloud necessárias para criar e se conectar ao AlloyDB para PostgreSQL.

    Ativar as APIs

  11. Na etapa Confirmar projeto, clique em Próxima para confirmar o nome do projeto em que você vai fazer mudanças.

  12. Na etapa Ativar APIs, clique em Ativar para ativar o seguinte:

    • API AlloyDB
    • API Compute Engine
    • API Cloud Resource Manager
    • API Service Networking
    • API BigQuery Storage

    A API Service Networking é necessária se você planeja configurar a conectividade de rede com o AlloyDB usando uma rede VPC que reside no mesmo projeto Google Cloud do AlloyDB.

    As APIs Compute Engine e Cloud Resource Manager são necessárias se você planeja configurar a conectividade de rede com o AlloyDB usando uma rede VPC que reside em um projeto Google Cloud diferente.

Funções exigidas

Para conceder acesso de leitura ao conjunto de dados do BigQuery à conta de serviço do cluster do AlloyDB, você precisa das seguintes permissões:

  • Leitor de dados do BigQuery (roles/bigquery.dataViewer) ou qualquer papel personalizado com permissões bigquery.tables.get e bigquery.tables.getData. Quando concedida em uma tabela ou visualização, essa função fornece permissões para ler dados e metadados da tabela ou visualização.
  • Usuário de sessão de leitura do BigQuery (roles/bigquery.readSessionUser) ou qualquer papel personalizado com permissões bigquery.readsessions.create e bigquery.readsessions.getData. Permite criar e usar sessões de leitura.

Conceder acesso do AlloyDB ao conjunto de dados do BigQuery

Depois que o recurso de visualizações do BigQuery for ativado no cluster do AlloyDB, conceda à conta de serviço do cluster do AlloyDB acesso ao conjunto de dados do BigQuery.

Para usar a CLI gcloud, instale e inicialize a Google Cloud CLI ou use o Cloud Shell.

  1. Abra a CLI gcloud. Se você não tiver a CLI gcloud instalada, instale e inicialize a CLI gcloud ou use o Cloud Shell.

  2. Execute o comando gcloud beta alloydb clusters describe:

    gcloud beta alloydb clusters describe CLUSTER --region=REGION

    Substitua:

    • CLUSTER: o ID do cluster do AlloyDB.
    • REGION: o local do cluster do AlloyDB. Por exemplo, asia-east1, us-east1. Confira a lista completa de regiões em Locais do AlloyDB.

    A saída contém um campo serviceAccountEmail, que é a conta de serviço deste cluster.

  3. Conceder as permissões necessárias. Para mais informações, consulte Controlar o acesso a recursos com o IAM.

    Se a conta de serviço do cluster não tiver as permissões necessárias, os seguintes erros vão aparecer quando uma consulta for executada na tabela do BigQuery:

    • The user does not have bigquery.readsessions.create permissions
    • Permission bigquery.tables.get denied on table
    • Permission bigquery.tables.getData denied on table

Configurar a extensão

  1. Crie a extensão.

    1. Conecte-se à instância do AlloyDB usando o cliente psql seguindo as instruções em Conectar um cliente psql a uma instância. Ou use o AlloyDB Studio. Para mais informações, consulte Gerenciar seus dados usando o console do Google Cloud .
    2. Execute este comando:

      CREATE EXTENSION bigquery_fdw;
      
  2. Crie um servidor externo para definir os parâmetros de conexão do conjunto de dados remoto do BigQuery.

    CREATE SERVER BIGQUERY_SERVER_NAME FOREIGN DATA WRAPPER bigquery_fdw;
    

    Substitua:

    • BIGQUERY_SERVER_NAME: identificador exclusivo do servidor externo. Defina isso uma vez em um determinado banco de dados. Você pode substituir BIGQUERY_SERVER_NAME pelo nome do seu servidor.
  3. Crie o mapeamento de usuário executando o comando CREATE USER MAPPING, que especifica as credenciais a serem usadas ao se conectar ao servidor externo.

    CREATE USER MAPPING FOR USERNAME SERVER BIGQUERY_SERVER_NAME ;
    

    Substitua:

    • USERNAME: um nome de usuário do banco de dados ou um usuário do IAM que acessa a tabela externa.
    • BIGQUERY_SERVER_NAME: identificador exclusivo do servidor externo que você criou.
  4. Defina tabelas externas que correspondam às tabelas que você quer acessar no BigQuery usando o comando CREATE FOREIGN TABLE. Esse comando permite definir a estrutura de uma tabela remota. A tabela externa pode ter todas ou um subconjunto das colunas na tabela de origem do BigQuery.

    CREATE FOREIGN TABLE TABLENAME (
    COLUMNX_NAME DATA_TYPE,
    COLUMNX_NAME DATA_TYPE,
    ...
    ) SERVER  BIGQUERY_SERVER_NAME OPTIONS (project BIGQUERY_PROJECT_ID, dataset  BIGQUERY_DATASET_NAME, table  BIGQUERY_TABLE_NAME);
    

    Substitua:

    • TABLENAME: nome da tabela externa no banco de dados local.
    • COLUMNX_NAME: o nome da coluna precisa corresponder ao nome da coluna na fonte do BigQuery.
    • DATA_TYPE: o tipo de dados da coluna.
    • BIGQUERY_SERVER_NAME: identificador exclusivo do servidor externo que você criou.
    • BIGQUERY_PROJECT_ID: ID do projeto em que o conjunto de dados do BigQuery está localizado.
    • BIGQUERY_DATASET_NAME: nome do conjunto de dados do BigQuery para a tabela.
    • BIGQUERY_TABLE_NAME: nome da tabela do BigQuery.

    Depois que a tabela externa é criada, você pode consultá-la da mesma forma que consulta qualquer tabela no AlloyDB.

Importar dados

Para importar dados do BigQuery ou do BigLake Iceberg para o AlloyDB, siga estas etapas:

  1. Identifique uma fonte de dados ou crie uma tabela nativa do BigQuery ou tabelas gerenciadas do Iceberg.

  2. Use psql para criar local_table executando o seguinte comando:

    CREATE TABLE local_table AS (SELECT * from foreign_table);
    

    Esse comando cria uma cópia da tabela do BigQuery em uma tabela local e nativa do AlloyDB.
    Dependendo do fluxo de trabalho do aplicativo, é possível configurar a extensão pg_cron do PostgreSQL para atualizar a tabela do AlloyDB em intervalos periódicos.

Configurar uma programação para importar dados para o AlloyDB

Para configurar uma programação de importação de dados do BigQuery ou do BigLake Iceberg para o AlloyDB, siga estas etapas:

  1. Configure a extensão bigquery_fdw.
  2. Ative a extensão pg_cron na instância do AlloyDB. Para mais informações, consulte Extensões de banco de dados compatíveis.
    1. Defina a flag alloydb.enable_pg_cron como on. Para mais informações, consulte alloydb.enable_pg_cron.
    2. Defina a flag cron.database_name como o nome do banco de dados em que você instalou a extensão bigquery_fdw e em que quer executar as consultas SQL para importação. Para mais informações, consulte Sinalizações de banco de dados compatíveis.
  3. Para atualizar periodicamente uma cópia local da tabela externa, execute os comandos a seguir no banco de dados em que você instalou a extensão bigquery_fdw:

    CREATE EXTENSION pg_cron;
    SELECT cron.schedule(JOB_NAME, SCHEDULE, 'CREATE TABLE IF NOT EXISTS local_table_copy AS (SELECT * FROM foreign_table); DROP TABLE IF EXISTS local_table; ALTER TABLE local_table_copy RENAME TO local_table;');
    

    Substitua:

    • JOB_NAME: o nome do job.
    • SCHEDULE: a programação do job.

    Para mais informações, consulte O que é pg_cron?.

A seguir