의미 체계 뷰의 YAML 사양¶
의미 체계 뷰는 데이터에 대한 비즈니스 개념을 정의하는 스키마 수준 오브젝트로, 사용자가 비즈니스 용어를 사용하여 데이터를 더 쉽게 쿼리하고 분석할 수 있도록 지원합니다. YAML 사양을 사용하여 Cortex Analyst 에서 의미 체계 뷰를 생성하거나 SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML 저장 프로시저를 사용하여 YAML 사양에서 의미 체계 뷰를 생성합니다.
개요¶
**의미 체계 뷰는 Snowflake에서 비즈니스 의미 체계를 정의하기 위한 권장 접근 방식**입니다. Snowflake의 권한 시스템, 공유 메커니즘, 메타데이터 카탈로그와 통합되는 스키마 수준 오브젝트입니다.
참고
레거시 의미 체계 모델 YAML 파일(스테이지에 저장됨)은 이전 버전과의 호환성을 위해 Cortex Analyst 와 함께 계속 사용할 수 있지만, 새로운 구현에는 의미 체계 뷰를 사용하는 것이 좋습니다.
레거시 의미 체계 모델에 대한 의미 체계 뷰의 이점은 다음과 같습니다.
네이티브 Snowflake 통합: 전체 RBAC, 공유 및 카탈로그 지원이 있는 스키마 수준 오브젝트
고급 기능: 파생 메트릭 및 액세스 한정자 지원(공개/비공개)
더 나은 거버넌스: Snowflake의 권한 및 공유 시스템과 통합
단순화된 관리: 스테이지에서 YAML 파일을 관리할 필요 없음
YAML 형식¶
의미 체계 뷰는 YAML 사양을 통해 동작을 정의하여 읽기 가능한 일반 텍스트 정의를 허용합니다.
의미 체계 뷰 YAML 사양의 일반 구문은 다음과 같습니다.
# Name and description of the semantic view.
name: <name>
description: <string>
comments: <string>
# Logical table-level concepts
# A semantic view can contain one or more logical tables.
tables:
# A logical table on top of a base table.
- name: <name>
description: <string>
# The fully qualified name of the base table.
base_table:
database: <database>
schema: <schema>
table: <base table name>
# Dimension columns in the logical table.
dimensions:
- name: <name>
synonyms: <array of strings>
description: <string>
expr: <SQL expression>
data_type: <data type>
unique: <boolean>
cortex_search_service:
service: <string>
literal_column: <string>
database: <string>
schema: <string>
is_enum: <boolean>
- ...
# Time dimension columns in the logical table.
time_dimensions:
- name: <name>
synonyms: <array of strings>
description: <string>
expr: <SQL expression>
data_type: <data type>
unique: <boolean>
# Fact columns in the logical table.
facts:
- name: <name>
synonyms: <array of strings>
description: <string>
access_modifier: <public_access | private_access> # Default is public_access.
expr: <SQL expression>
data_type: <data type>
# Regular metrics scoped to the logical table.
metrics:
- name: <name>
synonyms: <array of strings>
description: <string>
access_modifier: <public_access | private_access> # Default is public_access.
expr: <SQL expression>
# Commonly used filters over the logical table.
filters:
- name: <name>
synonyms: <array of strings>
description: <string>
expr: <SQL expression>
# View-level concepts
# Relationships between logical tables
relationships:
- name: <string>
left_table: <table>
right_table: <table>
relationship_columns:
- left_column: <column>
right_column: <column>
- left_column: <column>
right_column: <column>
# Derived metrics scoped to the semantic view.
# Derived metrics combine metrics from multiple tables.
metrics:
- name: <name>
synonyms: <array of strings>
description: <string>
access_modifier: <public_access | private_access> # Default is public_access
expr: <SQL expression>
# Additional context concepts
# Verified queries with example questions and queries that answer them
verified_queries:
- name: <string> # A descriptive name of the query.
question: <string> # The natural language question that this query answers.
verified_at: <int> # Optional: Time (in seconds since the UNIX epoch, January 1, 1970) when the query was verified.
verified_by: <string> # Optional: Name of the person who verified the query.
use_as_onboarding_question: <boolean> # Optional: Marks this question as an onboarding question for the end user.
sql: <string> # The SQL query for answering the question
중요
join_type 또는 레거시 의미 체계 모델에 사용된 relationship_type 필드는 의미 체계 뷰에 필요하지 않습니다. 관계 유형은 데이터에서 자동으로 유추됩니다.
핵심 개념¶
테이블¶
논리 테이블은 비즈니스 엔터티(예: 고객, 주문 또는 제품)를 나타내며 물리적 데이터베이스 테이블에 매핑됩니다. 각 논리 테이블은 다음을 정의할 수 있습니다.
기본 테이블: 물리적 테이블의 정규화된 이름
기본 키: 행을 고유하게 식별하는 열
동의어: 테이블의 대체 이름
설명: 테이블이 나타내는 내용에 대한 비즈니스 친화적인 설명
Dimensions¶
차원은 분석을 위한 컨텍스트를 제공하는 범주형 특성을 나타냅니다. “누가”, “무엇을”, “어디서”, “언제”라는 질문에 답변합니다. 차원은 다음과 같을 수 있습니다.
일반 차원: 텍스트, 숫자 또는 기타 범주형 값
시간 차원: 특수한 시간 기반 처리가 포함된 날짜 또는 타임스탬프 열
차원의 속성¶
expr: 차원 값을 계산하는 SQL 식synonyms: 사용자가 사용할 수 있는 대체 용어unique: 값이 행 전체에서 고유한지 여부is_enum: 차원에 고정 값 세트가 있는지 여부cortex_search_service: 의미 체계 검색을 위한 선택적 Cortex Search Service
물리적 차원의 선택적 속성¶
이러한 필드는 선택 사항이지만, 의미 체계 뷰 검색에서 고품질의 결과를 생성하는 데 권장됩니다.
synonyms이 차원을 지칭하는 데 사용되는 다른 용어/구문 목록입니다. 이 의미 체계 모델의 모든 동의어에서 고유해야 합니다.
description이 차원에 대한 간략한 설명입니다. 이 차원이 나타내는 데이터와 같이 유용한 컨텍스트를 제공하는 정보를 포함합니다.
unique이 차원이 고유한 값을 가지고 있음을 나타내는 부울 값입니다.
sample_values이 열의 샘플 값(있는 경우)입니다. 사용자 질문에 참조될 가능성이 있는 모든 값을 추가합니다.
is_enum부울 값입니다.
True인 경우sample_values필드의 값은 가능한 값의 전체 목록으로 간주되며 모델은 해당 열에서 필터링할 때 해당 값 중에서만 선택합니다.cortex_search_service이 차원에 사용할 Cortex Search Service를 지정합니다. 다음과 같은 필드가 있습니다.
service: Cortex Search Service의 이름입니다.literal_column: (선택 사항) Cortex Search Service의 리터럴 값을 포함하는 열입니다.database: (선택 사항) Cortex Search Service가 위치한 데이터베이스입니다. 기본값은base_table의 데이터베이스입니다.schema: (선택 사항) Cortex Search Service가 위치한 스키마입니다. 기본값은base_table의 스키마입니다.
cortex_search_service``는 이름만 지정할 수 있는 ``cortex_search_service_name필드를 대체합니다. ``cortex_search_service_name``은 더 이상 사용되지 않습니다.
시간 차원의 선택적 속성¶
이러한 필드는 선택 사항이지만, 의미 체계 뷰 검색에서 고품질의 결과를 생성하는 데 권장됩니다.
synonyms이 시간 차원을 지칭하는 데 사용되는 다른 용어/구문 목록입니다. 이 의미 체계 모델의 모든 동의어에서 고유해야 합니다.
description이 차원에 대한 간략한 설명입니다. 이 차원이 참조 지점으로 사용하는 타임존과 같이 유용한 컨텍스트를 제공하는 정보를 포함합니다.
unique:이 열에 고유한 값이 있음을 나타내는 부울 값입니다.
sample_values:이 열의 샘플 값(있는 경우)입니다. 사용자 질문에서 참조될 가능성이 있는 모든 값을 추가합니다.
팩트¶
팩트는 특정 비즈니스 이벤트 또는 트랜잭션을 나타내는 행 수준의 정량적 특성입니다. 팩트는 개별 판매 금액, 구매 수량 또는 비용과 같이 가장 세분화된 수준에서 “얼마” 또는 “얼마나 많은지”를 캡처합니다.
팩트는 일반적으로 차원과 메트릭을 구성하는 데 도움이 되는 의미 체계 뷰 내에서 “헬퍼” 개념으로 작동합니다.
팩트의 속성은 다음과 같습니다.
expr: 팩트 값을 계산하는 SQL 식access_modifier: ``private_access``로 설정하여 쿼리에서 숨기기(중간 계산에 유용함)data_type: 팩트의 데이터 타입
메트릭¶
메트릭은 SUM, AVG, COUNT와 같은 함수를 통해 팩트 또는 기타 열을 집계하여 계산된 비즈니스 성과의 정량화 가능한 측정값입니다.
두 가지 유형의 메트릭:
테이블 수준 메트릭: 특정 논리 테이블로 범위 지정, 해당 테이블 내의 데이터 집계
파생 메트릭: 여러 테이블의 메트릭을 결합하는 뷰 수준 메트릭
메트릭 속성:
expr: 집계 함수가 있는 SQL 식access_modifier: ``private_access``로 설정하여 쿼리에서 숨기기(중간 계산에 유용함)synonyms: 메트릭의 대체 용어
파생 메트릭¶
파생 메트릭은 특정 테이블에 연결되지 않은 뷰 수준 메트릭입니다. 여러 테이블의 메트릭을 결합하거나 전체 뷰에서 계산을 수행할 수 있습니다.
파생 메트릭의 예:
metrics:
- name: total_profit_margin
description: "Overall profit margin across all products"
expr: (orders.total_revenue - orders.total_cost) / orders.total_revenue
access_modifier: public_access
관계¶
관계는 논리 테이블이 함께 조인되는 방식을 정의합니다. 각 관계는 다음을 지정합니다.
left_table: 외래 키가 포함된 테이블right_table: 참조되는 테이블relationship_columns:left_column및 ``right_column``처럼 조인할 열 쌍
관계 유형(일대일, 다대일)은 데이터 및 기본 키 정의에서 자동으로 유추됩니다.
참고
레거시 의미 체계 모델과 달리 의미 체계 뷰에는 명시적 join_type 또는 relationship_type 사양이 필요하지 않습니다. 이는 자동으로 결정됩니다.
필터¶
필터는 이름으로 참조할 수 있는 일반적으로 사용되는 필터링 조건을 정의합니다. 이는 쿼리 전체에서 일관된 필터링 논리를 보장하는 데 도움이 됩니다.
예:
filters:
- name: active_customers
description: "Customers who have made a purchase in the last 12 months"
expr: "customer_last_purchase_date >= DATEADD(month, -12, CURRENT_DATE())"
유효성 검사된 쿼리¶
검증된 쿼리는 해당 SQL 쿼리가 포함된 질문 예제입니다. Cortex Analyst 가 유사한 질문에 답변하는 방법을 이해하고 사용자를 위한 설명서 역할을 하는 데 도움을 줍니다.
속성:
question: 자연어 질문sql: 질문에 답변하는 SQL 쿼리verified_by: 쿼리가 올바른지 확인한 사람(선택 사항)verified_at: 확인된 경우의 타임스탬프(선택 사항)use_as_onboarding_question: 이를 사용자에게 제안으로 표시하는 플래그(선택 사항)
액세스 한정자¶
의미 체계 뷰는 팩트 및 메트릭에 대한 액세스 한정자를 지원하므로 가시성을 제어할 수 있습니다.
``public_access``(기본값): 사용자가 표시 및 쿼리 가능
private_access: 쿼리에서 숨겨지며, 중간 계산에만 사용됨
예:
facts:
- name: internal_cost
expr: unit_cost * quantity
data_type: NUMBER
access_modifier: private_access # Not visible in queries
metrics:
- name: total_revenue
expr: SUM(sale_amount)
access_modifier: public_access # Visible in queries
Cortex Analyst의 사용자 지정 지침¶
SQL 명령을 사용하여 의미 체계 뷰 정의에서 사용자 지정 지침을 제공합니다. 이러한 지침은 쿼리가 생성되는 방법과 질문을 분류하는 방법을 안내합니다. 이러한 지침은 YAML 사양의 일부가 아니지만 CREATE SEMANTIC VIEW 명령을 사용하여 설정됩니다.
자세한 내용은 |cortex-analyst|용 사용자 지정 지침 제공하기 섹션을 참조하십시오.
의미 체계 뷰 YAML 예제¶
다음은 의미 체계 뷰 YAML 사양의 전체 예제입니다.
name: revenue_analysis
description: "Semantic view for analyzing revenue across products and customers"
tables:
- name: customers
description: "Customer information"
base_table:
database: sales_db
schema: public
table: customers
dimensions:
- name: customer_name
synonyms: ["client name", "customer"]
description: "Full name of the customer"
expr: c_name
data_type: VARCHAR
- name: customer_segment
synonyms: ["segment", "market segment"]
description: "Customer market segment"
expr: c_mktsegment
data_type: VARCHAR
is_enum: true
- name: orders
description: "Order information"
base_table:
database: sales_db
schema: public
table: orders
dimensions:
- name: order_date
description: "Date when order was placed"
expr: o_orderdate
data_type: DATE
time_dimensions:
- name: order_year
description: "Year when order was placed"
expr: YEAR(o_orderdate)
data_type: NUMBER
facts:
- name: order_total
description: "Total order amount"
expr: o_totalprice
data_type: NUMBER
metrics:
- name: total_orders
description: "Total number of orders"
expr: COUNT(*)
- name: average_order_value
description: "Average order value"
expr: AVG(o_totalprice)
relationships:
- name: orders_to_customers
left_table: orders
right_table: customers
relationship_columns:
- left_column: o_custkey
right_column: c_custkey
metrics:
- name: revenue_per_customer
description: "Average revenue per customer"
expr: orders.total_revenue / customers.customer_count
access_modifier: public_access
verified_queries:
- name: top_customers_by_revenue
question: "Who are the top 10 customers by revenue?"
sql: |
SELECT
customer_name,
SUM(order_total) as total_revenue
FROM revenue_analysis
GROUP BY customer_name
ORDER BY total_revenue DESC
LIMIT 10
use_as_onboarding_question: true
YAML에서 의미 체계 뷰 생성¶
YAML 사양에서 의미 체계 뷰를 생성하려면 SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML 저장 프로시저를 사용합니다.
자세한 내용은 YAML 사양에서 의미 체계 뷰 만들기 섹션을 참조하십시오.
의미 체계 뷰에서 YAML 가져오기¶
의미 체계 뷰를 YAML 형식으로 내보내려면 SYSTEM$READ_YAML_FROM_SEMANTIC_VIEW 함수를 사용합니다.
자세한 내용은 의미 체계 뷰의 YAML 사양 가져오기 섹션을 참조하십시오.
레거시 의미 체계 모델과의 차이점¶
레거시 의미 체계 모델 YAML 파일에서 의미 체계 뷰로 마이그레이션하는 경우 다음과 같은 주요 차이점에 유의합니다.
특징 |
레거시 의미 체계 모델 |
의미 체계 뷰 |
|---|---|---|
저장 |
스테이지의 YAML 파일 |
데이터베이스의 스키마 수준 오브젝트 |
권한 |
역할 기반 액세스 제어 |
전체 Snowflake RBAC 통합 |
공유 |
수동 파일 공유 |
네이티브 Snowflake 공유 |
조인 유형 |
|
자동으로 추론됨 |
파생 메트릭 |
지원되지 않음 |
완전히 지원됨 |
액세스 한정자 |
지원되지 않음 |
|
사용자 지정 지침 |
YAML 파일에서 |
SQL 명령을 통해 설정 |
레거시 의미 체계 모델에서 의미 체계 뷰로 변환하는 경우 다음을 수행합니다.
관계에서
join_type및relationship_type제거뷰 수준 계산에 파생 메트릭 사용 고려하기
비공개로 설정하려는 팩트/메트릭에 대한
access_modifier추가사용자 지정 지침을 SQL CREATE SEMANTIC VIEW 명령으로 이동