의미 체계 뷰 쿼리¶
의미 체계 뷰를 쿼리하려면 표준 :doc:`SELECT 문</sql-reference/constructs>`을 사용하면 됩니다. 이 문 내에서 다음 접근 방식 중 하나를 사용할 수 있습니다.
FROM 절에서 SEMANTIC_VIEW 절을 지정합니다. 예:
SELECT * FROM SEMANTIC_VIEW( tpch_analysis DIMENSIONS customer.customer_market_segment METRICS orders.order_average_value ) ORDER BY customer_market_segment;
For information, see Specifying the SEMANTIC_VIEW clause in the FROM clause.
FROM 절에서 의미 체계 뷰의 이름을 지정합니다. 예:
SELECT customer_market_segment, AGG(order_average_value) FROM tpch_analysis GROUP BY customer_market_segment ORDER BY customer_market_segment;
For information, see Specifying the name of the semantic view in the FROM clause.
의미 체계 뷰를 쿼리하는 데 필요한 권한¶
의미 체계 뷰를 소유하지 않은 역할을 사용하는 경우에는 해당 의미 체계 뷰에 대해 SELECT 권한이 부여되어야 해당 의미 체계 뷰를 쿼리할 수 있습니다.
참고
의미 체계 뷰를 쿼리하려는 경우 의미 체계 뷰에서 사용되는 테이블에 대해서는 SELECT 권한이 필요하지 않으며 의미 체계 뷰 자체에 대해서만 SELECT 권한이 필요합니다.
이 동작은 표준 뷰를 쿼리하는 데 필요한 권한 과 일치합니다.
의미 체계 뷰에 대한 권한 부여에 대한 자세한 내용은 의미 체계 뷰에 권한 부여하기 섹션을 참조하십시오.
Specifying the SEMANTIC_VIEW clause in the FROM clause¶
의미 체계 뷰를 쿼리하려면 FROM 절에서 :doc:`SEMANTIC_VIEW 절</sql-reference/constructs/semantic_view>`을 지정하면 됩니다.
The following example selects the customer_market_segment dimension and the order_average_value metric from the
tpch_analysis semantic view, which you defined earlier:
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS customer.customer_market_segment
METRICS orders.order_average_value
)
ORDER BY customer_market_segment;
+-------------------------+---------------------+
| CUSTOMER_MARKET_SEGMENT | ORDER_AVERAGE_VALUE |
+-------------------------+---------------------+
| AUTOMOBILE | 142570.25947219 |
| FURNITURE | 142563.63314267 |
| MACHINERY | 142655.91550608 |
| HOUSEHOLD | 141659.94753445 |
| BUILDING | 142425.37987558 |
+-------------------------+---------------------+
차원 또는 메트릭 이름 뒤에 별칭을 지정하여 차원 또는 메트릭 이름의 별칭을 정의할 수 있습니다. 별칭 앞에 키워드 AS를 선택적으로 지정할 수도 있습니다. 다음 예제에서는 동일한 쿼리를 실행하지만 결과에 반환된 차원 및 메트릭에 대해 segment 및 average 별칭을 사용합니다.
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS customer.customer_market_segment AS segment
METRICS orders.order_average_value average
)
ORDER BY segment;
+------------+-----------------+
| SEGMENT | AVERAGE |
|------------+-----------------|
| AUTOMOBILE | 142570.25947219 |
| BUILDING | 142425.37987558 |
| FURNITURE | 142563.63314267 |
| HOUSEHOLD | 141659.94753445 |
| MACHINERY | 142655.91550608 |
+------------+-----------------+
다음 예제에서는 tpch_analysis 의미 체계 뷰에서 customer_name 차원 및 c_customer_order_count 팩트를 선택합니다.
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS customer.customer_name
FACTS customer.c_customer_order_count
)
ORDER BY customer_name
LIMIT 5;
+--------------------+------------------------+
| CUSTOMER_NAME | C_CUSTOMER_ORDER_COUNT |
|--------------------+------------------------|
| Customer#000000001 | 9 |
| Customer#000000002 | 11 |
| Customer#000000003 | 0 |
| Customer#000000004 | 20 |
| Customer#000000005 | 10 |
+--------------------+------------------------+
Guidelines for specifying the SEMANTIC_VIEW clause¶
When specifying the SEMANTIC_VIEW clause, follow these guidelines:
SEMANTIC_VIEW 절에서 다음 절 중 하나 이상을 지정해야 합니다.
METRICS
DIMENSIONS
FACTS
SEMANTIC_VIEW 절에서 이러한 모든 절을 생략할 수는 없습니다.
이러한 절의 조합을 지정할 때 다음 사항에 유의합니다.
동일한 SEMANTIC_VIEW 절에 FACTS 및 METRICS를 지정할 수 없습니다.
쿼리에서 FACTS 및 DIMENSIONS를 둘 다 지정할 수 있지만 차원이 팩트를 고유하게 결정할 수 있는 경우에만 그렇게 해야 합니다.
쿼리는 결과를 차원별로 그룹화합니다. 팩트가 차원에 의존하지 않는 경우, 결과는 비결정적일 수 있습니다.
FACTS 및 DIMENSIONS를 둘 다 지정하는 경우 쿼리에 사용된 모든 팩트 및 차원(WHERE 절에 지정된 항목 포함)은 동일한 논리 테이블에 정의되어야 합니다.
차원과 메트릭을 지정하는 경우 차원의 논리 테이블은 메트릭의 논리 테이블과 관련되어야 합니다.
또한 차원의 논리 테이블 세분성은 메트릭의 논리 테이블과 같거나 더 낮아야 합니다.
이 기준을 충족하는 차원을 확인하려면 SHOW SEMANTIC DIMENSIONS FOR METRIC 명령을 실행할 수 있습니다.
자세한 내용은 지정된 메트릭에 대해 반환할 수 있는 차원 선택 섹션을 참조하십시오.
DIMENSIONS 절에서 팩트를 참조하는 식을 지정할 수 있습니다. 마찬가지로, FACTS 절에서 차원을 참조하는 식을 지정할 수 있습니다. 예:
-- Dimension expression that refers to a fact DIMENSIONS my_table.my_fact -- Fact expression that refers to a dimension FACTS my_table.my_dimension
DIMENSIONS 및 FACTS를 사용할 때의 주요 차이점 중 하나는 쿼리가 DIMENSIONS 절에 지정된 차원과 식을 기준으로 결과를 그룹화한다는 것입니다.
In the METRICS clause, you can specify an expression that includes:
메트릭을 참조하는 scalar 식.
차원 또는 팩트의 집계.
결과에 표시하려는 순서대로 METRICS, DIMENSIONS 및 FACTS 절을 지정합니다.
결과에서 차원을 먼저 표시하려면 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 구조에서 사용할 수 있습니다.
출력 열 헤더는 메트릭 및 차원의 정규화되지 않은 이름을 사용합니다.
이름이 같은 메트릭 및 차원이 여러 개 있는 경우 테이블 별칭을 사용하여 열 헤더에 다른 이름을 할당합니다. 출력에서 중복된 열 이름 처리하기 섹션을 참조하십시오.
지정된 논리 테이블의 모든 메트릭 또는 차원을 반환하려면 별표를 논리 테이블의 이름으로 정규화된 와일드카드로 사용합니다. 예를 들어, customer 논리 테이블에 정의된 모든 메트릭과 차원을 반환하려면 다음을 수행합니다.
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
DIMENSIONS customer.*
METRICS customer.*
);
+-----------------------+-------------------------+--------------------+----------------------+----------------------+----------------+----------------------+
| CUSTOMER_COUNTRY_CODE | CUSTOMER_MARKET_SEGMENT | CUSTOMER_NAME | CUSTOMER_NATION_NAME | CUSTOMER_REGION_NAME | CUSTOMER_COUNT | CUSTOMER_ORDER_COUNT |
|-----------------------+-------------------------+--------------------+----------------------+----------------------+----------------+----------------------|
| 18 | BUILDING | Customer#000034857 | INDIA | ASIA | 1 | 0 |
| 14 | AUTOMOBILE | Customer#000145116 | EGYPT | MIDDLE EAST | 1 | 0 |
...
Examples of specifying the SEMANTIC_VIEW clause¶
다음 예제에서는 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) AS year
)
ORDER BY year;
+------+
| YEAR |
|------|
| 1992 |
| 1993 |
| 1994 |
| 1995 |
| 1996 |
| 1997 |
| 1998 |
+------+
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 |
+------------+------------------------------+---------------------+
WHERE 절에서 팩트 지정¶
다음 예제에서는 WHERE 절에 조건이 있는 region.r_name 팩트를 사용합니다.
SELECT * FROM SEMANTIC_VIEW(
tpch_analysis
FACTS customer.c_customer_order_count
WHERE orders.order_date < '2021-01-01' AND region.r_name = 'AMERICA'
);
Specifying the name of the semantic view in the FROM clause¶
표준 SQL 뷰를 쿼리할 때와 마찬가지로 SELECT 문의 FROM 절에서 의미 체계 뷰의 이름을 지정할 수 있습니다.
SELECT [ DISTINCT ]
{
[<qualifiers>.]<dimension_or_fact> |
<scalar_expression_over_dimension_or_fact> |
{ MIN | MAX | ANY_VALUE | AGG }( [<qualifiers>.]<metric> ) |
<aggregate_function>( [<qualifiers>.]<dimension_for_fact> )
}
[ , ... ]
FROM <semantic_view> [ AS <alias> ]
[ WHERE <expr_using_dimensions_or_facts> ]
[ GROUP BY <expr_using_dimensions_or_facts> [ , ... ] ]
[ HAVING <expr_using_metrics> ]
[ ORDER BY ... ]
[ LIMIT ... ]
내부적으로 이 문은 :ref:`SEMANTIC_VIEW 절<label-semantic_views_querying_semantic_view_clause>`을 사용하는 SELECT 문으로 다시 작성됩니다.
GROUP BY 절에서 지정하는 식은 SEMANTIC_VIEW 절의 DIMENSIONS 절로 다시 작성됩니다.
SELECT 문에서 GROUP BY 절에 없는 식(예: SELECT 목록의 차원 식)을 사용하는 경우 재작성은 SEMANTIC_VIEW 절의 FACTS 절에서 해당 식을 사용합니다.
의미 체계 뷰에 정의된 메트릭을 참조하는 경우 메트릭을 AGG, MIN, MAX 또는 ANY_VALUE 함수에 전달해야 합니다.
차원 또는 팩트를 :doc:`집계 함수</sql-reference/functions-aggregation>`에 전달하여 임시 메트릭을 선택할 수 있습니다.
처음 두 카테고리에 속하지 않는 다른 계산된 값은 팩트 참조로 간주됩니다.
다음 섹션에서는 이러한 요구 사항에 대해 더 자세히 설명합니다.
SELECT 문의 차원 및 메트릭 요구 사항¶
SELECT 문에서는 고유한 이름이 있고 논리 테이블 이름으로 구분되지 않는 차원과 메트릭만 참조할 수 있습니다. 예를 들어, 의미 체계 뷰에 정규화되지 않은 ``name``이라는 두 개의 차원이 있다고 가정해 보겠습니다.
DIMENSIONS (
nation.name AS nation.n_name,
region.name AS region.r_name
);
SELECT 문에서 차원 또는 메트릭의 정규화된 이름을 지정하면 한정자는 논리 테이블의 이름이 아닌 의미 체계의 이름으로 해석됩니다.
SELECT nation.name, region.name
FROM duplicate_names
GROUP BY nation.name, region.name;
000904 (42000): SQL compilation error: error line 1 at position 7
invalid identifier 'NATION.NAME'
Selecting metrics¶
의미 체계 뷰에 정의된 메트릭을 선택하려면 메트릭을 다음 함수 중 하나에 전달해야 합니다.
For example:
SELECT AGG(order_average_value) FROM tpch_analysis;
참고
사용하는 집계 함수(예: MIN, MAX 또는 ANY_VALUE)는 해당 함수가 메트릭 중 하나의 값만 평가하므로 메트릭에 영향을 미치지 않습니다.
예를 들어, 메트릭을 MIN 함수에 전달하면 메트릭 중 한 값의 최소값을 반환하며, 이는 해당 메트릭의 값과 동일합니다.
이 때문에 메트릭을 MIN, MAX, ANY_VALUE 또는 AGG 중 하나에 전달하는 것에는 차이가 없습니다.
In the SELECT list, you can specify an expression that uses a metric. For example:
SELECT AGG(order_average_value) * 10 FROM tpch_analysis;
차원 또는 팩트를 :doc:`집계 함수</sql-reference/functions-aggregation>`에 전달하여 임시 메트릭을 정의하고 선택할 수도 있습니다. 예:
SELECT COUNT(customer_market_segment) FROM tpch_analysis;
Selecting dimensions¶
SELECT 목록에 차원이 포함된 경우 GROUP BY 절에서 해당 차원을 지정해야 합니다. 예:
SELECT customer_market_segment, customer_nation_name, AGG(order_average_value)
FROM tpch_analysis
GROUP BY customer_market_segment, customer_nation_name;
SELECT 목록 및 GROUP BY 절에서 차원 또는 팩트를 사용하는 차원 또는 스칼라 식을 지정할 수 있습니다. 예:
SELECT LOWER(customer_nation_name), AGG(order_average_value)
FROM tpch_analysis
GROUP BY customer_nation_name;
WHERE 절 지정하기¶
WHERE 절에서는 차원이나 팩트를 참조하는 조건식만 사용할 수 있습니다. 예:
SELECT customer_market_segment, AGG(order_average_value)
FROM tpch_analysis
WHERE customer_market_segment = 'BUILDING'
GROUP BY customer_market_segment;
쿼리에 사용된 모든 메트릭으로 차원에 연결할 수 있어야 합니다.
Specifying the HAVING clause¶
HAVING 절에서는 메트릭만 지정할 수 있으며, :ref:`label-semantic_views_query_standard_metrics`에 나열된 집계 함수 중 하나로 이를 전달해야 합니다. 예:
SELECT customer_market_segment, AGG(order_average_value)
FROM tpch_analysis
GROUP BY customer_market_segment
HAVING AGG(order_average_value) > 142500;
FROM 절에서 의미 체계 뷰 이름을 지정하는 경우의 제한 사항¶
SELECT 문에서는 다음을 지정할 수 없습니다.
다음을 포함한 FROM 절의 확장
PIVOT
UNPIVOT
MATCH_RECOGNIZE
LATERAL
조인
Window function calls
QUALIFY
하위 쿼리
지정된 메트릭에 대해 반환할 수 있는 차원 선택¶
반환할 차원과 메트릭을 지정할 때 차원의 기본 테이블은 메트릭의 기본 테이블과 관련되어야 합니다. 또한 차원의 기본 테이블 세분성은 메트릭의 기본 테이블과 같거나 더 낮아야 합니다.
For example, suppose that you query the tpch_analysis semantic view that you created in SQL 을 사용하여 의미 체계 뷰를 생성하는 예제, and you want to return
the orders.order_date dimension and the customer.customer_order_count metric:
SELECT * FROM SEMANTIC_VIEW (
tpch_analysis
DIMENSIONS orders.order_date
METRICS customer.customer_order_count
);
order_date 차원의 orders 테이블이 customer_order_count 메트릭의 customer 테이블보다 세분성이 높으므로, 이 쿼리는 실패합니다.
010234 (42601): SQL compilation error:
Invalid dimension specified: The dimension entity 'ORDERS' must be related to and
have an equal or lower level of granularity compared to the base metric or dimension entity 'CUSTOMER'.
특정 메트릭과 함께 반환할 수 있는 차원을 나열하려면 SHOW SEMANTIC DIMENSIONS FOR METRIC 명령을 실행합니다. 예:
SHOW SEMANTIC DIMENSIONS IN tpch_analysis FOR METRIC customer_order_count;
+------------+-------------------------+-------------+----------+----------+---------+
| table_name | name | data_type | required | synonyms | comment |
|------------+-------------------------+-------------+----------+----------+---------|
| CUSTOMER | CUSTOMER_COUNTRY_CODE | VARCHAR(15) | false | NULL | NULL |
| CUSTOMER | CUSTOMER_MARKET_SEGMENT | VARCHAR(10) | false | NULL | NULL |
| CUSTOMER | CUSTOMER_NAME | VARCHAR(25) | false | NULL | NULL |
| CUSTOMER | CUSTOMER_NATION_NAME | VARCHAR(25) | false | NULL | NULL |
| CUSTOMER | CUSTOMER_REGION_NAME | VARCHAR(25) | false | NULL | NULL |
| NATION | NATION_NAME | VARCHAR(25) | false | NULL | NULL |
+------------+-------------------------+-------------+----------+----------+---------+
출력에서 중복된 열 이름 처리하기¶
출력 열은 메트릭 및 차원의 정규화되지 않은 이름을 사용합니다. 이름이 같은 메트릭과 차원이 여러 개 있는 경우 여러 열이 같은 이름을 사용합니다.
이 문제를 해결하려면 테이블 별칭을 사용하여 열에 다른 이름을 지정하십시오.
예를 들어 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 |
| ... | ... |
+----------------+-------------+
윈도우 함수 메트릭 정의 및 쿼리¶
윈도우 함수 를 호출하고 집계된 값을 전달하는 메트릭을 정의할 수 있습니다. 이러한 메트릭을 *윈도우 함수 메트릭*이라고 합니다.
다음 예제에서는 윈도우 함수 메트릭과 행 수준 표현식을 윈도우 함수에 전달하는 메트릭 간의 차이점을 보여줍니다.
다음 메트릭은 윈도우 함수 메트릭입니다.
METRICS ( table_1.metric_1 AS SUM(table_1.metric_3) OVER( ... ) )
이 예제에서 SUM 윈도우 함수는 다른 메트릭(
table_1.metric_3)을 인자로 사용합니다.다음 메트릭은 윈도우 함수 메트릭이기도 합니다.
METRICS ( table_1.metric_2 AS SUM( SUM(table_1.column_1) ) OVER( ... ) )
이 예제에서 SUM 윈도우 함수는 유효한 메트릭 식(
SUM(table_1.column_1))을 인자로 사용합니다.다음 메트릭은 윈도우 함수 메트릭이 아닙니다.
METRICS ( table_1.metric_1 AS SUM( SUM(table_1.column_1) OVER( ... ) ) )
이 예제에서 SUM 윈도우 함수는 열(
table_1.column_1)을 인자로 사용하고, 해당 윈도우 함수 호출의 결과는 별도의 SUM 집계 함수 호출에 전달됩니다.
다음 섹션에서는 윈도우 함수 메트릭을 정의하고 쿼리하는 방법을 설명합니다.
윈도우 함수 메트릭 정의¶
윈도우 함수 호출을 지정할 때 윈도우 함수 메트릭에 대한 매개 변수 에 설명된 이 구문 을 사용합니다.
다음 예제에서는 여러 윈도우 함수 메트릭의 정의를 포함하는 의미 체계 뷰를 만듭니다. 이 예제에서는 TPC-DS 샘플 데이터베이스의 테이블을 사용합니다. 이 데이터베이스에 액세스하넌 방법에 대한 내용은 Add the TPC-DS data set to your account 섹션을 참조하세요.
CREATE OR REPLACE SEMANTIC VIEW sv_window_function_example
TABLES (
store_sales AS SNOWFLAKE_SAMPLE_DATA.TPCDS_SF10TCL.store_sales,
date AS SNOWFLAKE_SAMPLE_DATA.TPCDS_SF10TCL.date_dim PRIMARY KEY (d_date_sk)
)
RELATIONSHIPS (
sales_to_date AS store_sales(ss_sold_date_sk) REFERENCES date(d_date_sk)
)
DIMENSIONS (
date.date AS d_date,
date.d_date_sk AS d_date_sk,
date.year AS d_year
)
METRICS (
store_sales.total_sales_quantity AS SUM(ss_quantity)
WITH SYNONYMS = ('Total sales quantity'),
store_sales.avg_7_days_sales_quantity as AVG(total_sales_quantity)
OVER (PARTITION BY EXCLUDING date.date, date.year ORDER BY date.date
RANGE BETWEEN INTERVAL '6 days' PRECEDING AND CURRENT ROW)
WITH SYNONYMS = ('Running 7-day average of total sales quantity'),
store_sales.total_sales_quantity_30_days_ago AS LAG(total_sales_quantity, 30)
OVER (PARTITION BY EXCLUDING date.date, date.year ORDER BY date.date)
WITH SYNONYMS = ('Sales quantity 30 days ago'),
store_sales.avg_7_days_sales_quantity_30_days_ago AS AVG(total_sales_quantity)
OVER (PARTITION BY EXCLUDING date.date, date.year ORDER BY date.date
RANGE BETWEEN INTERVAL '36 days' PRECEDING AND INTERVAL '30 days' PRECEDING)
WITH SYNONYMS = ('Running 7-day average of total sales quantity 30 days ago')
);
메트릭 정의에 있는 동일한 논리 테이블의 다른 메트릭을 사용할 수도 있습니다. 예:
METRICS (
orders.m3 AS SUM(m2) OVER (PARTITION BY m1 ORDER BY m2),
orders.m4 AS ((SUM(m2) OVER (..)) / m1) + 1
)
참고
행 수준 계산(팩트 및 차원) 또는 다른 메트릭의 정의에서 윈도우 함수 메트릭을 사용할 수 없습니다.
윈도우 함수 메트릭 쿼리¶
의미 체계 뷰를 쿼리하여 쿼리가 윈도우 함수 메트릭을 반환하는 경우, 의미 체계 뷰의 CREATE SEMANTIC VIEW 문에 있는 PARTITION BY dimension, PARTITION BY EXCLUDING dimension 및 ORDER BY dimension 에 지정된 차원도 반환해야 합니다.
예를 들어 store_sales.avg_7_days_sales_quantity 메트릭 정의의 PARTITION BY EXCLUDING 및 ORDER BY 절에 date.date 및 date.year 차원을 지정한다고 가정해 보겠습니다.
CREATE OR REPLACE SEMANTIC VIEW sv_window_function_example
...
DIMENSIONS (
...
date.date AS d_date,
...
date.year AS d_year
...
)
METRICS (
...
store_sales.avg_7_days_sales_quantity as AVG(total_sales_quantity)
OVER (PARTITION BY EXCLUDING date.date, date.year ORDER BY date.date
RANGE BETWEEN INTERVAL '6 days' PRECEDING AND CURRENT ROW)
WITH SYNONYMS = ('Running 7-day average of total sales quantity'),
...
);
쿼리에서 store_sales.avg_7_days_sales_quantity 메트릭을 반환하는 경우 date.date 및 date.year 차원도 반환해야 합니다.
SELECT * FROM SEMANTIC_VIEW (
sv_window_function_example
DIMENSIONS date.date, date.year
METRICS store_sales.avg_7_days_sales_quantity
);
date.date 및 date.year 차원을 생략하면 오류가 발생합니다.
010260 (42601): SQL compilation error:
Invalid semantic view query: Dimension 'DATE.DATE' used in a
window function metric must be requested in the query.
쿼리에서 지정해야 하는 차원을 결정하려면 SHOW SEMANTIC DIMENSIONS FOR METRIC 명령을 실행합니다. 예를 들어, store_sales.avg_7_days_sales_quantity 메트릭을 검색할 때 지정해야 하는 차원을 결정하려면 다음 명령을 실행합니다.
SHOW SEMANTIC DIMENSIONS IN sv_window_function_example FOR METRIC avg_7_days_sales_quantity;
명령 출력의 required 열에는 쿼리에서 지정해야 하는 차원에 대해 true 가 포함되어 있습니다.
+------------+-----------+--------------+----------+----------+---------+
| table_name | name | data_type | required | synonyms | comment |
|------------+-----------+--------------+----------+----------+---------|
| DATE | DATE | DATE | true | NULL | NULL |
| DATE | D_DATE_SK | NUMBER(38,0) | false | NULL | NULL |
| DATE | YEAR | NUMBER(38,0) | true | NULL | NULL |
+------------+-----------+--------------+----------+----------+---------+
다음 추가 예제에서는 윈도우 함수 메트릭 정의 에 정의된 윈도우 함수 메트릭을 쿼리합니다. DIMENSIONS 절에는 메트릭 정의의 PARTITIONBYEXCLUDING 및 ORDERBY 절에 지정된 차원이 포함됩니다.
다음 예제에서는 30일 전의 판매 수량을 반환합니다.
SELECT * FROM SEMANTIC_VIEW (
sv_window_function_example
DIMENSIONS date.date, date.year
METRICS store_sales.total_sales_quantity_30_days_ago
);
다음 예제에서는 30일 전 총 판매 수량의 7일 평균을 반환합니다.
SELECT * FROM SEMANTIC_VIEW (
sv_window_function_example
DIMENSIONS date.date, date.year
METRICS store_sales.avg_7_days_sales_quantity_30_days_ago
);