Configurer une intégration de stockage interne Postgres pour Snowflake Postgres

Une intégration de stockage interne Snowflake Postgres vous permet de lire et d’écrire sur le stockage géré associé à une instance Snowflake Postgres. Cette fonctionnalité permet un déplacement fluide des données entre Snowflake et vos instances Postgres à l’aide d’une zone de préparation externe. Pour la syntaxe SQL complète, voir CREATE STORAGE INTEGRATION (stockage interne Postgres).

Les instances Postgres dans Snowflake sont fournies avec un stockage géré alloué par l’instance Postgres. Bien que les utilisateurs puissent déjà accéder à ce stockage pour lire des fichiers dans des tables Iceberg à l’aide d’une intégration de catalogue Snowflake Postgres, une intégration de stockage fournit un chemin pour écrire des données de Snowflake vers le compartiment géré de Postgres.

Note

Les intégrations de stockage interne Postgres sont actuellement prises en charge sur AWS et Azure 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 stockage doit disposer des privilèges suivants :

    • OWNERSHIP sur l’instance Postgres.

    • CREATE INTEGRATION sur le compte

Considérations

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

  • Prise en charge des fournisseurs Cloud : Cette fonctionnalité prend actuellement en charge AWS et Azure uniquement.

  • Restrictions de zone de préparation : Lors de la création d’une zone de préparation (voir CREATE STAGE) qui utilise une intégration de stockage interne Postgres, les propriétés URL, ENCRYPTION et DIRECTORY de la zone de préparation ne sont pas autorisées.

  • Configuration de chemin : L’intégration ajoute automatiquement un sous-chemin d’accès /files vers l’emplacement de stockage de base extrait de l’instance Postgres.

Créer une intégration de stockage pour le stockage interne Postgres

Pour créer une intégration de stockage pour le stockage interne Postgres, utilisez la commande CREATE STORAGE INTEGRATION (stockage interne Postgres) avec TYPE = POSTGRES_INTERNAL_STORAGE.

Par exemple :

CREATE STORAGE INTEGRATION postgres_internal
  TYPE = POSTGRES_INTERNAL_STORAGE
  POSTGRES_INSTANCE = 'my_pg_instance';

Où :

  • TYPE = POSTGRES_INTERNAL_STORAGE : Spécifie le type d’intégration pour le stockage géré par Postgres. Requis.

  • POSTGRES_INSTANCE = '<instance_name>' : Spécifie le nom de l’instance Snowflake Postgres. Requis.

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

Créer une zone de préparation pour le stockage Postgres

Après avoir créé l’intégration, vous pouvez créer une zone de préparation externe pour interagir avec le stockage. Utilisez la propriété RELATIVE_URL pour spécifier un préfixe de chemin choisi par l’utilisateur sous le stockage géré Postgres auquel cette zone de préparation doit faire référence. Cette valeur est un chemin arbitraire que vous définissez pour organiser les fichiers au sein de l’emplacement de stockage géré.

Par exemple :

CREATE STAGE my_pg_stage
  STORAGE_INTEGRATION = postgres_internal
  RELATIVE_URL = '/test_parquet';

Déplacer des données entre Snowflake et Postgres

Vous pouvez utiliser la commande COPY FILES pour déplacer des données entre les zones de préparation Snowflake et votre stockage géré Postgres. Ces exemples supposent que vous avez déjà créé une zone de préparation Snowflake distincte en plus de la zone de préparation Postgres créée ci-dessus.

Snowflake vers Postgres (écriture)

Pour déplacer des données d’une zone de préparation Snowflake existante vers le stockage géré par Postgres :

COPY FILES
  INTO @<postgres_stage>
  FROM @<source_stage>;

<source_stage> désigne une zone de préparation Snowflake préexistante contenant les fichiers que vous souhaitez déplacer, et <postgres_stage> est la zone de préparation Postgres créée à l’étape précédente.

Du côté Postgres, vous pouvez alors charger les données :

COPY test FROM '@STAGE/test_parquet/data*.parquet';

@STAGE est un espace réservé préconfiguré pour l’emplacement de la zone de préparation du côté de Postgres.

Postgres vers Snowflake (lecture)

Pour déplacer des données écrites par Postgres vers une zone de préparation Snowflake existante :

COPY FILES
  INTO @<destination_stage>
  FROM @<postgres_stage>;

<destination_stage> désigne une zone de préparation Snowflake préexistante dans laquelle vous souhaitez copier les fichiers, et <postgres_stage> est la zone de préparation Postgres créée précédemment.

Contrôle d’accès

Le modèle standard de privilèges d’intégration de stockage Snowflake s’applique :

  • Propriété : Le rôle qui crée l’intégration doit posséder l’instance Postgres associée.

  • Utilisation : Pour utiliser l’intégration afin de créer une zone de préparation, un rôle doit disposer du privilège USAGE sur l’objet d’intégration.

  • **Privilèges de zone de préparation* : Les utilisateurs doivent disposer de privilèges standard (par exemple, READ, WRITE) sur la zone de préparation elle-même pour effectuer des opérations de déplacement de données.

Par exemple, pour accorder à un autre rôle la possibilité de créer des zones de préparation à l’aide de l’intégration de stockage :

GRANT USAGE ON INTEGRATION postgres_internal TO ROLE data_engineer_role;