Importer des données BigQuery et Iceberg dans AlloyDB pour PostgreSQL

Cette page explique comment utiliser les vues BigQuery pour AlloyDB afin d'importer des données depuis BigQuery, y compris des tables natives, des tables externes BigLake, et des tables gérées Apache Iceberg. 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. Demandez l'accès à la fonctionnalité Vues BigQuery pour votre cluster et attendez de recevoir la confirmation de l'activation avant de suivre les instructions de cette page.
  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 débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. 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 que 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 permettant de 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é Vues BigQuery 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 ou 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.

  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 toutes les colonnes de la table source dans BigQuery ou un sous-ensemble de celles-ci.

    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);
    

    Remplacez les éléments suivants :

    • TABLENAME : nom de la table externe dans la base de données locale.
    • COLUMNX_NAME: le nom de la colonne doit correspondre au nom de la colonne dans la source BigQuery.
    • 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.

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

Importer des données

Pour importer des données BigQuery ou des données BigLake Iceberg dans 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 PostgreSQL pg_cron pour actualiser la table AlloyDB à intervalles réguliers.

Configurer une planification pour importer des données dans AlloyDB

Pour configurer une planification afin d'importer des données BigQuery ou des données BigLake Iceberg dans 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 l'importation. 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