CREATE SEMANTIC VIEW

Erstellt eine neue semantische Ansicht im aktuellen/angegebenen Schema.

Die semantische Ansicht muss /user-guide/views-semantic/validation-rules`diesen Validierungsregeln entsprechen.

Siehe auch::

ALTER SEMANTIC VIEW , DESCRIBE SEMANTIC VIEW , DROP SEMANTIC VIEW , SHOW SEMANTIC VIEWS , SHOW SEMANTIC DIMENSIONS , SHOW SEMANTIC DIMENSIONS FOR METRIC , SHOW SEMANTIC FACTS , SHOW SEMANTIC METRICS , SYSTEM$CREATE_SEMANTIC_VIEW_FROM_YAML

Syntax

CREATE [ OR REPLACE ] SEMANTIC VIEW [ IF NOT EXISTS ] <name>
  TABLES ( logicalTable [ , ... ] )
  [ RELATIONSHIPS ( relationshipDef [ , ... ] ) ]
  [ FACTS ( factExpression [ , ... ] ) ]
  [ DIMENSIONS ( dimensionExpression [ , ... ] ) ]
  [ METRICS ( { metricExpression | windowFunctionMetricExpression } [ , ... ] ) ]
  [ COMMENT = '<comment_about_semantic_view>' ]
  [ AI_SQL_GENERATION '<instructions_for_sql_generation>' ]
  [ AI_QUESTION_CATEGORIZATION '<instructions_for_question_categorization>' ]
  [ COPY GRANTS ]

Wobei:

  • Die Parameter für logische Tabellen sind:

    logicalTable ::=
      [ <table_alias> AS ] <table_name>
      [ PRIMARY KEY ( <primary_key_column_name> [ , ... ] ) ]
      [
        UNIQUE ( <unique_column_name> [ , ... ] )
        [ ... ]
      ]
      [
        CONSTRAINT [ <constraint_name> ]
          DISTINCT RANGE BETWEEN <start_column> AND <end_column> EXCLUSIVE
      ]
      [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ]
      [ COMMENT = '<comment_about_table>' ]
    
  • Die Parameter für Beziehungen sind:

    relationshipDef ::=
      [ <relationship_identifier> AS ]
      <table_alias> ( <column_name> [ , ... ] )
      REFERENCES
      <ref_table_alias> [ (
        [ ASOF ] <ref_column_name> [ , ... ] |
        BETWEEN <start_column> AND <end_column> EXCLUSIVE
      ) ]
    
  • Die Parameter für Ausdrücke in den Definitionen von Fakten sind:

    factExpression ::=
      [ { PRIVATE | PUBLIC } ] <table_alias>.<fact> AS <sql_expr>
      [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ]
      [ COMMENT = '<comment_about_the_fact>' ]
    
  • Die Parameter für Ausdrücke in den Definitionen von Dimensionen sind:

    dimensionExpression ::=
      [ PUBLIC ] <table_alias>.<dimension> AS <sql_expr>
      [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ]
      [ COMMENT = '<comment_about_the_dimension>' ]
      [ WITH CORTEX SEARCH SERVICE <search_service_name> [ USING <search_service_column_name> ] ]
    
  • Die Parameter für Ausdrücke in den Definitionen von Kennzahlen sind:

    metricExpression ::=
      [ { PRIVATE | PUBLIC } ] <table_alias>.<metric>
        [ USING ( <relationship_name> [ , ... ] ) ]
        [
          NON ADDITIVE BY (
            <dimension> [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ]
            [ , ... ]
          )
        ]
        AS <sql_expr>
      [ WITH SYNONYMS [ = ] ( '<synonym>' [ , ... ] ) ]
      [ COMMENT = '<comment_about_the_metric>' ]
    
  • Sie können eine Kennzahl definieren, die eine Fensterfunktion verwendet (eine Fensterfunktionskennzahl), indem Sie die folgende Syntax verwenden:

    windowFunctionMetricExpression ::=
      [ { PRIVATE | PUBLIC } ] <table_alias>.<metric> AS
        <window_function>( <metric> ) OVER (
          [ PARTITION BY { <exprs_using_dimensions_or_metrics> | EXCLUDING <dimensions> } ]
          [ ORDER BY <exprs_using_dimensions_or_metrics> [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ]
          [ <windowFrameClause> ]
        )
    

    Weitere Informationen zu dieser Syntax finden Sie unter Parameter für Fensterfunktionskennzahlen.

Bemerkung

Die Reihenfolge der Klauseln ist wichtig. Sie müssen zum Beispiel die FACTS-Klausel vor der DIMENSIONS-Klausel angeben.

Sie können sich auf semantische Ausdrücke beziehen, die in späteren Klauseln definiert werden. Selbst wenn beispielsweise fact_2 nach fact_1 definiert ist, können Sie fact_2 in der Definition von fact_1 verwenden.

Erforderliche Parameter

name

Gibt den Namen der semantischen Ansicht an; der Name muss für das Schema, in dem die Tabelle erstellt wird, eindeutig sein.

Darüber hinaus muss der Bezeichner mit einem Buchstaben beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B. "My object"). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.

Weitere Informationen dazu finden Sie unter Anforderungen an Bezeichner.

Optionale Parameter

COMMENT = 'comment_about_semantic_view'

Gibt einen Kommentar zur semantischen Ansicht an.

AI_SQL_GENERATION 'instructions_for_sql_generation'

Gibt Anweisungen für Cortex Analyst an, die erklären, wie die SQL-Anweisung generiert wird.

Weitere Informationen dazu finden Sie unter Bereitstellung kundenspezifischer Anweisungen für Cortex Analyst.

AI_QUESTION_CATEGORIZATION 'instructions_for_question_categorization'

Gibt Anweisungen für Cortex Analyst an, die erklären, wie Fragen klassifiziert werden.

Weitere Informationen dazu finden Sie unter Bereitstellung kundenspezifischer Anweisungen für Cortex Analyst.

COPY GRANTS

Wenn Sie OR REPLACE angeben, um eine bestehende semantische Ansicht durch eine neue semantische Ansicht zu ersetzen, können Sie diesen Parameter so einstellen, dass alle Berechtigungen, die für die bestehende semantische Ansicht gewährt wurden, in die neue semantische Ansicht kopiert werden.

Der Befehl kopiert alle Berechtigungen außer OWNERSHIP aus der bestehenden semantischen Ansicht in die neue semantische Ansicht. Die Rolle, die die Anweisung CREATE SEMANTIC VIEW ausführt, ist Eigentümer der neuen Ansicht.

Die neue semantische Ansicht übernimmt keine zukünftigen Berechtigungen, die für den Objekttyp im Schema definiert werden.

Die Operation zum Kopieren von Berechtigungen erfolgt atomar mit der Anweisung CREATE SEMANTIC VIEW (mit anderen Worten, innerhalb derselben Transaktion).

Wenn Sie COPY GRANTS weglassen, erbt die neue semantische Ansicht keine expliziten Zugriffsrechte, die für die bestehende semantische Ansicht gewährt wurden, aber sie erbt alle zukünftigen Berechtigungen, die für den Objekttyp im Schema definiert sind.

Parameter für logische Tabellen

Diese Parameter sind Teil der Syntax für logische Tabellen:

table_alias AS

Gibt einen optionalen Alias für die logische Tabelle an.

  • Wenn Sie einen Alias angeben, müssen Sie diesen Alias verwenden, wenn Sie sich in Beziehungen, Fakten, Dimensionen und Metriken auf die logische Tabelle beziehen.

  • Wenn Sie keinen Alias angeben, verwenden Sie den unqualifizierten logischen Tabellennamen, um auf die Tabelle zu verweisen.

table_name

Gibt den Namen der logischen Tabelle an.

PRIMARY KEY ( primary_key_column_name [ , ... ] )

Gibt die Namen von einer oder mehreren Spalten in der logischen Tabelle an, die als Primärschlüssel der Tabelle dienen.

UNIQUE ( unique_column_name [ , ... ] )

Gibt den Namen einer Spalte an, die einen eindeutigen Wert enthält, oder die Namen von Spalten, die eindeutige Kombinationen von Werten enthalten.

Wenn zum Beispiel die Spalte service_id eindeutige Werte enthält, geben Sie Folgendes an:

TABLES(
  ...
  product_table UNIQUE (service_id)

Wenn die Kombination der Werte in den Spalten product_area_id und product_id eindeutig ist, geben Sie Folgendes an:

TABLES(
  ...
  product_table UNIQUE (product_area_id, product_id)
  ...

Sie können mehrere Spalten und mehrere Kombinationen von Spalten als eindeutig in einer bestimmten logischen Tabelle identifizieren:

TABLES(
  ...
  product_table UNIQUE (product_area_id, product_id) UNIQUE (service_id)
  ...

Bemerkung

Wenn Sie eine Spalte bereits als Primärschlüsselspalte identifiziert haben (indem Sie PRIMARY KEY verwenden), fügen Sie die Klausel UNIQUE für diese Spalte nicht hinzu.

CONSTRAINT [ constraint_name ] . DISTINCT RANGE BETWEEN start_column AND end_column EXCLUSIVE

Gibt eine Einschränkung für eine Bereichsverknüpfung an.

constraint_name

Gibt einen optionalen Namen für die Einschränkung an.

Wenn Sie diesen Namen weglassen, verwendet der Befehl einen vom System generierten Namen für die Einschränkung.

DISTINCT RANGE BETWEEN start_column AND end_column EXCLUSIVE gibt an, dass in jeder Zeile der Bereich zwischen start_column und end_column ein eindeutiger Bereich ist:

  • Der Bereich ist ein halboffenes Intervall, wobei der Bereich auf der linken Seite (start_column) geschlossen ist und auf der rechten Seite (end_column) geöffnet ist.

    Mit anderen Worten: Die Zeit auf der linken Seite ist im Bereich enthalten, aber die Zeit auf der rechten Seite ist aus dem Bereich ausgeschlossen.

    Beispiel: Für eine Zeile in dieser Tabelle, wenn der Wert in start_column 2024-01-15 00:00:00.000 ist, und der Wert in end_column 2024-02-01 00:00:00.000 ist, lautet der Bereich folgendermaßen:

    2024-01-15 00:00:00.000 <= timestamp_from_other_table < 2024-02-01 00:00:00.000

    Der Zeitstempel 2024-01-15 00:00:00.000 ist in diesem Bereich enthalten, aber der Zeitstempel 2024-02-01 00:00:00.000 ist nicht enthalten.

  • start_column und end_column müssen physische Spalten aus derselben Tabelle oder Fakten oder Dimensionen aus derselben Tabelle sein.

WITH SYNONYMS [ = ] ( 'synonym' [ , ... ] )

Gibt ein oder mehrere Synonyme für die logische Tabelle an. Im Gegensatz zu Aliasen werden Synonyme nur zu Informationszwecken verwendet. Sie verwenden Synonyme nicht, um in Beziehungen, Dimensionen, Metriken und Fakten auf die logische Tabelle zu verweisen.

COMMENT = 'comment_about_table'

Gibt einen Kommentar zu der logischen Tabelle an.

Parameter für Beziehungen

Diese Parameter sind Teil der Syntax für Beziehungen:

relationship_identifier AS

Gibt einen optionalen Bezeichner für die Beziehung an.

table_alias ( column_name [ , ... ] )

Gibt eine der logischen Tabellen und eine oder mehrere ihrer Spalten an, die sich auf Spalten in einer anderen logischen Tabelle beziehen.

ref_table_alias [ ( ... ) ]

Gibt die andere logische Tabelle an, auf die die erste logische Tabelle verweist.

Sie können eine der folgenden Möglichkeiten in Klammern angeben, je nachdem, wie Sie die Tabellen verknüpfen möchten:

ref_column_name [ , ... ]

Gibt eine Spalte an, die mit dem PRIMARY KEY oder der UNIQUE-Einschränkung in der Definition der logischen Tabelle identifiziert wird.

ASOF ref_column_name [ , ... ] )

Gibt für eine ASOF-Verknüpfung eine Spalte mit einem der unterstützten Typen an.

Bemerkung

Sie können höchstens ein ASOF-Schlüsselwort in der Definition einer bestimmten Beziehung angeben. Sie können dieses Schlüsselwort vor jeder Spalte in der Liste angeben.

BETWEEN start_column AND end_column EXCLUSIVE

Gibt für eine Bereichsverknüpfung den Bereich der möglichen Werte in der ersten Tabelle an.

start_column . end_column

Gibt die Spalten an, die den Anfang und das Ende des Bereichs definieren.

Bemerkung

column_name muss einen Datentyp haben, der umgewandelt werden kann in die Datentypen für start_column und end_column.

Parameter für Fakten, Dimensionen und Metriken

In einer semantischen Ansicht müssen Sie mindestens eine Dimension oder Metrik definieren, was bedeutet, dass Sie mindestens die DIMENSIONS-Klausel oder die METRICS-Klausel angeben müssen.

Diese Parameter sind Teil der Syntax zur Definition von Fakten, Dimensionen oder Kennzahlen:

{ PRIVATE | PUBLIC }

Gibt an, ob ein Fakt oder eine Kennzahl privat oder öffentlich ist. Fakten und Kennzahlen, die als privat gekennzeichnet sind, können nicht abgefragt oder in einer Abfragebedingung verwendet werden.

Bemerkung

Sie können eine Dimension nicht als privat markieren. Dimensionen sind immer öffentlich. Bei einer Dimension ist die Wirkung dieselbe, egal ob Sie PUBLIC angeben oder weglassen.

Wenn Sie PRIVATE und PUBLIC weglassen, ist die Dimension, der Fakt oder die Kennzahl standardmäßig öffentlich.

table_alias.semantic_expression_name

Gibt einen Namen für eine Dimension, einen Fakt oder eine Kennzahl an.

USING relationship_name [ , ... ]

Gibt bei Definitionen für die Kennzahl die Beziehung an, die für die Verknüpfung der Tabellen und die Berechnung der Kennzahl verwendet werden soll, wenn es mehrere Beziehungspfade zwischen zwei logischen Tabellen gibt.

Um eine abgeleitete Metrik (eine Metrik, die mehrere Metriken aus verschiedenen logischen Tabellen kombiniert) zu definieren, lassen Sie table_alias. aus Namen weg.

Siehe Wie Snowflake semantische Ansichten validiert für die Regeln zur Definition einer gültigen semantischen Ansicht.

NON ADDITIVE BY ( dimension [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] [ , ... ] )

Gibt eine Liste von Dimensionen an, die bei der Summe der Kennzahl nicht verwendet werden sollen.

Stattdessen werden die Zeilen während der Abfrageverarbeitung nach den nicht additiven Dimensionen sortiert, und die Werte der letzten Zeilen (die neuesten Snapshots der Werte) werden aggregiert, um die Kennzahl zu berechnen.

{ ASC | DESC }

Sortiert optional die Werte der nicht additiven Dimensionen in aufsteigender Reihenfolge (niedrigster bis höchster Wert) oder absteigender Reihenfolge (höchster bis niedrigster Wert), wodurch der letzte Snapshot bestimmt wird.

Standard: ASC

NULLS { FIRST | LAST }

Gibt optional an, ob anhand der Sortierreihenfolge (ASC oder DESC) NULL-Werte vor bzw. nach Nicht-NULL-Werten sortiert werden. Die Sortierreihenfolge bestimmt, was der letzte Snapshot ist.

Standard: Hängt von der Sortierreihenfolge (ASC oder DESC) ab; siehe Nutzungshinweise in der ORDER BY-Dokumentation.

Durch Angeben der NON ADDITIVE BY-Klausel wird die Kennzahl zu einer semi-additiven Kennzahl.

Weitere Informationen dazu finden Sie unter Identifizieren der Dimensionen, die für eine Metrik nicht additiv sein sollen.

AS sql_expr

Gibt den SQL-Ausdruck zur Berechnung der Dimension, des Fakts oder der Kennzahl an.

Siehe Definition von Fakten, Dimensionen und Metriken. Die Validierungsregeln für diese Ausdrücke finden Sie unter Wie Snowflake semantische Ansichten validiert.

WITH SYNONYMS [ = ] ( 'synonym' [ , ... ] )

Gibt ein oder mehrere optionale Synonyme für die Dimension, den Fakt oder die Metrik an. Beachten Sie, dass die Synonyme nur zu Informationszwecken verwendet werden. Sie können Synonyme nicht verwenden, um sich auf eine Dimension, einen Fakt oder eine Metrik in einer anderen Dimension, einem anderen Fakt oder einer anderen Metrik zu beziehen.

COMMENT = 'comment_about_dim_fact_or_metric'

Gibt einen optionalen Kommentar zu der Dimension, dem Fakt oder der Metrik an.

WITH CORTEX SEARCH SERVICE search_service_name [ USING search_service_column_name ]

Gibt den Cortex Search Service an, der für diese Dimension verwendet werden soll.

Sie können diesen Parameter nur für Dimensionen angeben (und nicht für Fakten oder Metriken).

Wenn sich der Cortex Search Service in einer anderen Datenbank oder einem anderen Schema befindet, qualifizieren Sie den Namen des Dienstes (z. B. my_db.my_schema.my_service).

Sie können dazu die optionale USING-Klausel auf den Namen der Spalte im Cortex Search Service festlegen.

Parameter für Fensterfunktionskennzahlen

Diese Parameter sind Teil der Syntax zur Definition von Fensterfunktionskennzahlen:

metric

Gibt einen metrischen Ausdruck für diese Fensterfunktion an. Sie können eine Kennzahl oder einen beliebigen gültigen metrischen Ausdruck angeben, den Sie verwenden können, um eine Kennzahl in dieser Entität zu definieren.

PARTITION BY ...

Gruppiert Zeilen in Partitionen. Sie können entweder nach einer bestimmten Menge von Ausdrücken oder nach allen in der Abfrage angegebenen Dimensionen (außer ausgewählten Dimensionen) partitionieren:

PARTITION BY exprs_using_dimensions_or_metrics

Gruppiert Zeilen nach SQL-Ausdrücken in Partitionen. Im SQL-Ausdruck:

  • Alle Dimensionen im Ausdruck müssen von derselben Entität aus zugänglich sein, die die Fensterfunktionskennzahl definiert.

  • Alle Kennzahlen müssen zu derselben Tabelle gehören, in der diese Kennzahl definiert ist.

  • Sie können keine Aggregate, Fensterfunktionen oder Unterabfragen angeben.

PARTITION BY EXCLUDING dimensions

Gruppiert Zeilen in Partitionen nach allen in der SEMANTIC_VIEW-Klausel der Abfrage angegebenen Dimensionen, mit Ausnahme der durch dimensions angegebenen Dimensionen.

dimensions darf sich nur auf Dimensionen beziehen, die von der Entität aus zugänglich sind, die die Fensterfunktionskennzahl definiert.

Angenommen, Sie schließen beispielsweise die Dimension table_1.dimension_1 von der Partitionierung aus:

CREATE SEMANTIC VIEW sv
  ...
  METRICS (
    table_1.metric_2 AS SUM(table_1.metric_1) OVER
      (PARTITION BY EXCLUDING table_l.dimension_1 ORDER BY table_1.dimension_2)
  )
  ...

Angenommen, Sie führen eine Abfrage aus, die die Dimension table_1.dimension_1 angibt:

SELECT * FROM SEMANTIC VIEW(
  sv
  METRICS (
    table_1.metric_2
  )
  DIMENSIONS (
    table_1.dimension_1,
    table_1.dimension_2,
    table_1.dimension_3
  );

In der Abfrage wird die Kennzahl table_1.metric_2 wie folgt ausgewertet:

SUM(table_1.metric_1) OVER (
  PARTITION BY table_1.dimension_2, table_1.dimension_3
  ORDER BY table_1.dimension_2
)

Beachten Sie, dass table_1.dimension_1 von der PARTITION BY-Klausel ausgeschlossen wird.

Bemerkung

Sie können EXCLUDING außerhalb von Kennzahldefinitionen in semantischen Ansichten nicht verwenden. EXCLUDING wird in Fensterfunktionsaufrufen in jedem anderen Kontext nicht unterstützt.

ORDER BY exprs_using_dimensions_or_metrics  [ ASC | DESC ] [ NULLS FIRST | LAST ] [, ... ]

Sortiert die Zeilen innerhalb jeder Partition. Im SQL-Ausdruck:

  • Alle Dimensionen im Ausdruck müssen von derselben Entität aus zugänglich sein, die die Fensterfunktionskennzahl definiert.

  • Alle Kennzahlen müssen zu derselben Tabelle gehören, in der diese Kennzahl definiert ist.

  • Sie können keine Aggregate, Fensterfunktionen oder Unterabfragen angeben.

windowFrameClause

Siehe Syntax und Verwendung von Fensterfunktionen.

Weitere Informationen zu den Parametern für Fensterfunktionen und Beispiele finden Sie unter Fensterfunktionsmetriken definieren und abfragen.

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.

Für das Ausführen von Operationen auf einem Objekt in einem Schema ist mindestens eine Berechtigung für die übergeordnete Datenbank und mindestens eine Berechtigung für das übergeordnete Schema erforderlich.

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

  • Die semantische Ansicht muss gültig sein und den unter Wie Snowflake semantische Ansichten validiert beschriebenen Regeln folgen .

  • Metadaten:

    Achtung

    Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „User“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.

  • CREATE OR REPLACE <Objekt>-Anweisungen sind atomar. Das heißt, wenn ein Objekt ersetzt wird, erfolgt das Löschen des alten Objekts und das Erstellen des neuen Objekts in einer einzigen Transaktion.

Beispiele

Siehe Erstellen einer semantischen Ansicht unter Verwendung des Befehls CREATE SEMANTIC VIEW.