Interroger une vue sémantique¶
Privilèges requis pour interroger une vue sémantique¶
Si vous utilisez un rôle qui n’est pas propriétaire de la vue sémantique, vous devez bénéficier du privilège SELECT sur cette vue sémantique pour pouvoir l’interroger.
Note
Comme c’est le cas pour les vues standard, vous n’avez pas besoin du privilège SELECT sur les tables utilisées dans la vue sémantique. Il vous suffit de disposer du privilège SELECT sur la vue sémantique elle-même.
Pour plus d’informations sur l’octroi de privilèges sur les vues sémantiques, voir Octroyer des privilèges sur des vues sémantiques.
Interroger une vue sémantique¶
Pour effectuer une requête sur une vue sémantique, utilisez la clause SEMANTIC_VIEW dans la clause FROM. L’exemple suivant sélectionne la dimension customer_market_segment
et la métrique order_average_value
dans la vue sémantique tpch_analysis
:
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS customer.customer_market_segment
METRICS orders.order_average_value
);
+-------------------------+---------------------+
| CUSTOMER_MARKET_SEGMENT | ORDER_AVERAGE_VALUE |
+-------------------------+---------------------+
| AUTOMOBILE | 142570.25947219 |
| FURNITURE | 142563.63314267 |
| MACHINERY | 142655.91550608 |
| HOUSEHOLD | 141659.94753445 |
| BUILDING | 142425.37987558 |
+-------------------------+---------------------+
Remarques :
Dans la clause SEMANTIC_VIEWS, vous devez spécifier la clause METRICS, la clause DIMENSIONS ou les deux.
Vous ne pouvez pas omettre ces deux clauses dans une clause SEMANTIC_VIEWS.
Spécifiez les clauses METRICS et DIMENSIONS dans l’ordre dans lequel vous souhaitez qu’elles apparaissent dans les résultats.
Si vous souhaitez que les dimensions apparaissent en premier dans les résultats, indiquez DIMENSIONS avant METRICS. Sinon, indiquez d’abord METRICS.
Par exemple, supposons que vous indiquiez la clause METRICS en premier :
SELECT * FROM SEMANTIC_VIEW( tpch_analysis METRICS customer.customer_order_count DIMENSIONS customer.customer_name ) ORDER BY customer_name LIMIT 5;
Dans la sortie, la première colonne est celle de la métrique (
customer_order_count
) et la deuxième colonne est celle de la dimension (customer_name
) :+----------------------+--------------------+ | CUSTOMER_ORDER_COUNT | CUSTOMER_NAME | |----------------------+--------------------| | 6 | Customer#000000001 | | 7 | Customer#000000002 | | 0 | Customer#000000003 | | 20 | Customer#000000004 | | 4 | Customer#000000005 | +----------------------+--------------------+
Inversement, si vous spécifiez d’abord la clause DIMENSIONS :
SELECT * FROM SEMANTIC_VIEW( tpch_analysis DIMENSIONS customer.customer_name METRICS customer.customer_order_count ) ORDER BY customer_name LIMIT 5;
Dans la sortie, la première colonne est celle de la dimension (
customer_name
) et la deuxième colonne est celle de la métrique (customer_order_count
) :+--------------------+----------------------+ | CUSTOMER_NAME | CUSTOMER_ORDER_COUNT | |--------------------+----------------------| | Customer#000000001 | 6 | | Customer#000000002 | 7 | | Customer#000000003 | 0 | | Customer#000000004 | 20 | | Customer#000000005 | 4 | +--------------------+----------------------+
Vous pouvez utiliser la relation définie par une clause SEMANTIC_VIEW dans d’autres constructions SQL, notamment JOIN, PIVOT, UNPIVOT, GROUP BY et les expressions de table communes (CTE).
Les en-têtes des colonnes de sortie utilisent les noms non qualifiés des métriques et des dimensions.
Si plusieurs métriques et dimensions portent le même nom, utilisez un alias de table pour attribuer des noms différents aux en-têtes de colonne. Voir Gestion des noms de colonnes en double dans la sortie.
Exemples¶
Les exemples suivants utilisent la vue tpch_analysis
définie dans Exemple d’utilisation de SQL pour créer une vue sémantique :
Utiliser la sous-clause SEMANTIC_VIEW avec d’autres constructions
Spécifier des expressions scalaires utilisant des dimensions
Exemple de base pour récupérer une métrique¶
L’instruction suivante permet de récupérer le nombre total de clients en interrogeant une métrique :
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
METRICS customer.customer_count
);
+----------------+
| CUSTOMER_COUNT |
+----------------+
| 15000 |
+----------------+
Grouper des données métriques par dimension¶
L’instruction suivante regroupe des données métriques (order_average_value
) en fonction d’une dimension (customer_market_segment
) :
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS customer.customer_market_segment
METRICS orders.order_average_value
);
+-------------------------+---------------------+
| CUSTOMER_MARKET_SEGMENT | ORDER_AVERAGE_VALUE |
+-------------------------+---------------------+
| AUTOMOBILE | 142570.25947219 |
| FURNITURE | 142563.63314267 |
| MACHINERY | 142655.91550608 |
| HOUSEHOLD | 141659.94753445 |
| BUILDING | 142425.37987558 |
+-------------------------+---------------------+
Utiliser la sous-clause SEMANTIC_VIEW avec d’autres constructions¶
L’exemple suivant montre comment vous pouvez utiliser les dimensions et les métriques de la sous-clause SEMANTIC_VIEW avec d’autres constructions SQL pour filtrer, trier et limiter les résultats :
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS customer.customer_name
METRICS orders.average_line_items_per_order,
orders.order_average_value
)
WHERE average_line_items_per_order > 4
ORDER BY average_line_items_per_order DESC
LIMIT 5;
+--------------------+------------------------------+---------------------+
| CUSTOMER_NAME | AVERAGE_LINE_ITEMS_PER_ORDER | ORDER_AVERAGE_VALUE |
+--------------------+------------------------------+---------------------+
| Customer#000045678 | 6.87 | 175432.21 |
| Customer#000067890 | 6.42 | 182376.58 |
| Customer#000012345 | 5.93 | 169847.42 |
| Customer#000034567 | 5.76 | 178952.36 |
| Customer#000056789 | 5.64 | 171248.75 |
+--------------------+------------------------------+---------------------+
Spécifier des expressions scalaires utilisant des dimensions¶
L’exemple suivant utilise une expression scalaire qui fait référence à une dimension dans la clause DIMENSIONS :
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS DATE_PART('year', orders.order_date)
);
+--------------------------------------+
| DATE_PART('YEAR', ORDERS.ORDER_DATE) |
|--------------------------------------|
| 1992 |
| 1997 |
| 1998 |
| 1993 |
| 1996 |
| 1994 |
| 1995 |
+--------------------------------------+
Spécifier la clause WHERE¶
L’exemple suivant spécifie une clause WHERE qui fait référence à une dimension dans la clause DIMENSIONS :
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS orders.order_date
METRICS orders.average_line_items_per_order,
orders.order_average_value
WHERE orders.order_date > '1995-01-01'
)
ORDER BY order_date ASC
LIMIT 5;
+------------+------------------------------+---------------------+
| ORDER_DATE | AVERAGE_LINE_ITEMS_PER_ORDER | ORDER_AVERAGE_VALUE |
|------------+------------------------------+---------------------|
| 1995-01-02 | 3.884547 | 151237.54900533 |
| 1995-01-03 | 3.894819 | 145751.84384615 |
| 1995-01-04 | 3.838863 | 145331.39167457 |
| 1995-01-05 | 4.040689 | 150723.67353678 |
| 1995-01-06 | 3.990755 | 152786.54109399 |
+------------+------------------------------+---------------------+
Gestion des noms de colonnes en double dans la sortie¶
Les colonnes de sortie utilisent les noms non qualifiés des métriques et des dimensions. Si vous avez plusieurs métriques et dimensions portant le même nom, plusieurs colonnes utiliseront le même nom.
Pour contourner ce problème, utilisez un alias de table afin d’attribuer des noms différents aux colonnes.
Par exemple, supposons que vous définissiez une vue sémantique spécifiant les dimensions nation.name
et region.name
:
CREATE OR REPLACE SEMANTIC VIEW duplicate_names
TABLES (
nation AS SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.NATION PRIMARY KEY (n_nationkey),
region AS SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.REGION PRIMARY KEY (r_regionkey)
)
RELATIONSHIPS (
nation (n_regionkey) REFERENCES region
)
DIMENSIONS (
nation.name AS nation.n_name,
region.name AS region.r_name
);
Si vous interrogez cette vue en sélectionnant ces deux dimensions, la sortie comprend deux colonnes nommées name
sans aucun qualificateur :
SELECT * FROM SEMANTIC_VIEW(
duplicate_names
DIMENSIONS nation.name, region.name
);
+----------------+-------------+
| NAME | NAME |
+----------------+-------------+
| BRAZIL | AMERICA |
| MOROCCO | AFRICA |
| UNITED KINGDOM | EUROPE |
| IRAN | MIDDLE EAST |
| FRANCE | EUROPE |
| ... | ... |
+----------------+-------------+
Pour désambiguïser les colonnes, utilisez un alias de table pour attribuer des noms de colonnes différents (par exemple, nation_name
et region_name
) :
SELECT * FROM SEMANTIC_VIEW(
duplicate_names
DIMENSIONS nation.name, region.name
) AS table_alias(nation_name, region_name);
+----------------+-------------+
| NATION_NAME | REGION_NAME |
+----------------+-------------+
| BRAZIL | AMERICA |
| MOROCCO | AFRICA |
| UNITED KINGDOM | EUROPE |
| IRAN | MIDDLE EAST |
| FRANCE | EUROPE |
| ... | ... |
+----------------+-------------+