Cortex Analyst 의미 체계 모델 사양

왜 의미 체계 모델을 사용하나요?

Cortex Analyst 를 사용하면 사용자는 자연어를 사용하여 Snowflake 데이터에 대한 질문을 할 수 있습니다. 일반적으로 비즈니스 사용자가 데이터에 관한 질문을 할 때 사용하는 어휘와 데이터베이스 스키마에서 사용하는 어휘 사이에는 차이가 있습니다. 이러한 사용자는 일반적으로 비즈니스 또는 도메인별 용어를 사용하는 반면, 데이터베이스 스키마는 ETL 파이프라인에서 자주 사용되는 약어 또는 용어를 사용할 수 있습니다. 또한 데이터베이스 스키마에는 데이터 세트에 익숙하지 않은 사람이 데이터를 이해하는 데 도움이 되는 의미 체계가 부족한 경우가 많습니다. 이러한 어휘의 차이로 인해 Cortex Analyst 는 데이터 질문에 높은 자릿수로 답하기가 어렵습니다.

의미 체계 모델은 데이터 세트에 대한 추가적인 의미적 세부 정보를 지정할 수 있도록 하여 이러한 문제를 해결하는 가벼운 메커니즘입니다. 더 설명적인 이름이나 동의어와 같은 추가적인 의미 체계는 Cortex Analyst 가 데이터 질문에 훨씬 더 신뢰할 수 있는 답변을 제공할 수 있도록 합니다.

참고

의미 체계 모델은 메타데이터 로 간주됩니다.

핵심 개념

참고

이 항목 전체에서 기본 데이터베이스 관련 아티팩트는 “물리적” 아티팩트라고 하며, 의미 체계 모델 관련 아티팩트는 “논리적” 아티팩트라고 합니다.

의미 체계 모델의 구조와 개념은 데이터베이스 스키마와 유사하지만, 의미 체계 모델을 사용하면 데이터에 대한 더 많은 의미적 정보를 제공할 수 있습니다.

Snowflake 의미 체계 모델의 핵심 개념은 논리적 테이블 입니다. 논리적 테이블은 물리적 데이터베이스 테이블이나 뷰에 대한 간단한 뷰로 생각할 수 있습니다. 각 논리 테이블은 논리 열의 모음으로 dimensions, time_dimensions, measures 로 분류됩니다.

논리적 열은 기본 물리적 열에 대한 참조이거나 하나 이상의 물리적 열을 포함하는 식이 될 수 있습니다. 식은 문자열 연결이나 수학 연산과 같이 간단할 수도 있고, 집계 식을 포함할 수도 있습니다. 예를 들어, 클릭당 비용(CPC)을 계산할 때 SUM(click)/SUM(spend) 같은 식을 사용할 수 있습니다.

의미 체계 모델에는 검증된 쿼리 리포지토리 (VQR)도 포함될 수 있으며, 이는 질문 모음과 이에 대한 답변을 위한 해당 SQL 쿼리를 제공하여 결과의 정확도와 신뢰도를 향상하는 데 도움이 될 수 있습니다.

Cortex Analyst 사양의 의미 체계는 YAML 에 있습니다. 자연어 질문에 높은 정확도로 답변하는 데 필요한 의미 체계 정보를 제공합니다.

일반적인 구문은 다음과 같습니다.

# Name and description of the semantic model.
name: <name>
description: <string>

# A semantic model 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_name: <string>

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

    # Measure columns in the logical table.
    measures:
      - name: <name>
        synonyms: <array of strings>
        description: <string>
        expr: <SQL expression>
        data_type: <data type>
        default_aggregation: <aggregate function>

    # Commonly used filters over the logical table.
    filters:
      - name: <name>
        synonyms: <array of strings>
        description: <string>
        expr: <SQL expression>

# Example questions and queries that answer them
verified_queries:

# Verified Query (1 of n)
- name:                         # A descriptive name of the query.
  question:                     # The natural language question that this query answers.
  verified_at:                  # Optional: Time (in seconds since the UNIX epoch, January 1, 1970) when the query was verified.
  verified_by:                  # Optional: Name of the person who verified the query.
  use_as_onboarding_question:   # Optional: Marks this question as an onboarding question for the end user.
  sql:                          # The SQL query for answering the question.
Copy

의미 체계 모델 생성기

의미 모델 생성기 도구를 사용하여 Cortex Analyst 에 사용할 의미 체계 모델을 생성할 수 있습니다. 이 도구는 Streamlit 앱, 명령줄 또는 Python 코드에서 직접 의미 체계 모델을 생성하기 위한 여러 가지 옵션을 제공합니다. Streamlit 앱은 특히 편리하여 처음부터 의미 체계 모델을 생성하거나 Snowflake 스테이지에 업로드한 기존 모델을 반복할 수 있습니다.

의미 체계 모델을 생성하는 팁

  • 비즈니스 도메인 또는 항목별로 YAML 파일 정리하기

    • 특정 비즈니스 도메인이나 항목에 맞게 YAML 파일을 구성하여 범위를 집중적으로 유지합니다. 예를 들어, 영업 분석과 마케팅 분석에 대해 별도의 의미 체계 모델을 생성합니다.

    • 대상 그룹, 예상 질문 또는 KPIs, 필요한 데이터에 따라 사용 사례를 맞춤 설정합니다. 잘 정의된 사용 사례는 보다 풍부한 의미 체계 모델과 더 효과적인 데이터 검색으로 이어집니다.

  • 최종 사용자 관점에서 생각해보십시오

    • 사용자가 항목에 대해 궁금해할 만한 핵심 질문을 파악하고 해당 질문에 답하는 데 필요한 테이블과 열만 포함합니다.

    • 최종 사용자가 사용하는 어휘와 유사한 이름과 동의어를 사용합니다.

    • 설명 필드에 이 데이터 세트에 대한 쿼리를 처음 작성하는 사람에게 도움이 될 만한 중요한 세부 정보(예: DATETIME 열의 표준 시간대)를 포함합니다.

  • 복잡한 계산을 캡처합니다

    더 어렵거나 비즈니스에 특화된 쿼리를 식에 통합합니다.

  • 긴 테이블 대신 넓은 테이블을 사용합니다

    “metric” 및 “value”와 같은 열이 있는 테이블이 있는 경우 각 메트릭이 열이 되도록 테이블의 데이터를 스큐합니다. 이 접근법은 모델에 각 메트릭에 대한 더 많은 의미 체계 정보를 제공합니다.

  • 자동 생성된 설명 검토

    의미 체계 모델 생성기 를 사용하는 경우 테이블과 열에 대한 설명을 자동으로 생성하려고 시도합니다. 항상 이러한 설명을 검토하여 합리적이고 관련성이 있는지 확인합니다. 필요에 따라 수정합니다.

  • 간단하게 시작해서 점진적으로 확장합니다

    범위가 잘 정의된 의미 파일은 더 높은 정밀도와 결과의 정확성을 보장합니다. 적은 수의 테이블과 열로 시작하여 의미 체계 YAML을 점차 확장하여 더 많은 종류의 질문을 다룰 수 있도록 하세요. YAML 구축은 지속적인 과정이라는 점을 기억하십시오.

  • 유효성 검사된 쿼리 포함

    평이한 영어 질문과 그에 대한 답변을 모아놓은 검증된 쿼리 리포지토리 (VQR)를 사용하면 결과의 정확도와 신뢰도를 높일 수 있습니다.

알려진 제한 사항

  • Cortex Analyst 는 의미 체계 모델 파일에 1MB 크기 제한을 적용하여 API 입력의 크기를 제한합니다.

  • Cortex Analyst 는 의미 체계 YAML에 추가된 샘플 값과 검증된 쿼리의 인메모리 검색을 수행합니다. 모든 샘플 값과 검증된 쿼리를 제거한 후 의미 체계 모델은 32K 토큰(약 4 x 32K 문자 또는 약 128KB)을 초과할 수 없습니다. 의미 체계 모델 생성기 유효성 검사 명령을 사용하면 파일이 이러한 제한 내에 있는지 확인할 수 있습니다. 더 큰 컨텍스트 윈도우를 갖춘 모델에 대한 지원이 추가됨에 따라 제한이 증가할 수 있습니다.

사양

의미 체계 모델

의미 체계 모델은 테이블의 모음을 나타냅니다. 모델에는 테이블에 대한 설명이 포함되어 있으며, 각 테이블에는 테이블의 특정 측면에 대한 설명이 포함되어 있습니다. 모델에 설명된 각 테이블은 Snowflake의 물리적 기본 테이블에 매핑됩니다.

다음과 같은 필드가 있습니다.

필수 사항

name

이 의미 체계 모델에 대한 설명적 이름입니다.

고유해야 하며 따옴표로 묶지 않은 식별자 요구 사항 을 따라야 합니다. 또한 Snowflake 예약 키워드 와 충돌할 수 없습니다.

선택 사항(권장)

description

이 의미 체계 모델에 대한 설명과 이 모델이 어떤 종류의 분석에 유용한지에 대한 세부 정보입니다.

tables

이 의미 체계 모델의 논리적 테이블 목록입니다.

테이블

논리적 테이블은 물리적 데이터베이스 테이블이나 뷰에 대한 뷰로 생각할 수 있습니다. 다음과 같은 필드가 있습니다.

필수 사항

name

이 테이블에 대한 설명적 이름입니다.

고유해야 하며 따옴표로 묶지 않은 식별자 요구 사항 을 따라야 합니다. 또한 Snowflake 예약 키워드 와 충돌할 수 없습니다.

base_table

데이터베이스의 기본 테이블의 정규화된 이름입니다.

선택 사항(권장)

synonyms

이 테이블을 참조하는 데 사용된 다른 용어/구문 목록입니다. 논리적 테이블 내의 동의어 전체에서 고유해야 합니다.

description

이 테이블의 설명.

dimensions

이 테이블의 차원 열 목록입니다.

time_dimensions

이 테이블의 시간 차원 열 목록입니다.

measures

이 테이블에서 측정값의 목록입니다.

filters

있는 경우, 이 테이블의 미리 정의된 필터.

차원

차원은 상태, 사용자 유형, 플랫폼 등과 같은 범주형 값을 설명합니다. 다음과 같은 필드가 있습니다.

필수 사항

name

이 차원에 대한 설명적 이름입니다.

고유해야 하며 따옴표로 묶지 않은 식별자 요구 사항 을 따라야 합니다. 또한 Snowflake 예약 키워드 와 충돌할 수 없습니다.

expr

이 차원에 대한 SQL 식입니다. 이는 물리적 열에 대한 참조이거나 기본 테이블의 열을 하나 이상 포함하는 SQL 식일 수 있습니다.

data_type

이 차원의 데이터 타입입니다. Snowflake의 모든 데이터 타입에 대한 개요는 SQL 데이터 타입 참조 섹션을 참조하십시오. 참고로 VARIANT, OBJECT, GEOGRAPHY, ARRAY 는 현재 지원되지 않습니다.

선택 사항(권장)

synonyms

이 차원을 지칭하는 데 사용되는 다른 용어/구문 목록입니다. 이 의미 체계 모델의 모든 동의어에서 고유해야 합니다.

description

이 차원에 대한 간략한 설명과 해당 차원이 가지고 있는 데이터를 포함합니다.

unique

이 차원이 고유한 값을 가지고 있음을 나타내는 부울 값입니다.

sample_values

이 열의 샘플 값(있는 경우)입니다. 사용자 질문에서 참조될 가능성이 있는 모든 값을 추가합니다.

cortex_search_service_name

열의 리터럴 값을 검색하는 Cortex Search Service의 이름입니다. 서비스 이름과 sample_values 를 모두 지정한 경우 sample_values 필드의 값은 무시됩니다.

시간 차원

시간 차원은 판매일, 생성일, 연도와 같은 시간 값을 설명합니다. 다음과 같은 필드가 있습니다.

필수 사항

name

이 시간 차원에 대한 설명적 이름입니다.

고유해야 하며 따옴표로 묶지 않은 식별자 요구 사항 을 따라야 합니다. 또한 Snowflake 예약 키워드 와 충돌할 수 없습니다.

expr

이 열의 SQL 식입니다. 이는 물리적 열에 대한 참조이거나 기본 테이블의 열을 하나 이상 포함하는 SQL 식일 수 있습니다.

data_type

이 시간 차원의 데이터 타입입니다. Snowflake의 모든 데이터 타입에 대한 개요는 SQL 데이터 타입 참조 섹션을 참조하십시오. 참고로 VARIANT, OBJECT, GEOGRAPHY, ARRAY 는 현재 지원되지 않습니다.

선택 사항(권장)

synonyms

이 시간 차원을 지칭하는 데 사용되는 다른 용어/구문 목록입니다. 이 의미 체계 모델의 모든 동의어에서 고유해야 합니다.

description

이 차원에 대한 간략한 설명과 해당 차원이 가지고 있는 데이터를 포함합니다. 이 테이블을 사용하여 쿼리를 작성하는 데 도움이 되는 정보를 제공합니다. 예를 들어, DATETIME 열의 경우 데이터의 표준 시간대를 지정합니다.

unique:

이 열에 고유한 값이 있음을 나타내는 부울 값입니다.

sample_values:

이 열의 샘플 값(있는 경우)입니다. 사용자 질문에서 참조될 가능성이 있는 모든 값을 추가합니다. 이 필드는 선택 사항입니다.

측정값

측정값은 수익, 노출 수, 급여 등의 숫자 값을 설명합니다. 다음과 같은 필드가 있습니다.

필수 사항

name

이 측정값에 대한 설명적인 이름입니다.

고유해야 하며 따옴표로 묶지 않은 식별자 요구 사항 을 따라야 합니다. 또한 Snowflake 예약 키워드 와 충돌할 수 없습니다.

expr

이 열의 SQL 식입니다. 이는 물리적 열에 대한 참조이거나 기본 테이블의 열을 하나 이상 포함하는 SQL 식일 수 있습니다.

data_type

이 측정값의 데이터 타입입니다. Snowflake의 모든 데이터 타입에 대한 개요는 SQL 데이터 타입 참조 섹션을 참조하십시오. 참고로 VARIANT, OBJECT, GEOGRAPHY, ARRAY 는 현재 지원되지 않습니다.

선택 사항(권장)

synonyms

이 측정값을 지칭하는 데 사용되는 다른 용어/구문 목록입니다. 이 의미 체계 모델의 모든 동의어에서 고유해야 합니다.

description

이 열에 어떤 데이터가 있는지 등 이 측정값에 대한 간략한 설명입니다.

unique

이 열에 고유한 값이 있음을 나타내는 부울 값입니다.

default_aggregation

그룹화 컨텍스트에서 이 열에 적용되는 기본 집계입니다. 예시 값으로는 sum, avg, min, max, median, count, count_distinct 등이 있습니다.

sample_values

이 열의 샘플 값(있는 경우)입니다. 사용자 질문에서 참조될 가능성이 있는 모든 값을 추가합니다.

필터

필터는 필터링에 사용되는 SQL 식을 나타냅니다. 다음과 같은 필드가 있습니다.

필수 사항

name

이 필터에 대한 설명적 이름입니다.

고유해야 하며 따옴표로 묶지 않은 식별자 요구 사항 을 따라야 합니다. 또한 Snowflake 예약 키워드 와 충돌할 수 없습니다.

expr

이 필터의 SQL 식으로, 논리 열을 참조합니다.

선택 사항(권장)

synonyms

이 필터를 지칭하는 데 사용되는 다른 용어/구문 목록입니다. 이 의미 체계 모델의 모든 동의어에서 고유해야 합니다.

description

이 필터에 대한 간략한 설명으로, 이 필터가 일반적으로 어떤 용도로 사용되는지에 대한 세부 정보도 포함되어 있습니다.

기본 테이블

기본 테이블은 완전히 정규화된 테이블 이름을 나타내는 데 사용됩니다. 이는 논리적 테이블이 매핑되는 물리적 테이블입니다. 다음과 같은 필드가 있습니다.

필수 사항

database

데이터베이스의 이름입니다.

schema

스키마의 이름입니다.

table

테이블의 이름입니다.

유효성 검사된 쿼리

YAML 파일의 이 섹션의 목적과 구조에 대한 자세한 내용은 Cortex Analyst Verified Query Repository 섹션을 참조하십시오.

예시 YAML

이 섹션에서는 의미 체계 모델 YAML의 예제를 보여줍니다.

이 예제에서는 스키마에 다음 테이블이 있다고 가정합니다.

CREATE TABLE sales.public.sd_data (
    id INT PRIMARY KEY,
    dt DATETIME,
    cat VARCHAR(255),
    loc VARCHAR(255),
    cntry VARCHAR(255),
    chn VARCHAR(50),
    amt DECIMAL(10, 2),
    unts INT,
    cst DECIMAL(10, 2)
);
Copy

이 테이블에는 암호화된 열 이름과 열에 대한 의미 체계가 별로 없습니다. 다음은 이 테이블에 대한 자세한 의미 체계 정보를 제공하는 의미 체계 모델 YAML입니다.

# Name and description of the semantic model.
name: Sales Data
description: This semantic model can be used for asking questions over the sales data.

# A semantic model can contain one or more tables.
tables:

  # A logical table on top of the 'sd_data' base table.
  - name: sales_data
    description: A logical table capturing daily sales information across different store locations and product categories.

    # The fully qualified name of the base table.
    base_table:
      database: sales
      schema: public
      table: sd_data

    # Dimension columns in the logical table.
    dimensions:
      - name: product_category
        synonyms:
          - "item_category"
          - "product_type"
        description: The category of the product sold.
        expr: cat
        data_type: NUMBER
        unique: false
        sample_values:
          - "501"
          - "544"

      - name: store_country
        description: The country where the sale took place.
        expr: cntry
        data_type: TEXT
        unique: false
        sample_values:
          - "USA"
          - "GBR"

      - name: sales_channel
        synonyms:
          - "channel"
          - "distribution_channel"
        description: The channel through which the sale was made.
        expr: chn
        data_type: TEXT
        unique: false
        sample_values:
          - "FB"
          - "GOOGLE"

    # Time dimension columns in the logical table.
    time_dimensions:
      - name: sale_timestamp
        synonyms:
          - "time_of_sale"
          - "transaction_time"
        description: The time when the sale occurred. In UTC.
        expr: dt
        data_type: TIMESTAMP
        unique: false

    # Measure columns in the logical table.
    measures:
      - name: sales_amount
        synonyms:
          - "revenue"
          - "total_sales"
        description: The total amount of money generated from the sale.
        expr: amt
        data_type: NUMBER
        default_aggregation: sum

      - name: sales_tax
        description: The sales tax paid for this sale.
        expr: amt * 0.0975
        data_type: NUMBER
        default_aggregation: sum

      - name: units_sold
        synonyms:
          - "quantity_sold"
          - "number_of_units"
        description: The number of units sold in the transaction.
        expr: unts
        data_type: NUMBER
        default_aggregation: sum

      - name: cost
        description: The cost of the product sold.
        expr: cst
        data_type: NUMBER
        default_aggregation: sum

      - name: profit
        synonyms:
          - "earnings"
          - "net income"
        description: The profit generated from a sale.
        expr: amt - cst
        data_type: NUMBER
        default_aggregation: sum

    # A table can define commonly used filters over it. These filters can then be referenced in user questions directly.
    filters:
      - name: north_america
        synonyms:
          - "North America"
          - "N.A."
          - "NA"
        description: "A filter to restrict only to north american countries"
        expr: cntry IN ('canada', 'mexico', 'usa')
Copy