CREATE SEMANTIC VIEW¶
Crée une nouvelle vue sémantique dans le schéma actuel/spécifié.
La vue sémantique doit être conforme à ces règles de validation.
- Voir aussi ::
ALTER SEMANTIC VIEW , DESCRIBE SEMANTIC VIEW , DROP SEMANTIC VIEW , SHOW SEMANTIC VIEWS , SHOW SEMANTIC DIMENSIONS , SHOW SEMANTIC METRICS , SHOW SEMANTIC DIMENSIONS FOR METRIC , SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML
Syntaxe¶
CREATE [ OR REPLACE ] SEMANTIC VIEW [ IF NOT EXISTS ] <name>
TABLES ( logicalTable [ , ... ] )
[ RELATIONSHIPS ( relationshipDef [ , ... ] ) ]
[ FACTS ( semanticExpression [ , ... ] ) ]
[ DIMENSIONS ( semanticExpression [ , ... ] ) ]
[ METRICS ( semanticExpression [ , ... ] ) ]
[ COMMENT = '<comment_about_semantic_view>' ]
[ COPY GRANTS ]
où :
Les paramètres pour les tables logiques sont :
logicalTable ::= [ <table_alias> AS ] <table_name> [ PRIMARY KEY ( <primary_key_column_name> [ , ... ] ) ] [ UNIQUE ( <unique_column_name> [ , ... ] ) [ ... ] ] [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ] [ COMMENT = '<comment_about_table>' ]
Les paramètres pour les relations sont :
relationshipDef ::= [ <relationship_identifier> AS ] <table_alias> ( <column_name> [ , ... ] ) REFERENCES <ref_table_alias> [ ( <ref_column_name> [ , ... ] ) ]
Les paramètres pour les expressions dans les définitions des dimensions sont :
semanticExpression ::= [ PUBLIC ] <table_alias>.<dimension> AS <sql_expr> [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ] [ COMMENT = '<comment_about_the_dimension>' ]
Les paramètres pour les expressions dans les définitions des faits et des métriques sont :
semanticExpression ::= [ { PRIVATE | PUBLIC } ] <table_alias>.<fact_or_metric> AS <sql_expr> [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ] [ COMMENT = '<comment_about_the_fact_or_metric>' ]
Vous pouvez définir une métrique qui utilise une fonction de fenêtre (une métrique de fonction de fenêtre) en utilisant la syntaxe suivante :
windowFunctionMetricDefinition ::= <window_function>( <metric> ) OVER ( [ PARTITION BY { <exprs_using_dimensions_or_metrics> | EXCLUDING <dimensions> } ] [ ORDER BY <exprs_using_dimensions_or_metrics> [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ] [ <windowFrameClause> ] )
Pour plus d’informations sur cette syntaxe, voir Paramètres pour les métriques de la fonction de fenêtre.
Note
L’ordre des clauses est important. Par exemple, vous devez spécifier la clause FACTS avant la clause DIMENSIONS.
Vous pouvez faire référence à des expressions sémantiques définies dans des clauses ultérieures. Par exemple, même si fact_2
est défini après fact_1
, vous pouvez toujours utiliser fact_2
dans la définition de fact_1
.
Paramètres requis¶
name
Spécifie le nom de la vue sémantique ; le nom doit être unique pour le schéma dans lequel la table est créée.
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.
Paramètres facultatifs¶
COMMENT = 'comment_about_semantic_view'
Spécifie un commentaire sur la vue sémantique.
COPY GRANTS
Lorsque vous spécifiez OR REPLACE pour remplacer une vue sémantique existante par une nouvelle vue sémantique, vous pouvez définir ce paramètre pour copier tous les privilèges accordés à la vue sémantique existante dans la nouvelle vue sémantique.
La commande copie tous les privilèges accordés à l’exception de OWNERSHIP, de la vue sémantique existante vers la nouvelle vue sémantique. Le rôle qui exécute l’instruction CREATE SEMANTIC VIEW est propriétaire de la nouvelle vue.
La nouvelle vue sémantique n’hérite pas des attributions futures définies pour le type d’objet dans le schéma.
L’opération de copie des attributions s’effectue de manière atomique avec l’instruction CREATE SEMANTIC VIEW (en d’autres termes, au sein de la même transaction).
Si vous omettez COPY GRANTS, la nouvelle vue sémantique n’hérite pas des privilèges d’accès explicites accordés à la vue sémantique existante, mais hérite des futures attributions définies pour le type d’objet dans le schéma.
Paramètres pour les tables logiques¶
Ces paramètres font partie de la syntaxe pour les tables logiques :
table_alias AS
Spécifie un alias facultatif pour la table logique.
Si vous spécifiez un alias, vous devez utiliser cet alias lorsque vous référencez la table logique dans les relations, les faits, les dimensions et les métriques.
Si vous ne spécifiez pas d’alias, vous utilisez le nom non qualifié de la table logique pour faire référence à la table.
table_name
Spécifie le nom de la table logique.
PRIMARY KEY ( primary_key_column_name [ , ... ] )
Spécifie les noms d’une ou plusieurs colonnes de la table logique qui servent de clé primaire à la table.
UNIQUE ( unique_column_name [ , ... ] )
Spécifie le nom d’une colonne contenant une valeur unique ou les noms des colonnes qui contiennent des combinaisons uniques de valeurs.
Par exemple, si la colonne
service_id
contient des valeurs uniques, spécifiez :TABLES( ... product_table UNIQUE (service_id)
Si la combinaison des valeurs des colonnes
product_area_id
etproduct_id
est unique, indiquez-le :TABLES( ... product_table UNIQUE (product_area_id, product_id) ...
Vous pouvez identifier plusieurs colonnes et plusieurs combinaisons de colonnes comme étant uniques dans une table logique donnée :
TABLES( ... product_table UNIQUE (product_area_id, product_id) UNIQUE (service_id) ...
Note
Si vous avez déjà identifié une colonne comme étant une colonne de clé primaire (en utilisant PRIMARY KEY), n’ajoutez pas la clause UNIQUE pour cette colonne.
WITH SYNONYMS [ = ] ( 'synonym' [ , ... ] )
Spécifie un ou plusieurs synonymes pour la table logique. Contrairement aux alias, les synonymes sont utilisés à des fins d’information uniquement. Vous n’utilisez pas de synonymes pour faire référence à la table logique dans les relations, les dimensions, les métriques et les faits.
COMMENT = 'comment_about_table'
Spécifie un commentaire sur la table logique.
Paramètres pour les relations¶
Ces paramètres font partie de la syntaxe pour les relations :
relationship_identifier AS
Spécifie un identificateur facultatif pour la relation.
table_alias ( column_name [ , ... ] )
Spécifie une des tables logiques et une ou plusieurs de ses colonnes qui font référence à des colonnes d’une autre table logique.
ref_table_alias [ ( ref_column_name [ , ... ] ) ]
Spécifie l’autre table logique et une ou plusieurs de ses colonnes qui sont référencées par la première table logique.
Les colonnes doivent être identifiées comme étant de type PRIMARY KEY ou UNIQUE dans la définition de la table logique.
Paramètres pour les faits, les dimensions et les métriques¶
Dans une vue sémantique, vous devez définir au moins une dimension ou une métrique, ce qui signifie que vous devez spécifier au moins une clause DIMENSIONS ou METRICS.
Ces paramètres font partie de la syntaxe pour définir un fait, une dimension ou une métrique :
{ PRIVATE | PUBLIC }
Indique si un fait ou une métrique est privé ou publique. Les faits et les métriques marqués comme privés ne peuvent pas être interrogés ou utilisés dans une condition de requête.
Note
Vous ne pouvez pas marquer une dimension comme privée. Les dimensions sont toujours publiques. Pour une dimension, l’effet est le même que vous spécifiez ou omettiez PUBLIC.
Si vous omettez PRIVATE et PUBLIC, la dimension, le fait ou la métrique est public par défaut.
table_alias.semantic_expression_name AS sql_expr
Spécifie un nom pour une dimension, un fait ou une métrique et l’expression SQL pour calculer cette dimension, ce fait ou cette métrique.
Voir Comment Snowflake valide les vues sémantiques pour les règles de définition d’une vue sémantique valide.
WITH SYNONYMS [ = ] ( 'synonym' [ , ... ] )
Spécifie un ou plusieurs synonymes facultatifs pour la dimension, le fait ou la métrique. Notez que les synonymes ne sont utilisés qu’à titre d’information. Vous ne pouvez pas utiliser un synonyme pour faire référence à une dimension, un fait ou une métrique dans une autre dimension, un autre fait ou une autre métrique.
COMMENT = 'comment_about_dim_fact_or_metric'
Spécifie un commentaire facultatif sur la dimension, le fait ou la métrique.
Paramètres pour les métriques de la fonction de fenêtre¶
Ces paramètres font partie de la syntaxe pour définir les métriques de la fonction de fenêtre :
metric
Spécifie une expression de métrique pour cette fonction de fenêtre. Vous pouvez spécifier une métrique ou toute expression de métrique valide que vous pouvez utiliser pour définir une métrique dans cette entité.
PARTITION BY ...
Groupe les lignes en partitions. Vous pouvez effectuer la partition selon un ensemble spécifique d’expressions, ou selon toutes les dimensions (sauf les dimensions sélectionnées) spécifiées dans la requête :
PARTITION BY exprs_using_dimensions_or_metrics
Groupe des lignes en partitions par expressions SQL. Dans l’expression SQL :
Toutes les dimensions de l’expression doivent être accessibles à partir de la même entité que celle qui définit la métrique de la fonction de fenêtre.
Toutes les métriques doivent appartenir à la même table dans laquelle cette métrique est définie.
Vous ne pouvez pas spécifier d’agrégats, de fonctions de fenêtre ou de sous-requêtes.
PARTITION BY EXCLUDING dimensions
Groupe les lignes en partitions selon toutes les dimensions spécifiées dans la clause SEMANTIC_VIEW de la requête, à l’exception des dimensions spécifiées par
dimensions
.Les
dimensions
doivent uniquement faire référence à des dimensions accessibles depuis l’entité qui définit la métrique de la fonction de fenêtre.Par exemple, supposons que vous excluez la dimension
table_1.dimension_1
du partitionnement :CREATE SEMANTIC VIEW sv ... METRICS ( table_1.metric_2 AS SUM(table_1.metric_1) OVER (PARTITION BY EXCLUDING table_l.dimension_1 ORDER BY table_1.dimension_2) ) ...
Supposons que vous exécutiez une requête qui spécifie la dimension
table_1.dimension_1
:SELECT * FROM SEMANTIC VIEW( sv METRICS ( table_1.metric_2 ) DIMENSIONS ( table_1.dimension_1, table_1.dimension_2, table_1.dimension_3 );
Dans la requête, la métrique
table_1.metric_2
est évaluée comme suit :SUM(table_1.metric_1) OVER ( PARTITION BY table_1.dimension_2, table_1.dimension_3 ORDER BY table_1.dimension_2 )
Remarquez comment
table_1.dimension_1
est exclu de la clause PARTITION BY.Note
Vous ne pouvez pas utiliser EXCLUDING en dehors des définitions de métriques dans les vues sémantiques. EXCLUDING n’est pas pris en charge dans les appels de fonctions de fenêtre dans un autre contexte.
ORDER BY exprs_using_dimensions_or_metrics [ ASC | DESC ] [ NULLS FIRST | LAST ] [, ... ]
Ordonne les lignes dans chaque partition. Dans l’expression SQL :
Toutes les dimensions de l’expression doivent être accessibles à partir de la même entité que celle qui définit la métrique de la fonction de fenêtre.
Toutes les métriques doivent appartenir à la même table dans laquelle cette métrique est définie.
Vous ne pouvez pas spécifier d’agrégats, de fonctions de fenêtre ou de sous-requêtes.
windowFrameClause
Pour plus d’informations sur les paramètres des fonctions de fenêtre et des exemples, voir Définition et requête des métriques des fonctions de fenêtre.
Exigences en matière de contrôle d’accès¶
Un rôle utilisé pour exécuter cette opération doit au minimum disposer des privilèges suivants :
Privilège |
Objet |
Remarques |
---|---|---|
CREATE SEMANTIC VIEW |
Schéma |
Obligatoire pour créer une nouvelle vue sémantique. |
SELECT |
Table, vue |
Exigé pour toutes les tables et/ou vues utilisées dans la définition de la vue sémantique. |
Le privilège USAGE relatif à la base de données et au schéma parents est exigé pour effectuer des opérations sur tout objet d’un schéma.
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¶
La vue sémantique doit être valide et doit respecter les règles décrites dans Comment Snowflake valide les vues sémantiques.
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.
Les instructions CREATE OR REPLACE <objet> sont atomiques. En d’autres termes, lorsqu’un objet est remplacé, l’ancien objet est supprimé et le nouvel objet est créé dans une seule transaction.
Exemples¶
Voir Créer une vue sémantique.