CREATE DATA METRIC FUNCTION

Crée une nouvelle fonction de métrique des données (DMF) dans le schéma actuel ou spécifié, ou remplace une fonction de métrique des données existante.

Après avoir créé une DMF, appliquez-la à une colonne de table en utilisant une commande ALTER TABLE … ALTER COLUMN ou à une colonne de vue en utilisant la commande ALTER VIEW.

Voir aussi :

Référence des commandes de DMF

Dans ce chapitre :

Syntaxe

CREATE [ OR REPLACE ] DATA METRIC FUNCTION [ IF NOT EXISTS ] <name>
  ( <arg_name> TABLE( <c1> <data_type> [ , ... ] ) )
  RETURNS NUMBER [ [ NOT ] NULL ]
  [ LANGUAGE SQL ]
  [ COMMENT = '<string_literal>' ]
  AS
  '<expression>'
Copy

Paramètres requis

name

Identificateur de la DMF ; doit être unique pour votre schéma.

De plus, 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 (par exemple, "My object"). Les identificateurs entre guillemets doubles sont également sensibles à la casse.

Pour plus d’informations, voir Exigences relatives à l’identificateur.

( arg_name TABLE( c1 data_type [ , ... ] ) )

Signature de la DMF, qui sert d’entrée à l’expression.

Vous devez spécifier :

  • Un seul nom d’argument pour la table, arg_name.

  • Au moins un nom de colonne et son type de données, c1 data_type.

    Vous pouvez éventuellement spécifier des colonnes supplémentaires et leurs types de données. Les colonnes doivent se trouver dans la même table et ne peuvent pas faire référence à une autre table.

RETURNS NUMBER

Le type de données de la sortie de la fonction.

Le type de données ne peut être que NUMBER.

AS expression

Expression SQL qui détermine la sortie de la fonction. L’expression doit être déterministe et renvoyer une valeur scalaire. L’expression peut faire référence à d’autres objets de table, par exemple en utilisant une clause WITH ou une clause WHERE.

Les délimiteurs autour de la expression peuvent être des guillemets simples ou une paire de signes dollar. L’utilisation de $$ comme délimiteur facilite l’écriture d’expressions contenant des guillemets simples.

Si le délimiteur de expression est le caractère de guillemet simple, tous les guillemets simples au sein de expression (par exemple, les littéraux de chaîne) doivent faire l’objet d’un échappement via des guillemets simples.

expression ne prend pas en charge les actions suivantes :

  • Utilisation de la construction JOIN.

  • Utilisation de fonctions non déterministes (par exemple, CURRENT_TIME).

  • Référencement d’un objet dépendant d’une UDF ou d’une UDTF.

  • Renvoi d’une sortie non scalaire.

Paramètres facultatifs

LANGUAGE SQL

Spécifie la langue utilisée pour écrire l’expression.

SQL est la seule langue prise en charge.

COMMENT = 'string_literal'

Un commentaire pour la DMF.

Exigences en matière de contrôle d’accès

Un rôle utilisé pour exécuter cette commande SQL doit avoir les privilèges suivants définis au minimum ainsi :

Privilège

Objet

Remarques

CREATE DATA METRIC FUNCTION

Schéma

Le privilège permet uniquement la création de fonctions de métriques des données dans le schéma.

Si vous souhaitez activer la création de fonctions définies par l’utilisateur, telles que SQL ou les UDFs Java, le rôle doit avoir le privilège CREATE FUNCTION.

Notez que l’exploitation d’un objet dans un schéma requiert également le privilège USAGE sur la base de données et le schéma parents.

Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.

Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.

Notes sur l’utilisation

  • Si vous souhaitez mettre à jour une fonction de métrique des données existante et si vous avez besoin de voir la définition actuelle de la fonction, exécutez la commande DESCRIBE FUNCTION (DMF) ou appelez la fonction GET_DDL.

  • Concernant les métadonnées :

    Attention

    Les clients doivent s’assurer qu’aucune donnée personnelle (autre que pour un objet utilisateur), donnée sensible, donnée à exportation contrôlée ou autre donnée réglementée n’est saisie comme métadonnée lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.

Exemple : Comptage des valeurs non NULL

Créez une DMF qui appelle la fonction COUNT pour renvoyer le nombre total de lignes qui ne contiennent pas de valeurs NULL lors de l’évaluation des trois premières colonnes de la table :

CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.count_positive_numbers(
  arg_t TABLE(
    arg_c1 NUMBER,
    arg_c2 NUMBER,
    arg_c3 NUMBER
  )
)
RETURNS NUMBER
AS
$$
  SELECT
    COUNT(*)
  FROM arg_t
  WHERE
    arg_c1>0
    AND arg_c2>0
    AND arg_c3>0
$$;
Copy

Exemple : Référence à une clé étrangère

Vous pouvez créer une fonction de métrique des données qui fait référence à une autre table que celle à laquelle vous attribuez la DMF. Par exemple, vous pourriez vouloir créer une DMF pour mesurer le nombre de lignes dues à une contrainte de clé étrangère. Comme exemple représentatif, prenons deux tables, salespeople et salesorders, qui ont une colonne commune appelée sp_id désignée comme contrainte de clé étrangère.

Créez une DMF pour identifier le nombre de lignes qui incluent une référence à une clé étrangère. La clause WHERE spécifie la colonne sp_id, qui contient les identificateurs des vendeurs, dans la table salespeople :

CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.foreign_key_sales(
  arg_t TABLE (arg_c INT))
RETURNS NUMBER AS
'SELECT COUNT(*) FROM arg_t
   WHERE arg_c IN (SELECT sp_id FROM salespeople)';
Copy

Appelez manuellement la DMF et spécifiez la colonne sp_id de la table salesorders :

SELECT governance.dmfs.foreign_key_sales(SELECT sp_id FROM salesorders);
Copy

La sortie renvoie le nombre de lignes de la table salesorder pour lesquelles la valeur de la colonne sp_id est le résultat d’une valeur de la colonne sp_id de la table salespeople.