Catégories :

Chargement et déchargement des données DDL

CREATE PIPE

Crée un canal dans le système pour définir l’instruction COPY INTO <table> utilisée par Snowpipe pour charger les données d’une file d’attente d’acquisition dans des tables.

Voir aussi :

ALTER PIPE , DESCRIBE PIPE , DROP PIPE , SHOW PIPES

Syntaxe

CREATE [ OR REPLACE ] PIPE [ IF NOT EXISTS ] <name>
  [ AUTO_INGEST = [ TRUE | FALSE ] ]
  [ AWS_SNS_TOPIC = <string> ]
  [ INTEGRATION = '<string>' ]
  [ COMMENT = '<string_literal>' ]
  AS <copy_statement>

Paramètres requis

nom

Identificateur du canal ; doit être unique pour le schéma dans lequel le canal est créé.

L’identificateur doit commencer par un caractère alphabétique et ne peut pas contenir d’espaces ou de caractères spéciaux à moins que toute la chaîne d’identificateur soit délimitée par des guillemets doubles (p. ex. "My object"). Les identificateurs entre guillemets doubles sont également sensibles à la casse.

Pour plus de détails, voir Exigences relatives à l’identificateur.

instruction_copie

Instruction COPY INTO <table> utilisée pour charger des données à partir de fichiers en file d’attente dans une table Snowflake. Cette instruction sert de texte/définition pour le canal, et elle est affichée dans la sortie SHOW PIPES.

Paramètres facultatifs

AUTO_INGEST = TRUE | FALSE

Indique si les fichiers de données de la zone de préparation externe et du chemin facultatif spécifiés doivent être chargés automatiquement lorsque des notifications d’événements sont reçues d’un service de messagerie configuré.

  • TRUE active le chargement automatique des données.

    Snowpipe prend en charge le chargement à partir de zones de préparation externes (Amazon S3, Google Cloud Storage ou Microsoft Azure).

  • FALSE désactive le chargement automatique des données. Vous devez appeler les points de terminaison REST API Snowpipe pour charger des fichiers de données.

    Snowpipe prend en charge le chargement depuis des zones de préparation internes (c’est-à-dire les zones de préparation nommées ou de table Snowflake mais pas les zones de préparation utilisateur) ou externes (Amazon S3, Google Cloud Storage ou Microsoft Azure).

AWS_SNS_TOPIC = chaîne

Obligatoire uniquement lors de la configuration de AUTO_INGEST pour les zones de préparation Amazon S3 à l’aide d’Amazon Simple Notification Service (SNS). Spécifie le nom Amazon Resource Name (ARN) pour la rubrique SNS de votre compartiment S3. L’instruction CREATE PIPE souscrit la file d’attente Amazon Simple Queue Service (SQS) au sujet SNS spécifié. Le canal copie les fichiers dans la file d’attente d’intégration déclenchée par des notifications d’événement via le sujet SNS. Pour plus d’informations, voir Automatisation de Snowpipe pour Amazon S3.

INTEGRATION = 'chaîne'

Requis uniquement lors de la configuration de AUTO_INGEST pour les zones de préparation Google Cloud Storage ou Microsoft Azure. Spécifie l’intégration de notification existante utilisée pour accéder à une file d’attente de stockage. Pour plus d’informations, voir :

Le nom de l’intégration doit être saisi en majuscules.

COMMENT = 'litéral_chaine'

Spécifie un commentaire pour la barre verticale.

Par défaut : aucune valeur

Notes sur l’utilisation

  • Toutes les options de copie COPY INTO <table> sont prises en charge à l’exception des suivantes :

    • FILES = ( 'nom_fichier1' [ , 'nom_fichier2', ... ] )

    • ON_ERROR = ABORT_STATEMENT

    • SIZE_LIMIT = nb

    • PURGE = TRUE | FALSE (c.-à-d. purge automatique pendant le chargement)

    • MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE

    • FORCE = TRUE | FALSE

      Notez que vous pouvez supprimer manuellement les fichiers d’une zone de préparation interne (par exemple, Snowflake) (après leur chargement) à l’aide de la commande REMOVE.

    • RETURN_FAILED_ONLY = TRUE | FALSE

    • VALIDATION_MODE = RETURN_n_ROWS | RETURN_ERRORS | RETURN_ALL_ERRORS

  • La prise en charge de l’option de copie PATTERN = 'regex_pattern' est fournie en tant que fonctionnalité d’avant-première. L’option de copie filtre l’ensemble de fichiers à charger à l’aide d’une expression régulière. La correspondance de modèle se comporte comme suit en fonction de la valeur du paramètre AUTO_INGEST :

    • AUTO_INGEST = TRUE : l’expression régulière filtre la liste des fichiers dans la zone de préparation et le chemin facultatif (c’est-à-dire l’emplacement de stockage sur le Cloud) dans l’instruction COPY INTO <table>.

    • :AUTO_INGEST = FALSE : l’expression régulière filtre la liste des fichiers soumis lors des appels au point de terminaison Snowpipe API REST insertFiles.

  • L’utilisation d’une requête comme source de l’instruction COPY pour la réorganisation des colonnes, l’omission de colonnes et les conversions (c’est-à-dire la transformation des données pendant un chargement) est disponible. Pour des exemples d’utilisation, voir Transformation des données pendant un chargement. Notez que seules les instructions simples SELECT sont prises en charge. Le filtrage à l’aide d’une clause WHERE n’est pas pris en charge.

  • Les définitions de barres verticales ne sont pas dynamiques (autrement dit, une barre verticale n’est pas automatiquement mise à jour si la zone de préparation ou la table sous-jacente change, en cas de destruction ou de changement de nom, par exemple). En revanche, vous devez créer un nouveau canal et le soumettre dans de futurs appels d’API REST de Snowpipe.

Important

Lors de la recréation d’un canal qui automatise les chargements de données à l’aide de notifications d’événements, nous vous recommandons d’effectuer les étapes suivantes :

  1. Mettez en pause le canal (à l’aide de ALTER PIPE … SET PIPE_EXECUTION_PAUSED = true). Attendez que tous les fichiers actuellement en file d’attente soient chargés dans la table cible.

  2. Interrogez la fonction SYSTEM$PIPE_STATUS et vérifiez que l’état d’exécution du canal est PAUSED et que le nombre de fichiers en attente est de 0.

  3. Recréez le canal (en utilisant CREATE OR REPLACE PIPE).

  4. Mettez à nouveau le canal en pause.

  5. Passez en revue les étapes de configuration de votre service de messagerie Cloud pour vous assurer que les paramètres sont toujours exacts :

  6. Reprenez le canal (en utilisant ALTER PIPE … SET PIPE_EXECUTION_PAUSED = false).

  7. Interrogez à nouveau la fonction SYSTEM$PIPE_STATUS et vérifiez que l’état d’exécution du canal est RUNNING.

Exemples

Créer un canal dans le schéma actuel qui charge toutes les données des fichiers mis dans la zone de préparation mystage dans mytable :

create pipe mypipe as copy into mytable from @mystage;

Comme dans l’exemple précédent, mais avec une transformation de données. Charger uniquement les données des 4e et 5e colonnes dans les fichiers mis en zone de préparation, dans l’ordre inverse :

create pipe mypipe2 as copy into mytable(C1, C2) from (select $5, $4 from @mystage);

Créer un canal dans le schéma actuel pour le chargement automatique de données à l’aide de notifications d’événements reçues d’un service de messagerie :

Amazon S3

create pipe mypipe_s3
  auto_ingest = true
  aws_sns_topic = 'arn:aws:sns:us-west-2:001234567890:s3_mybucket'
  as
  copy into snowpipe_db.public.mytable
  from @snowpipe_db.public.mystage
  file_format = (type = 'JSON');

Google Cloud Storage

create pipe mypipe_gcs
  auto_ingest = true
  integration = 'MYINT'
  as
  copy into snowpipe_db.public.mytable
  from @snowpipe_db.public.mystage
  file_format = (type = 'JSON');

Microsoft Azure

create pipe mypipe_azure
  auto_ingest = true
  integration = 'MYINT'
  as
  copy into snowpipe_db.public.mytable
  from @snowpipe_db.public.mystage
  file_format = (type = 'JSON');