SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML¶
Cria uma visualização semântica de uma especificação do modelo semântico no formato YAML, ou verifica se você pode usar uma especificação de modelo semântico para criar uma visualização semântica.
O procedimento armazenado usa o nome da especificação YAML do nome da visualização semântica.
Se já existir uma visualização semântica com o mesmo nome, o procedimento armazenado tenta substituir essa visualização semântica e copiar as concessões dessa visualização semântica. Tem o mesmo efeito que executar CREATE OR REPLACE SEMANTIC VIEW … COPY GRANTS.
- Consulte também:
Sintaxe¶
SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML(
'<fully_qualified_schema_name>' ,
'<yaml_specification>' ,
[ <verify_only> ]
)
Argumentos¶
Obrigatório:
'fully_qualified_schema_name'Nome totalmente qualificado do esquema em que você deseja criar a visualização semântica.
Você deve qualificar o nome do esquema com o nome do banco de dados (por exemplo,
my_db.my_schema). Caso contrário, ocorrerá um erro.'yaml_specification'Especificação de modelo semântico no formato YAML.
Se a especificação contiver aspas, barras invertidas ou novas linhas, você pode usar um constante de string entre cifrões para esse argumento.
Opcional:
verify_onlySe TRUE, verifica se você pode usar o modelo semântico especificado por
'yaml_specification'para criar uma visualização semântica.Você pode especificar isto para verificar se pode criar uma visualização semântica a partir do modelo antes de tentar criar a visualização semântica.
Padrão: FALSE
Retornos¶
Retorna um valor VARCHAR contendo o status da operação para criar a visualização semântica ou verificar se a visualização semântica pode ser criada.
Se o procedimento armazenado não criar a visualização semântica ou verificar se a visualização semântica pode ser criada, o procedimento armazenado gerará uma exceção.
Requisitos de controle de acesso¶
A função usada para executar essa operação deve ter, no mínimo, os seguintes privilégios:
Privilégio |
Objeto |
Notas |
|---|---|---|
CREATE SEMANTIC VIEW |
Esquema |
Necessário para criar uma nova exibição semântica. |
SELECT |
Tabela, exibição |
Necessário em todas as tabelas e/ou exibições usadas na definição da exibição semântica. |
OWNERSHIP |
Visualização semântica existente com o mesmo nome. |
Se já existir uma visualização semântica com o mesmo nome, o procedimento armazenado tentará substituir essa visualização semântica. Para substituir uma visualização semântica existente, você deve usar uma função que tenha recebido o privilégio 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). |
A operação em um objeto de esquema requer pelo menos um privilégio no banco de dados pai e um privilégio no esquema pai.
Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.
Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.
Notas de uso¶
Se o nome do banco de dados ou esquema for um identificador entre aspas duplas (por exemplo, se o nome contiver espaços), você deve incluir aspas duplas em torno do nome. Por exemplo:
CALL SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML(
'"my database"."my schema"',
...
);
Exemplos¶
O exemplo a seguir verifica se você pode usar uma determinada especificação de modelo semântico em YAML para criar uma visualização semântica chamada tpch_analysis no banco de dados my_db e no esquema my_schema:
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);
Se a especificação for válida, o procedimento armazenado retorna a seguinte mensagem:
+----------------------------------------------------------------------------------+
| SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML |
|----------------------------------------------------------------------------------|
| YAML file is valid for creating a semantic view. No object has been created yet. |
+----------------------------------------------------------------------------------+
Se a sintaxe YAML for inválida, o procedimento armazenado lançará uma exceção. Por exemplo, se faltar dois pontos:
relationships
- name: LINE_ITEM_TO_ORDERS
o procedimento armazenado lançará uma exceção, indicando que a sintaxe YAML é inválida:
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
^
Se a especificação se referir a uma tabela física que não existe, o procedimento armazenado vai gerar uma exceção:
base_table:
database: SNOWFLAKE_SAMPLE_DATA
schema: TPCH_SF1
table: NONEXISTENT
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.
Da mesma forma, se a especificação se referir a uma coluna de chave primária que não existe, o procedimento armazenado vai gerar uma exceção:
primary_key:
columns:
- NONEXISTENT
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'
O seguinte exemplo cria uma visualização semântica chamada tpch_analysis no banco de dados my_db e no esquema my_schema:
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
$$
);
+-----------------------------------------+
| SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML |
|-----------------------------------------|
| Semantic view was successfully created. |
+-----------------------------------------+