의미 체계 뷰의 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
Copy

중요

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와 같은 함수를 통해 팩트 또는 기타 열을 집계하여 계산된 비즈니스 성과의 정량화 가능한 측정값입니다.

두 가지 유형의 메트릭:

  1. 테이블 수준 메트릭: 특정 논리 테이블로 범위 지정, 해당 테이블 내의 데이터 집계

  2. 파생 메트릭: 여러 테이블의 메트릭을 결합하는 뷰 수준 메트릭

메트릭 속성:

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

관계

관계는 논리 테이블이 함께 조인되는 방식을 정의합니다. 각 관계는 다음을 지정합니다.

  • 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())"
Copy

유효성 검사된 쿼리

검증된 쿼리는 해당 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
Copy

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
Copy

YAML에서 의미 체계 뷰 생성

YAML 사양에서 의미 체계 뷰를 생성하려면 SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML 저장 프로시저를 사용합니다.

자세한 내용은 YAML 사양에서 의미 체계 뷰 만들기 섹션을 참조하십시오.

의미 체계 뷰에서 YAML 가져오기

의미 체계 뷰를 YAML 형식으로 내보내려면 SYSTEM$READ_YAML_FROM_SEMANTIC_VIEW 함수를 사용합니다.

자세한 내용은 의미 체계 뷰의 YAML 사양 가져오기 섹션을 참조하십시오.

레거시 의미 체계 모델과의 차이점

레거시 의미 체계 모델 YAML 파일에서 의미 체계 뷰로 마이그레이션하는 경우 다음과 같은 주요 차이점에 유의합니다.

특징

레거시 의미 체계 모델

의미 체계 뷰

저장

스테이지의 YAML 파일

데이터베이스의 스키마 수준 오브젝트

권한

역할 기반 액세스 제어

전체 Snowflake RBAC 통합

공유

수동 파일 공유

네이티브 Snowflake 공유

조인 유형

join_typerelationship_type 필요

자동으로 추론됨

파생 메트릭

지원되지 않음

완전히 지원됨

액세스 한정자

지원되지 않음

public_access / private_access

사용자 지정 지침

YAML 파일에서

SQL 명령을 통해 설정

레거시 의미 체계 모델에서 의미 체계 뷰로 변환하는 경우 다음을 수행합니다.

  1. 관계에서 join_typerelationship_type 제거

  2. 뷰 수준 계산에 파생 메트릭 사용 고려하기

  3. 비공개로 설정하려는 팩트/메트릭에 대한 access_modifier 추가

  4. 사용자 지정 지침을 SQL CREATE SEMANTIC VIEW 명령으로 이동