의미 체계 뷰 쿼리하기¶
의미 체계 뷰를 쿼리하는 데 필요한 권한¶
의미 체계 뷰를 소유하지 않은 역할을 사용하는 경우에는 해당 의미 체계 뷰에 대해 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
);
+-------------------------+---------------------+
| 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;
출력에서 첫 번째 열은 메트릭 열(
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;
출력에서 첫 번째 열은 차원 열(
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
);
+----------------+
| 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
);
+-------------------------+---------------------+
| 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;
+--------------------+------------------------------+---------------------+
| 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)
);
+--------------------------------------+
| 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;
+------------+------------------------------+---------------------+
| 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.name
및 nation.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
);
이 뷰를 쿼리하고 이 두 차원을 선택하면 출력에 한정자 없이 name
이라는 이름의 열 2개가 포함됩니다.
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 |
| ... | ... |
+----------------+-------------+
열을 명확하게 구분하려면 테이블 별칭을 사용하여 서로 다른 열 이름을 지정합니다(예: nation_name
및 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 |
| ... | ... |
+----------------+-------------+