SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML¶
Erstellt eine semantische Ansicht von einer :doc:`-Spezifikation des semantischen Modells im YAML-Format </user-guide/snowflake-cortex/cortex-analyst/semantic-model-spec>`oder prüft, ob Sie eine Spezifikation des semantischen Modells verwenden können, um eine semantische Ansicht zu erstellen.
Die gespeicherte Prozedur verwendet den Namen der YAML-Spezifikation für den Namen der semantischen Ansicht.
Wenn bereits eine semantische Ansicht mit demselben Namen vorhanden ist, versucht die gespeicherte Prozedur, diese semantische Ansicht zu ersetzen und die Berechtigungen aus dieser semantischen Ansicht zu kopieren. Dies hat die gleiche Wirkung wie das Ausführen von CREATE OR REPLACE SEMANTIC VIEW … COPY GRANTS.
Syntax¶
SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML(
'<fully_qualified_schema_name>' ,
'<yaml_specification>' ,
[ <verify_only> ]
)
Argumente¶
Benötigt:
'fully_qualified_schema_name'
Vollqualifizierter Name des Schemas, in dem Sie die semantische Ansicht erstellen möchten.
Sie müssen den Schemanamen mit dem Datenbanknamen (z. B.
my_db.my_schema
) qualifizieren. Andernfalls tritt ein Fehler auf.'yaml_specification'
Spezifikation des semantischen Modells im YAML-Format.
Wenn die Spezifikation Anführungszeichen, Backslashes oder Zeilenumbrüche enthält, können Sie eine Zeichenfolgenkonstante in Dollarzeichen für dieses Argument verwenden.
Optional:
verify_only
Wenn TRUE, wird überprüft, ob Sie das durch
'yaml_specification'
angegebene semantische Modell verwenden können, um eine semantische Ansicht zu erstellen.Sie können dies angeben, um zu überprüfen, ob Sie eine semantische Ansicht aus dem Modell erstellen können, bevor Sie versuchen, die semantische Ansicht zu erstellen.
Standard: FALSE
Rückgabewerte¶
Gibt einen VARCHAR-Wert zurück, der den Status des Vorgangs zum Erstellen der semantischen Ansicht oder zur Überprüfung, ob die semantische Ansicht erstellt werden kann, enthält.
Wenn die gespeicherte Prozedur die semantische Ansicht nicht erstellt oder nicht überprüft, ob die semantische Ansicht erstellt werden kann, löst die gespeicherte Prozedur eine Ausnahme aus.
Anforderungen an die Zugriffssteuerung¶
Eine Rolle, die zur Ausführung dieser Operation verwendet wird, muss mindestens die folgenden Berechtigungen haben:
Berechtigung |
Objekt |
Anmerkungen |
---|---|---|
CREATE SEMANTIC VIEW |
Schema |
Erforderlich, um eine neue semantische Ansicht zu erstellen. |
SELECT |
Tabelle, Ansicht |
Erforderlich für alle in der Definition der semantischen Ansicht verwendeten Tabellen und/oder Ansichten. |
OWNERSHIP |
Vorhandene semantische Ansicht mit demselben Namen. |
Wenn bereits eine semantische Ansicht mit demselben Namen vorhanden ist, versucht die gespeicherte Prozedur, diese semantische Ansicht zu ersetzen. Um eine bestehende semantische Ansicht zu ersetzen, müssen Sie eine Rolle verwenden, der die OWNERSHIP-Berechtigung zugewiesen wurde. 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-Berechtigung für die übergeordnete Datenbank und das Schema ist erforderlich, um Operationen an einem beliebigen Objekt in einem Schema durchzuführen.
Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.
Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.
Nutzungshinweise¶
Wenn der Name der Datenbank oder des Schemas ein Bezeichner mit doppelten Anführungszeichen ist (z. B. wenn der Name Leerzeichen enthält), müssen Sie den Namen in doppelte Anführungszeichen setzen. Beispiel:
CALL SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML(
'"my database"."my schema"',
...
);
Beispiele¶
Das folgende Beispiel bestätigt, dass Sie eine bestimmte Spezifikation eines semantischen Modells in YAML verwenden können, um eine semantische Ansicht namens tpch_analysis
in der Datenbank my_db
und im Schema my_schema
zu erstellen:
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);
Wenn die Spezifikation gültig ist, gibt die gespeicherte Prozedur die folgende Meldung zurück:
+----------------------------------------------------------------------------------+
| SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML |
|----------------------------------------------------------------------------------|
| YAML file is valid for creating a semantic view. No object has been created yet. |
+----------------------------------------------------------------------------------+
Wenn die YAML-Syntax ungültig ist, löst die gespeicherte Prozedur eine Ausnahme aus. Wenn zum Beispiel ein Doppelpunkt fehlt:
relationships
- name: LINE_ITEM_TO_ORDERS
Die gespeicherte Prozedur löst eine Ausnahme aus, die anzeigt, dass die YAML-Syntax ungültig ist:
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
^
Wenn sich die Spezifikation auf eine physische Tabelle bezieht, die nicht existiert, löst die gespeicherte Prozedur eine Ausnahme aus:
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.
In ähnlicher Weise löst die gespeicherte Prozedur eine Ausnahme aus, wenn sich die Spezifikation auf eine Primärschlüsselspalte bezieht, die nicht existiert:
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'
Im folgenden Beispiel wird eine semantische Ansicht namens tpch_analysis
in der Datenbank my_db
und im Schema my_schema
erstellt:
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. |
+-----------------------------------------+