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
  );
Copy
+-------------------------+---------------------+
| 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;
    
    Copy

    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;
    
    Copy

    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
  );
Copy
+----------------+
| 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
  );
Copy
+-------------------------+---------------------+
| 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;
Copy
+--------------------+------------------------------+---------------------+
| 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)
  );
Copy
+--------------------------------------+
| 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;
Copy
+------------+------------------------------+---------------------+
| 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
  );
Copy

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
  );
Copy
+----------------+-------------+
| 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);
Copy
+----------------+-------------+
| NATION_NAME    | REGION_NAME |
+----------------+-------------+
| BRAZIL         | AMERICA     |
| MOROCCO        | AFRICA      |
| UNITED KINGDOM | EUROPE      |
| IRAN           | MIDDLE EAST |
| FRANCE         | EUROPE      |
| ...            | ...         |
+----------------+-------------+