의미 체계 뷰 쿼리하기

의미 체계 뷰를 쿼리하는 데 필요한 권한

의미 체계 뷰를 소유하지 않은 역할을 사용하는 경우에는 해당 의미 체계 뷰에 대해 SELECT 권한이 부여되어야 해당 의미 체계 뷰를 쿼리할 수 있습니다.

참고

표준 뷰 의 경우와 마찬가지로 의미 체계 뷰에 사용되는 테이블에는 SELECT 권한이 필요하지 않습니다. 의미 체계 뷰 자체에 대한 SELECT 권한만 있으면 됩니다.

의미 체계 뷰에 대한 권한 부여에 대한 자세한 내용은 의미 체계 뷰에 권한 부여하기 섹션을 참조하십시오.

의미 체계 뷰 쿼리하기

의미 체계 뷰를 쿼리하려면 FROM 절의 SEMANTIC_VIEW 절 을 사용합니다. 다음 예제는 tpch_analysis 의미 체계 뷰에서 customer_market_segment 차원과 order_average_value 메트릭을 선택합니다.

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 |
+-------------------------+---------------------+

다음 사항을 참고하십시오.

  • SEMANTIC_VIEWS 절에서 METRICS 절, DIMENSIONS 절 또는 두 절을 모두 지정해야 합니다.

    SEMANTIC_VIEWS 절에서 이 두 절을 모두 생략할 수 없습니다.

  • 결과에 표시할 METRICS 및 DIMENSIONS 절을 원하는 순서대로 지정합니다.

    결과에서 차원을 먼저 표시하려면 METRICS 앞에 DIMENSIONS 을 지정합니다. 그렇지 않으면 METRICS 을 먼저 지정하십시오.

    예를 들어, METRICS 절을 먼저 지정한다고 가정해 보겠습니다.

    SELECT * FROM SEMANTIC_VIEW(
        tpch_analysis
        METRICS customer.customer_order_count
        DIMENSIONS customer.customer_name
      )
      ORDER BY customer_name
      LIMIT 5;
    
    Copy

    출력에서 첫 번째 열은 메트릭 열(customer_order_count)이고 두 번째 열은 차원 열(customer_name)입니다.

    +----------------------+--------------------+
    | CUSTOMER_ORDER_COUNT | CUSTOMER_NAME      |
    |----------------------+--------------------|
    |                    6 | Customer#000000001 |
    |                    7 | Customer#000000002 |
    |                    0 | Customer#000000003 |
    |                   20 | Customer#000000004 |
    |                    4 | Customer#000000005 |
    +----------------------+--------------------+
    

    대신 DIMENSIONS 절을 먼저 지정하는 경우:

    SELECT * FROM SEMANTIC_VIEW(
        tpch_analysis
        DIMENSIONS customer.customer_name
        METRICS customer.customer_order_count
      )
      ORDER BY customer_name
      LIMIT 5;
    
    Copy

    출력에서 첫 번째 열은 차원 열(customer_name)이고 두 번째 열은 메트릭 열(customer_order_count)입니다.

    +--------------------+----------------------+
    | CUSTOMER_NAME      | CUSTOMER_ORDER_COUNT |
    |--------------------+----------------------|
    | Customer#000000001 |                    6 |
    | Customer#000000002 |                    7 |
    | Customer#000000003 |                    0 |
    | Customer#000000004 |                   20 |
    | Customer#000000005 |                    4 |
    +--------------------+----------------------+
    
  • SEMANTIC_VIEW 절로 정의된 관계를 JOIN, PIVOT, UNPIVOT, GROUP BY, 공통 테이블 식(CTEs) 등 다른 SQL 구조에서 사용할 수 있습니다.

  • 출력 열 헤더는 메트릭 및 차원의 정규화되지 않은 이름을 사용합니다.

    이름이 같은 메트릭 및 차원이 여러 개 있는 경우 테이블 별칭을 사용하여 열 헤더에 다른 이름을 할당합니다. 출력에서 중복된 열 이름 처리하기 섹션을 참조하십시오.

다음 예제에서는 SQL 을 사용하여 의미 체계 뷰를 생성하는 예제 에 정의된 tpch_analysis 뷰를 사용합니다.

메트릭 검색의 기본 예시

다음 문은 메트릭을 쿼리하여 총 고객 수를 검색합니다.

SELECT * FROM SEMANTIC_VIEW(
    tpch_analysis
    METRICS customer.customer_count
  );
Copy
+----------------+
| CUSTOMER_COUNT |
+----------------+
|          15000 |
+----------------+

차원별로 메트릭 데이터 그룹화하기

다음 문은 메트릭 데이터(order_average_value)를 차원(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 |
+-------------------------+---------------------+

SEMANTIC_VIEW 하위 절을 다른 구문과 함께 사용

다음 예제에서는 SEMANTIC_VIEW 하위 절의 차원 및 메트릭을 다른 SQL 구문과 함께 사용하여 결과를 필터링, 정렬 및 제한하는 방법을 보여 줍니다.

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 |
+--------------------+------------------------------+---------------------+

차원을 사용하는 스칼라 식 지정하기

다음 예제에서는 DIMENSIONS 절에서 차원을 참조하는 스칼라 식을 사용합니다.

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 |
+--------------------------------------+

WHERE 절 지정하기

다음 예제에서는 DIMENSIONS 절에서 차원을 참조하는 WHERE 절을 지정합니다.

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 |
+------------+------------------------------+---------------------+

출력에서 중복된 열 이름 처리하기

출력 열은 메트릭 및 차원의 정규화되지 않은 이름을 사용합니다. 이름이 같은 메트릭과 차원이 여러 개 있는 경우 여러 열이 같은 이름을 사용합니다.

이 문제를 해결하려면 테이블 별칭을 사용하여 열에 다른 이름을 지정하십시오.

예를 들어 region.namenation.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
  );
Copy

이 뷰를 쿼리하고 이 두 차원을 선택하면 출력에 한정자 없이 name 이라는 이름의 열 2개가 포함됩니다.

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      |
| ...            | ...         |
+----------------+-------------+

열을 명확하게 구분하려면 테이블 별칭을 사용하여 서로 다른 열 이름을 지정합니다(예: nation_nameregion_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      |
| ...            | ...         |
+----------------+-------------+