SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML

YAML 형식의 의미 체계 모델 사양 에서 의미 체계 뷰 를 만들거나 의미 체계 모델 사양을 사용하여 의미 체계 뷰를 생성할 수 있는지 확인합니다.

저장 프로시저는 의미 체계 뷰의 이름에 대한 YAML 사양의 이름을 사용합니다.

이름이 같은 의미 체계 뷰가 이미 있는 경우 저장 프로시저는 해당 의미 체계 뷰를 바꾸고 해당 의미 체계 뷰에서 권한 부여를 복사하려고 시도합니다. 이 작업은 CREATE OR REPLACE SEMANTIC VIEW … COPY GRANTS 를 실행하는 것과 동일한 효과가 있습니다.

참고 항목:

SYSTEM$READ_YAML_FROM_SEMANTIC_VIEW, CREATE SEMANTIC VIEW

구문

SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML(
  '<fully_qualified_schema_name>' ,
  '<yaml_specification>' ,
  [ <verify_only> ]
)
Copy

인자

필수:

'fully_qualified_schema_name'

의미 체계 뷰를 생성하려는 스키마의 정규화된 이름 입니다.

스키마 이름을 데이터베이스 이름으로 정규화합니다(예: my_db.my_schema). 그렇지 않으면 오류가 발생합니다.

'yaml_specification'

YAML 형식의 의미 체계 모델 사양 입니다.

사양에 따옴표, 백슬래시 또는 줄 바꿈이 포함된 경우 이 인자에 달러 기호로 묶인 문자열 상수 를 사용할 수 있습니다.

선택 사항:

verify_only

TRUE인 경우 'yaml_specification' 으로 지정된 의미 체계 모델을 사용하고 의미 체계 뷰를 만들 수 있습니다.

이를 지정하여 의미 체계 뷰 생성을 시도하기 전에 모델에서 의미 체계 뷰를 만들 수 있는지 확인할 수 있습니다.

기본값: FALSE

반환

의미 체계 뷰를 생성하거나 의미 체계 뷰를 생성할 수 있는지 확인하는 작업의 상태를 포함하는 VARCHAR 값을 반환합니다.

저장 프로시저가 의미 체계 뷰 생성에 실패하거나 의미 체계 뷰를 생성할 수 있는지 확인하지 못하면 저장 프로시저에서 예외가 발생합니다.

액세스 제어 요구 사항

이 작업을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.

권한

오브젝트

참고

CREATE SEMANTIC VIEW

스키마

새 시맨틱 뷰를 만드는 데 필요합니다.

SELECT

테이블, 뷰

시맨틱 뷰 정의에 사용되는 모든 테이블 및/또는 뷰에 필요합니다.

OWNERSHIP

이름이 같은 기존 의미 체계 뷰입니다.

이름이 같은 의미 체계 뷰가 이미 있는 경우 저장 프로시저는 해당 의미 체계 뷰를 바꾸려고 시도합니다. 기존 의미 체계 뷰를 바꾸려면 OWNERSHIP 권한이 부여된 역할을 사용해야 합니다.

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

스키마의 모든 오브젝트에 대해 작업을 수행하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한.

지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.

보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.

사용법 노트

데이터베이스 또는 스키마의 이름이 큰따옴표로 묶인 식별자 인 경우(예: 이름에 공백이 포함된 경우) 이름을 큰따옴표로 묶어야 합니다. 예:

CALL SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML(
  '"my database"."my schema"',
  ...
);
Copy

다음 예제에서는 YAML에서 지정된 의미 체계 모델 사양을 사용하여 데이터베이스 my_db 및 스키마 my_schematpch_analysis 이름의 의미 체계를 만들 수 있는지 확인합니다.

CALL SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML(
  'my_db.my_schema',
  $$
  name: TPCH_REV_ANALYSIS
  description: Semantic view for revenue analysis
  tables:
    - name: CUSTOMERS
      description: Main table for customer data
      base_table:
        database: SNOWFLAKE_SAMPLE_DATA
        schema: TPCH_SF1
        table: CUSTOMER
      primary_key:
        columns:
          - C_CUSTKEY
      dimensions:
        - name: CUSTOMER_NAME
          synonyms:
            - customer name
          description: Name of the customer
          expr: customers.c_name
          data_type: VARCHAR(25)
        - name: C_CUSTKEY
          expr: C_CUSTKEY
          data_type: VARCHAR(134217728)
      metrics:
        - name: CUSTOMER_COUNT
          description: Count of number of customers
          expr: COUNT(c_custkey)
    - name: LINE_ITEMS
      description: Line items in orders
      base_table:
        database: SNOWFLAKE_SAMPLE_DATA
        schema: TPCH_SF1
        table: LINEITEM
      primary_key:
        columns:
          - L_ORDERKEY
          - L_LINENUMBER
      dimensions:
        - name: L_ORDERKEY
          expr: L_ORDERKEY
          data_type: VARCHAR(134217728)
        - name: L_LINENUMBER
          expr: L_LINENUMBER
          data_type: VARCHAR(134217728)
      facts:
        - name: DISCOUNTED_PRICE
          description: Extended price after discount
          expr: l_extendedprice * (1 - l_discount)
          data_type: "NUMBER(25,4)"
        - name: LINE_ITEM_ID
          expr: "CONCAT(l_orderkey, '-', l_linenumber)"
          data_type: VARCHAR(134217728)
    - name: ORDERS
      synonyms:
        - sales orders
      description: All orders table for the sales domain
      base_table:
        database: SNOWFLAKE_SAMPLE_DATA
        schema: TPCH_SF1
        table: ORDERS
      primary_key:
        columns:
          - O_ORDERKEY
      dimensions:
        - name: ORDER_DATE
          description: Date when the order was placed
          expr: o_orderdate
          data_type: DATE
        - name: ORDER_YEAR
          description: Year when the order was placed
          expr: YEAR(o_orderdate)
          data_type: "NUMBER(4,0)"
        - name: O_ORDERKEY
          expr: O_ORDERKEY
          data_type: VARCHAR(134217728)
        - name: O_CUSTKEY
          expr: O_CUSTKEY
          data_type: VARCHAR(134217728)
      facts:
        - name: COUNT_LINE_ITEMS
          expr: COUNT(line_items.line_item_id)
          data_type: "NUMBER(18,0)"
      metrics:
        - name: AVERAGE_LINE_ITEMS_PER_ORDER
          description: Average number of line items per order
          expr: AVG(orders.count_line_items)
        - name: ORDER_AVERAGE_VALUE
          description: Average order value across all orders
          expr: AVG(orders.o_totalprice)
  relationships:
    - name: LINE_ITEM_TO_ORDERS
      left_table: LINE_ITEMS
      right_table: ORDERS
      relationship_columns:
        - left_column: L_ORDERKEY
          right_column: O_ORDERKEY
      relationship_type: many_to_one
    - name: ORDERS_TO_CUSTOMERS
      left_table: ORDERS
      right_table: CUSTOMERS
      relationship_columns:
        - left_column: O_CUSTKEY
          right_column: C_CUSTKEY
      relationship_type: many_to_one
  $$,
TRUE);
Copy

이 사양이 유효한 경우 해당 저장 프로시저는 다음 메시지를 반환합니다.

+----------------------------------------------------------------------------------+
| SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML                                            |
|----------------------------------------------------------------------------------|
| YAML file is valid for creating a semantic view. No object has been created yet. |
+----------------------------------------------------------------------------------+

YAML 구문이 유효하지 않은 경우 해당 저장 프로시저는 예외를 발생시킵니다. 예를 들어, 콜론이 누락된 경우 다음 결과가 나타납니다.

relationships
  - name: LINE_ITEM_TO_ORDERS
Copy

저장 프로시저는 예외를 발생시켜 YAML 구문이 유효하지 않음을 나타냅니다.

392400 (22023): Uncaught exception of type 'EXPRESSION_ERROR' on line 3 at position 23 :
  Invalid semantic model YAML: while scanning a simple key
   in 'reader', line 90, column 3:
        relationships
        ^
  could not find expected ':'
   in 'reader', line 91, column 11:
          - name: LINE_ITEM_TO_ORDERS
                ^

해당 사양이 존재하지 않는 물리적 테이블을 참조하는 경우 저장 프로시저는 예외를 발생시킵니다.

base_table:
  database: SNOWFLAKE_SAMPLE_DATA
  schema: TPCH_SF1
  table: NONEXISTENT
Copy
002003 (42S02): Uncaught exception of type 'EXPRESSION_ERROR' on line 3 at position 23 :
  SQL compilation error:
  Table 'SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.NONEXISTENT' does not exist or not authorized.

마찬가지로, 사양이 존재하지 않는 기본 키 열을 참조하는 경우 저장 프로시저는 예외를 발생시킵니다.

primary_key:
  columns:
    - NONEXISTENT
Copy
000904 (42000): Uncaught exception of type 'EXPRESSION_ERROR' on line 3 at position 23 :
  SQL compilation error: error line 0 at position -1
  invalid identifier 'NONEXISTENT'

다음 예제에서는 데이터베이스 my_db 및 스키마 my_schema 에서 tpch_analysis 이름의 의미 체계 뷰를 만듭니다.

CALL SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML(
  'my_db.my_schema',
  $$
  name: TPCH_REV_ANALYSIS
  description: Semantic view for revenue analysis
  tables:
    - name: CUSTOMERS
      description: Main table for customer data
      base_table:
        database: SNOWFLAKE_SAMPLE_DATA
        schema: TPCH_SF1
        table: CUSTOMER
      primary_key:
        columns:
          - C_CUSTKEY
      dimensions:
        - name: CUSTOMER_NAME
          synonyms:
            - customer name
          description: Name of the customer
          expr: customers.c_name
          data_type: VARCHAR(25)
        - name: C_CUSTKEY
          expr: C_CUSTKEY
          data_type: VARCHAR(134217728)
      metrics:
        - name: CUSTOMER_COUNT
          description: Count of number of customers
          expr: COUNT(c_custkey)
    - name: LINE_ITEMS
      description: Line items in orders
      base_table:
        database: SNOWFLAKE_SAMPLE_DATA
        schema: TPCH_SF1
        table: LINEITEM
      primary_key:
        columns:
          - L_ORDERKEY
          - L_LINENUMBER
      dimensions:
        - name: L_ORDERKEY
          expr: L_ORDERKEY
          data_type: VARCHAR(134217728)
        - name: L_LINENUMBER
          expr: L_LINENUMBER
          data_type: VARCHAR(134217728)
      facts:
        - name: DISCOUNTED_PRICE
          description: Extended price after discount
          expr: l_extendedprice * (1 - l_discount)
          data_type: "NUMBER(25,4)"
        - name: LINE_ITEM_ID
          expr: "CONCAT(l_orderkey, '-', l_linenumber)"
          data_type: VARCHAR(134217728)
    - name: ORDERS
      synonyms:
        - sales orders
      description: All orders table for the sales domain
      base_table:
        database: SNOWFLAKE_SAMPLE_DATA
        schema: TPCH_SF1
        table: ORDERS
      primary_key:
        columns:
          - O_ORDERKEY
      dimensions:
        - name: ORDER_DATE
          description: Date when the order was placed
          expr: o_orderdate
          data_type: DATE
        - name: ORDER_YEAR
          description: Year when the order was placed
          expr: YEAR(o_orderdate)
          data_type: "NUMBER(4,0)"
        - name: O_ORDERKEY
          expr: O_ORDERKEY
          data_type: VARCHAR(134217728)
        - name: O_CUSTKEY
          expr: O_CUSTKEY
          data_type: VARCHAR(134217728)
      facts:
        - name: COUNT_LINE_ITEMS
          expr: COUNT(line_items.line_item_id)
          data_type: "NUMBER(18,0)"
      metrics:
        - name: AVERAGE_LINE_ITEMS_PER_ORDER
          description: Average number of line items per order
          expr: AVG(orders.count_line_items)
        - name: ORDER_AVERAGE_VALUE
          description: Average order value across all orders
          expr: AVG(orders.o_totalprice)
  relationships:
    - name: LINE_ITEM_TO_ORDERS
      left_table: LINE_ITEMS
      right_table: ORDERS
      relationship_columns:
        - left_column: L_ORDERKEY
          right_column: O_ORDERKEY
      relationship_type: many_to_one
    - name: ORDERS_TO_CUSTOMERS
      left_table: ORDERS
      right_table: CUSTOMERS
      relationship_columns:
        - left_column: O_CUSTKEY
          right_column: C_CUSTKEY
      relationship_type: many_to_one
  $$
);
Copy
+-----------------------------------------+
| SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML   |
|-----------------------------------------|
| Semantic view was successfully created. |
+-----------------------------------------+