Synchroniser les données BigQuery et Iceberg avec AlloyDB

Cette page explique comment utiliser Lakehouse Federation pour AlloyDB pour PostgreSQL afin de synchroniser les données des tables natives BigQuery, des vues matérialisées, des vues BigQuery, des tables externes BigLake (telles que les tables gérées Apache Iceberg), et des tables externes standards. Iceberg est un format de table ouvert permettant de gérer et d'échanger des données.

Cette page suppose que vous disposez d'un cluster AlloyDB et d'une instance principale, ainsi que d'un ensemble de données et de tables BigQuery. Pour en savoir plus, consultez Créer des ensembles de données et Créer et utiliser des tables.

Avant de commencer

  1. Assurez-vous que l'option bigquery_fdw.enabled est configurée sur l'instance AlloyDB.
  2. Familiarisez-vous avec les types de données BigQuery compatibles et les mappages de colonnes.
  3. Connectez-vous à votre Google Cloud compte. Si vous n'avez jamais utilisé Google Cloud, créez un compte pour évaluer les performances de nos produits dans des scénarios réels. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  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. Activez les APIs Cloud nécessaires pour créer une instance AlloyDB pour PostgreSQL et vous y connecter.

    Activer les API

  11. À l'étape Confirmer le projet, cliquez sur Suivant pour confirmer le nom du projet que vous allez modifier.

  12. À l'étape Activer les API, cliquez sur Activer pour activer les éléments suivants :

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

    L'API Service Networking est requise si vous prévoyez de configurer la connectivité réseau à AlloyDB à l'aide d'un réseau VPC qui réside dans le même Google Cloud projet qu'AlloyDB.

    Les API Compute Engine et API Resource Manager sont requises si vous prévoyez de configurer la connectivité réseau à AlloyDB à l'aide d'un réseau VPC réseau qui réside dans un autre Google Cloud projet.

Rôles requis

Pour accorder un accès en lecture à l'ensemble de données BigQuery au compte de service du cluster AlloyDB, vous avez besoin des autorisations suivantes :

  • Lecteur de données BigQuery (roles/bigquery.dataViewer) ou tout rôle personnalisé avec les autorisations bigquery.tables.get et bigquery.tables.getData. Lorsqu'il est accordé sur une table ou une vue, ce rôle fournit des autorisations pour lire les données et les métadonnées de la table ou de la vue.
  • Utilisateur de sessions de lecture BigQuery (roles/bigquery.readSessionUser) ou tout rôle personnalisé avec les autorisations bigquery.readsessions.create et bigquery.readsessions.getData. Permet de créer et d'utiliser des sessions de lecture.

Accorder à AlloyDB l'accès à l'ensemble de données BigQuery

Une fois la fonctionnalité Lakehouse Federation activée sur votre cluster AlloyDB, accordez au compte de service du cluster AlloyDB l'accès à l'ensemble de données BigQuery.

Pour utiliser la gcloud CLI, vous pouvez installer et initialiser la Google Cloud CLI, ou utiliser Cloud Shell.

  1. Ouvrez la gcloud CLI. Si la gcloud CLI n'est pas installée, installez-la et initialisez-la, ou utilisez Cloud Shell.

  2. Exécutez la gcloud beta alloydb clusters describe commande :

    gcloud beta alloydb clusters describe CLUSTER --region=REGION

    Remplacez les éléments suivants :

    • CLUSTER : ID du cluster AlloyDB.
    • REGION: emplacement du cluster AlloyDB, par exemple, asia-east1, us-east1. Consultez la liste complète des régions dans Gérer les emplacements des instances.

    Le résultat contient un champ serviceAccountEmail, qui correspond au compte de service de ce cluster. Vous pouvez également trouver le compte de service sur la page Détails du cluster.

  3. Accordez les autorisations requises. Pour en savoir plus, consultez Contrôler l'accès aux ressources avec IAM.

    Si le compte de service du cluster ne dispose pas des autorisations requises, les erreurs suivantes s'affichent lorsqu'une requête est exécutée sur la table BigQuery :

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

Configurer l'extension

  1. Créez l'extension.

    1. Connectez-vous à l'instance AlloyDB à l'aide du client psql en suivant les instructions de la section Connecter un client psql à une instance. Vous pouvez également utiliser AlloyDB Studio. Pour en savoir plus, consultez Gérer vos données à l'aide de la Google Cloud console.
    2. Exécutez la commande suivante :

      CREATE EXTENSION bigquery_fdw;
      
  2. Créez un serveur externe pour définir les paramètres de connexion de l'ensemble de données BigQuery distant.

    CREATE SERVER BIGQUERY_SERVER_NAME FOREIGN DATA WRAPPER bigquery_fdw;
    

    Remplacez les éléments suivants :

    • BIGQUERY_SERVER_NAME: identifiant unique du serveur externe. Définissez-le une seule fois dans une base de données donnée. Vous pouvez remplacer BIGQUERY_SERVER_NAME par le nom de votre serveur.
  3. Créez le mappage d'utilisateur en exécutant la commande CREATE USER MAPPING, qui spécifie les identifiants à utiliser lorsque vous vous connectez au serveur externe.

    CREATE USER MAPPING FOR USERNAME SERVER BIGQUERY_SERVER_NAME ;
    

    Remplacez les éléments suivants :

    • USERNAME: nom d'utilisateur de base de données ou utilisateur IAM qui accède à la table externe.
    • BIGQUERY_SERVER_NAME: identifiant unique du serveur externe que vous avez créé.
  4. Définissez les tables externes qui correspondent aux tables auxquelles vous souhaitez accéder dans BigQuery à l'aide de la commande CREATE FOREIGN TABLE. Cette commande vous permet de définir la structure d'une table distante. La table externe peut contenir tout ou partie des colonnes de la table source dans 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 [, mode EXECUTION_MODE]);
    

    Remplacez les éléments suivants :

    • TABLENAME : nom de la table externe dans la base de données locale.
    • COLUMNX_NAME : nom de la colonne AlloyDB. Le nom de la colonne doit correspondre exactement au nom de la colonne correspondante dans la table source BigQuery. X indique que la table peut être créée avec plusieurs colonnes. Le nom doit également correspondre à la casse exacte de la colonne BigQuery. Si le nom de la colonne BigQuery contient des lettres majuscules (par exemple, employeeID), l'identifiant AlloyDB doit être placé entre guillemets doubles (par exemple, "employeeID") pour conserver les lettres mixtes ou majuscules.
    • DATA_TYPE : type de données de la colonne.
    • BIGQUERY_SERVER_NAME: identifiant unique du serveur externe que vous avez créé.
    • BIGQUERY_PROJECT_ID: ID du projet dans lequel réside l'ensemble de données BigQuery.
    • BIGQUERY_DATASET_NAME: nom de l'ensemble de données BigQuery pour la table.
    • BIGQUERY_TABLE_NAME : nom de la table BigQuery.
    • EXECUTION_MODE : facultatif. L'option mode est compatible avec les paramètres suivants :

      • query : utilisez l'API BigQuery pour les requêtes complexes.
      • storage : utilisez l'API BigQuery Storage pour des lectures groupées plus rapides.
      • auto : choisissez automatiquement entre les modes. Il s'agit de l'option par défaut.

      Pour en savoir plus, consultez Modes d'exécution du wrapper de données externes BigQuery.

    Une fois la table externe créée, vous pouvez l'interroger de la même manière que n'importe quelle table dans AlloyDB.

Synchroniser les données

Pour synchroniser les données BigQuery ou les données BigLake Iceberg avec AlloyDB, procédez comme suit :

  1. Identifiez une source de données existante ou créez une table BigQuery native ou de nouvelles tables gérées Iceberg.

  2. Utilisez psql pour créer local_table en exécutant la commande suivante :

    CREATE TABLE local_table AS (SELECT * from foreign_table);
    

    Cette commande crée une copie de la table BigQuery dans une table AlloyDB locale et native.
    En fonction du workflow de votre application, vous pouvez configurer l'extension pg_cron PostgreSQL pour actualiser la table AlloyDB à intervalles réguliers.

Configurer une planification pour synchroniser les données avec AlloyDB

Pour configurer une planification afin de synchroniser les données BigQuery ou les données BigLake Iceberg avec AlloyDB, procédez comme suit :

  1. Configurez l'extension bigquery_fdw.
  2. Activez l'extension pg_cron sur l'instance AlloyDB. Pour en savoir plus, consultez Extensions de base de données compatibles.
    1. Définissez l'option alloydb.enable_pg_cron sur on. Pour en savoir plus, consultez alloydb.enable_pg_cron.
    2. Définissez l'option cron.database_name sur le nom de la base de données dans laquelle vous avez installé l'extension bigquery_fdw et où vous souhaitez exécuter les requêtes SQL pour la synchronisation. Pour en savoir plus, consultez Options de base de données compatibles.
  3. Pour actualiser régulièrement une copie locale de la table externe, exécutez les commandes suivantes dans la base de données où vous avez installé l'extension 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;');
    

    Remplacez les éléments suivants :

    • JOB_NAME : nom du job.
    • SCHEDULE : planification du job.

    Pour en savoir plus, consultez Qu'est-ce que pg_cron ?.

Étape suivante