Catégories :

Fonctions de métrique des données

REFERENTIAL_INTEGRITY_COUNT (fonction de métrique des données système)

Renvoie le nombre de lignes de la table source pour lesquelles la valeur de la colonne ne correspond pas à la table référencée. Ces lignes sans correspondance sont connues sous le nom de lignes orphelines et représentent des violations de l’intégrité référentielle.

Si vous spécifiez plus d’un argument de colonne, renvoie le nombre de lignes pour lesquelles la combinaison des colonnes sources spécifiées ne correspond à aucune ligne de la table référencée, en fonction des colonnes de référence correspondantes.

Syntaxe

SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT ON ( <column>, TABLE(<ref_table>(<ref_column>)) )

Pour les clés composées (multicolonnes) :

SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT ON (
  <column1>, <column2>, ...,
  TABLE(<ref_table>(<ref_column1>, <ref_column2>, ...))
)

Arguments

column

Indique une ou plusieurs colonnes de la table source dont les valeurs sont vérifiées pour l’intégrité référentielle par rapport à la table référencée. Lorsque plusieurs colonnes sources sont spécifiées, elles forment une clé composée.

TABLE(ref_table(ref_column))

Spécifie la table référencée (parent) et la ou les colonne(s) à utiliser pour la validation, en utilisant la syntaxe TABLE(...) :

  • ref_table — Nom complet de la table référencée (par exemple,``my_db.my_schema.my_table``).

  • ref_column — Une ou plusieurs colonnes de la table référencée qui correspondent aux colonnes sources.

Le nombre et l’ordre des colonnes sources doivent correspondre au nombre et à l’ordre des colonnes de référence.

Types de données autorisés

Les colonnes spécifiées dans les arguments column et ref_column peuvent contenir l’un des types de données suivants :

  • DATE

  • FLOAT

  • NUMBER

  • TIMESTAMP_LTZ

  • TIMESTAMP_NTZ

  • TIMESTAMP_TZ

  • VARCHAR

Renvoie

La fonction renvoie une valeur NUMBER.

  • Une valeur de retour 0 signifie que chaque ligne de la table source a une correspondance dans la table référencée. L’intégrité référentielle est entièrement satisfaite.

  • Une valeur de retour de N > 0 signifie qu’il y a N lignes de la table source qui n’ont pas de ligne correspondante dans la table référencée. Ces N lignes sont considérées comme orphelines.

Notes sur l’utilisation

  • Vous ne pouvez pas appeler cette fonction directement. Pour savoir comment associer la fonction à une table ou à une vue afin qu’elle s’exécute à intervalles réguliers, voir Associer une DMF. Vous pouvez utiliser la fonction SYSTEM$DATA_METRIC_SCAN pour exécuter la fonction REFERENTIAL_INTEGRITY_COUNT avec une table sans l’associer.

  • Les valeurs NULL de la colonne source ne sont pas comptabilisées comme des violations. Les lignes où la valeur de la colonne source est NULL sont exclues du contrôle d’intégrité référentielle. Cela suit la sémantique standard des contraintes de clé étrangère (FK), selon laquelle une clé étrangère NULL est considérée comme valide. Si vous devez surveiller les valeurs NULL dans la colonne source, utilisez la DMF NULL_COUNT en complément de cette fonction.

  • Le nombre et l’ordre des colonnes sources doivent correspondre aux colonnes de référence. Ceci est validé lorsque vous associez la fonction.

  • Renommer une colonne spécifiée dans la fonction REFERENTIAL_INTEGRITY_COUNT rompt l’association entre la fonction et la table ou la vue de la colonne. Si vous renommez la colonne, vous devez réassocier la fonction à la table ou à la vue.

  • Vous ne pouvez pas associer cette fonction à la même combinaison colonne/table de référence plus d’une fois.

Exemples

Contrôle d’intégrité référentielle à une seule colonne

Associez la fonction à la table salesorders, de sorte qu’elle renvoie le nombre de lignes où sp_id n’existe pas dans la colonne sp_id de la table salespeople :

ALTER TABLE salesorders
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (sp_id, TABLE(my_db.sch1.salespeople(sp_id)));

Contrôle de l’intégrité référentielle de la clé composée

Associez la fonction à la table order_items, de sorte qu’elle renvoie le nombre de lignes où la combinaison de order_id et product_id n’a pas de ligne correspondante dans la table order_products :

ALTER TABLE order_items
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (order_id, product_id, TABLE(my_db.sch1.order_products(order_id, product_id)));

Supprimer l’association

Supprimez le contrôle d’intégrité référentielle de la table salesorders :

ALTER TABLE salesorders
  DROP DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (sp_id, TABLE(my_db.sch1.salespeople(sp_id)));

Associer à une attente

Associez la fonction et définissez une attente selon laquelle l’intégrité référentielle doit être entièrement satisfaite (zéro ligne orpheline) :

ALTER TABLE salesorders
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (sp_id, TABLE(my_db.sch1.salespeople(sp_id)))
    EXPECTATION no_orphans (VALUE = 0);

Ajouter une attente à une association existante

Si la DMF est déjà associée ; ajoutez une attente en utilisant MODIFY :

ALTER TABLE salesorders
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (sp_id, TABLE(my_db.sch1.salespeople(sp_id)))
    ADD EXPECTATION no_orphans (VALUE = 0);