Configurer une intégration de catalogue pour Snowflake Postgres

Une intégration de catalogue Snowflake Postgres permet d’accéder aux tables Apache Iceberg™ de Snowflake gérées par une instance Snowflake Postgres. Lorsque vous créez une intégration de catalogue pour Snowflake Postgres, Snowflake découvre automatiquement les tables dans vos bases de données Postgres et les rend disponibles en tant que tables Iceberg en lecture seule.

Les intégrations de catalogue Snowflake Postgres utilisent des identifiants distribués pour accéder aux données et métadonnées de vos tables dans le stockage Cloud. Vous n’avez pas besoin de configurer un volume externe ou gérez les identifiants de stockage séparément.

Note

Les intégrations de catalogue Snowflake Postgres sont actuellement prises en charge sur AWS uniquement.

Conditions préalables

  • Un compte Snowflake avec la fonctionnalité Snowflake Postgres activée.

  • Une instance Postgres dans l’état READY. Pour créer une instance Postgres, consultez CREATE POSTGRES INSTANCE.

  • Le rôle qui crée l’intégration de catalogue doit disposer des privilèges suivants :

    • USAGE sur l’instance Postgres.

    • CREATE INTEGRATION sur le compte

Considérations

Tenez compte des éléments suivants lorsque vous utilisez une intégration de catalogue Snowflake Postgres :

  • Les intégrations de catalogue Snowflake Postgres utilisent toujours des identifiants de connexion distribués. Vous devez définir ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS. Le mode EXTERNAL_VOLUME_CREDENTIALS n’est pas pris en charge.

  • Vous n’avez pas besoin de spécifier REST_AUTHENTICATION. Snowflake gère automatiquement l’authentification avec l’instance Postgres.

  • L’actualisation automatique utilise l’interrogation des métadonnées. Les notifications de changement ne sont pas prises en charge.

  • Les tables sont en lecture seule. Les opérations d’écriture dans les tables Iceberg gérées par Postgres ne sont pas prises en charge.

  • Cette fonctionnalité n’est pas prise en charge avec les instances Postgres « burstable ».

  • Cette fonctionnalité est prise en charge sur AWS uniquement.

Créer une intégration de catalogue pour Snowflake Postgres

Pour créer une intégration de catalogue pour Snowflake Postgres, utilisez la commande CREATECATALOG INTEGRATION (Snowflake Postgres).

Par exemple :

CREATE CATALOG INTEGRATION my_postgres_catalog_int
  CATALOG_SOURCE = SNOWFLAKE_POSTGRES
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = 'public'
  REST_CONFIG = (
    POSTGRES_INSTANCE = 'my_pg_instance'
    ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
    CATALOG_NAME = 'my_database'
  )
  ENABLED = TRUE;

Pour une syntaxe complète et une référence de paramètre, voir CREATE CATALOG INTEGRATION (Snowflake Postgres).

Créer une table Iceberg

Après avoir créé l’intégration de catalogue, vous pouvez créer des tables Iceberg qui font référence à des tables dans votre instance Postgres. Lorsque vous créez une table Iceberg avec une intégration de catalogue Snowflake Postgres, vous spécifiez l’intégration de catalogue et le nom de la table tels qu’ils existent dans la base de données Postgres.

Par exemple :

CREATE ICEBERG TABLE my_iceberg_table
  CATALOG = 'my_postgres_catalog_int'
  CATALOG_TABLE_NAME = 'orders'
  AUTO_REFRESH = TRUE;

Où :

  • CATALOG = '<catalog_integration_name>' : Spécifie le nom de votre intégration de catalogue. Requis.

  • CATALOG_TABLE_NAME = '<table_name>' : Spécifie le nom de la table telle qu’elle existe dans la base de données Postgres. Requis.

  • CATALOG_NAMESPACE = '<schema_name>' : (Facultatif) Spécifie le schéma Postgres qui contient la table. La valeur par défaut est CATALOG_NAMESPACE telle que définie sur l’intégration de catalogue.

  • CATALOG_NAME = '<database_name>' : (Facultatif) Spécifie la base de données Postgres qui contient la table. La valeur par défaut est CATALOG_NAME telle que définie sur l’intégration de catalogue.

  • AUTO_REFRESH = TRUE : (Facultatif) Active l’actualisation automatique des métadonnées. Lorsque cette option est activée, Snowflake interroge périodiquement le catalogue pour détecter les modifications de métadonnées et actualise la table automatiquement.

Note

Vous n’avez pas besoin d’indiquer un EXTERNAL_VOLUME lorsque vous créez une table Iceberg avec une intégration de catalogue Snowflake Postgres.

Créer une base de données liée à un catalogue

Au lieu de créer des tables Iceberg individuelles, vous pouvez créer une base de données liée au catalogue qui découvre et synchronise automatiquement les tables de votre base de données Postgres. Une base de données liée au catalogue crée des schémas correspondants et des tables Iceberg dans Snowflake qui restent synchronisées avec votre base de données Postgres.

Par exemple :

CREATE DATABASE my_postgres_db
  LINKED_CATALOG = (
    CATALOG = my_postgres_catalog_int
    ALLOWED_WRITE_OPERATIONS = NONE
  );

Où :

  • CATALOG = <catalog_integration_name> : Spécifie le nom de l’intégration de catalogue Snowflake Postgres. Requis. La base de données liée au catalogue synchronise la base de données Postgres spécifiée par la valeur CATALOG_NAME sur l’intégration de catalogue.

  • ALLOWED_WRITE_OPERATIONS = NONE : Requis pour les bases de données liées au catalogue Snowflake Postgres. Les tables Snowflake Postgres sont en lecture seule.

Une fois la base de données liée au catalogue créée, Snowflake découvre automatiquement les espaces de noms et les tables de la base de données Postgres et crée les schémas et tables Iceberg correspondants. Pour plus d’informations, voir Utiliser une base de données liée à un catalogue pour les tables Apache Iceberg™.

Effectuer des requêtes dans les tables Iceberg.

Après avoir créé une table Iceberg ou une base de données liée à un catalogue, vous pouvez interroger les tables à l’aide d’instructions standard.SQL :

SELECT * FROM my_iceberg_table;

Contrôle d’accès

Le rôle de propriétaire de l’intégration de catalogue doit avoir``USAGE`` sur l’instance Postgres. Snowflake vérifie ce privilège lorsque vous créez l’intégration de catalogue.

Tout rôle disposant du privilège USAGE sur l’intégration du catalogue peuvent créer des tables Iceberg qui font référence à des tables dans l’instance Postgres. Aucun octroi supplémentaire sur l’instance Postgres n’est nécessaire. Le rôle a également besoin des privilèges standard Snowflake pour créer des tables dans la base de données et le schéma cibles.

Par exemple, pour accorder à un autre rôle la possibilité de créer des tables Iceberg à l’aide de l’intégration de catalogue :

GRANT USAGE ON INTEGRATION my_postgres_catalog_int TO ROLE analyst_role;
GRANT USAGE ON DATABASE my_db TO ROLE analyst_role;
GRANT USAGE ON SCHEMA my_db.public TO ROLE analyst_role;
GRANT CREATE ICEBERG TABLE ON SCHEMA my_db.public TO ROLE analyst_role;