Abfrage einer semantischen Ansicht¶
Erforderliche Berechtigungen für die Abfrage einer semantischen Ansicht¶
Wenn Sie eine Rolle verwenden, die nicht Eigentümer der semantischen Ansicht ist, müssen Sie über die Berechtigung SELECT für diese semantische Ansicht verfügen, um diese abzufragen.
Bemerkung
Wie bei Standardansichten benötigen Sie die Berechtigung SELECT nicht für die in der semantischen Ansicht verwendeten Tabellen. Sie benötigen lediglich die Berechtigung SELECT für die semantische Ansicht selbst.
Informationen über die Erteilung von Berechtigungen für semantische Ansichten finden Sie unter Erteilung von Berechtigungen für semantische Ansichten.
Abfrage einer semantischen Ansicht¶
Um eine semantische Ansicht abzufragen, verwenden Sie die SEMANTIC_VIEW-Klausel in der FROM-Klausel. Das folgende Beispiel wählt die Dimension customer_market_segment
und die Metrik order_average_value
aus der semantischen Ansicht tpch_analysis
aus:
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 |
+-------------------------+---------------------+
Beachten Sie Folgendes:
In der SEMANTIC_VIEWS-Klausel müssen Sie die METRICS-Klausel, die DIMENSIONS-Klausel oder beide angeben.
Sie können nicht beide Klauseln in einer SEMANTIC_VIEWS-Klausel auslassen.
Geben Sie die Klauseln METRICS und DIMENSIONS in der Reihenfolge an, in der sie in den Ergebnissen erscheinen sollen.
Wenn Sie möchten, dass die Abmessungen zuerst in den Ergebnissen erscheinen, geben Sie DIMENSIONS vor METRICS an. Andernfalls geben Sie zuerst METRICS an.
Nehmen wir zum Beispiel an, dass Sie zuerst die METRICS-Klausel angeben:
SELECT * FROM SEMANTIC_VIEW( tpch_analysis METRICS customer.customer_order_count DIMENSIONS customer.customer_name ) ORDER BY customer_name LIMIT 5;
In der Ausgabe ist die erste Spalte die metrische Spalte (
customer_order_count
) und die zweite Spalte ist die Dimensionsspalte (customer_name
):+----------------------+--------------------+ | CUSTOMER_ORDER_COUNT | CUSTOMER_NAME | |----------------------+--------------------| | 6 | Customer#000000001 | | 7 | Customer#000000002 | | 0 | Customer#000000003 | | 20 | Customer#000000004 | | 4 | Customer#000000005 | +----------------------+--------------------+
Wenn Sie stattdessen zuerst die DIMENSIONS-Klausel angeben:
SELECT * FROM SEMANTIC_VIEW( tpch_analysis DIMENSIONS customer.customer_name METRICS customer.customer_order_count ) ORDER BY customer_name LIMIT 5;
In der Ausgabe ist die erste Spalte die Dimensionsspalte (
customer_name
) und die zweite Spalte ist die metrische Spalte (customer_order_count
):+--------------------+----------------------+ | CUSTOMER_NAME | CUSTOMER_ORDER_COUNT | |--------------------+----------------------| | Customer#000000001 | 6 | | Customer#000000002 | 7 | | Customer#000000003 | 0 | | Customer#000000004 | 20 | | Customer#000000005 | 4 | +--------------------+----------------------+
Sie können die durch eine SEMANTIC_VIEW-Klausel definierte Beziehung in anderen SQL-Konstrukten verwenden, einschließlich JOIN, PIVOT, UNPIVOT, GROUP BY und allgemeinen Tabellenausdrücken (CTEs).
Die Spaltenüberschriften der Ausgabe verwenden die unqualifizierten Namen der Metriken und Dimensionen.
Wenn Sie mehrere Metriken und Dimensionen mit denselben Namen haben, verwenden Sie einen Tabellenalias, um den Spaltenüberschriften unterschiedliche Namen zuzuweisen. Siehe Behandlung doppelter Spaltennamen in der Ausgabe.
Beispiele¶
Die folgenden Beispiele verwenden die Ansicht tpch_analysis
, die in Beispiel für die Verwendung von SQL zur Erstellung einer semantischen Ansicht definiert ist:
Einfaches Beispiel für das Abrufen einer Metrik¶
Die folgende Anweisung ruft die Gesamtzahl der Kunden ab, indem sie eine Metrik abfragt:
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
METRICS customer.customer_count
);
+----------------+
| CUSTOMER_COUNT |
+----------------+
| 15000 |
+----------------+
Gruppierung metrischer Daten nach einer Dimension¶
Die folgende Anweisung gruppiert metrische Daten (order_average_value
) nach einer 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 |
+-------------------------+---------------------+
Verwendung der Subklausel SEMANTIC_VIEW mit anderen Konstrukten¶
Das folgende Beispiel zeigt, wie Sie die Dimensionen und Metriken in der Subklausel SEMANTIC_VIEW mit anderen SQL-Konstrukten verwenden können, um Ergebnisse zu filtern, zu sortieren und einzuschränken:
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 |
+--------------------+------------------------------+---------------------+
Angabe von skalaren Ausdrücken, die Dimensionen verwenden¶
Im folgenden Beispiel wird ein skalarer Ausdruck verwendet, der sich auf eine Dimension in der DIMENSIONS-Klausel bezieht:
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 |
+--------------------------------------+
Angabe der WHERE-Klausel¶
Im folgenden Beispiel wird eine WHERE-Klausel angegeben, die sich auf eine Dimension in der DIMENSIONS-Klausel bezieht:
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 |
+------------+------------------------------+---------------------+
Behandlung doppelter Spaltennamen in der Ausgabe¶
Die Ausgabespalten verwenden die unqualifizierten Namen der Metriken und Dimensionen. Wenn Sie mehrere Metriken und Dimensionen mit demselben Namen haben, werden mehrere Spalten denselben Namen verwenden.
Um dies zu umgehen, verwenden Sie einen Tabellenalias, um den Spalten andere Namen zuzuweisen.
Nehmen wir zum Beispiel an, dass Sie die folgende semantische Ansicht definieren, die die Dimensionen nation.name
und region.name
definiert:
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
);
Wenn Sie diese Ansicht abfragen und diese beiden Dimensionen auswählen, enthält die Ausgabe zwei Spalten mit dem Namen name
ohne Qualifizierer:
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 |
| ... | ... |
+----------------+-------------+
Um die Spalten eindeutig zuzuordnen, verwenden Sie einen Tabellenalias, um verschiedene Spaltennamen zu vergeben (zum Beispiel nation_name
und 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 |
| ... | ... |
+----------------+-------------+