Freigeben über


CREATE MATERIALIZED VIEW

Gilt für: Häkchen Databricks SQL

Eine materialisierte Sicht ist eine Sicht, in der vorberechnete Ergebnisse für Abfragen verfügbar sind und aktualisiert werden können, um Änderungen in der Eingabe widerzuspiegeln. Jedes Mal, wenn eine materialisierte Sicht aktualisiert wird, werden die Abfrageergebnisse neu berechnet, um Änderungen in Upstream-Datasets widerzuspiegeln. Alle materialisierten Sichten werden von einer DLT-Pipeline unterstützt. Sie können materialisierte Sichten manuell oder geplant aktualisieren.

Weitere Informationen zum Ausführen einer manuellen Aktualisierung finden Sie unter REFRESH (MATERIALIZED VIEW oder STREAMING TABLE).

Weitere Informationen zum Planen einer Aktualisierung finden Sie unter Beispiele und ALTER MATERIALIZED VIEW.

Hinweis

Erstellungs- und Aktualisierungsvorgänge für materialisierte Sichten und Streamingtabellen werden von einer serverlosen Delta Live Tables-Pipeline unterstützt. Sie können mit dem Katalog-Explorer Details zu den unterstützenden Pipelines auf der Benutzeroberfläche anzeigen. Weitere Informationen finden Sie unter Was ist der Katalog-Explorer?.

Syntax

{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] }
  view_name
  [ column_list ]
  [ view_clauses ]
  [schedule_clause]
  AS query

column_list
   ( { column_name column_type column_properties } [, ...]
      [ , table_constraint ] [...])

   column_properties
      { NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]

view_clauses
  { PARTITIONED BY (col [, ...]) |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    SCHEDULE [ REFRESH ] schedule_clause |
    WITH { ROW FILTER clause } } [...]

schedule_clause
  { EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } |
    CRON cron_string [ AT TIME ZONE timezone_id ] }

Parameter

  • REPLACE

    Wenn dies angegeben wird, werden die Sicht und deren Inhalt ersetzt, sofern bereits vorhanden.

  • IF NOT EXISTS

    Erstellt die Sicht nur, wenn sie nicht vorhanden ist. Wenn bereits eine Sicht mit diesem Namen vorhanden ist, wird die CREATE MATERIALIZED VIEW-Anweisung ignoriert.

    Sie können nur eines von IF NOT EXISTS oder OR REPLACE angeben.

  • view_name

    Der Name der neu erstellten Ansicht. Der vollqualifizierte Ansichtsname muss eindeutig sein.

  • column_list

    Bezeichnet optional die Spalten im Abfrageergebnis der Ansicht. Wenn Sie eine Spaltenliste bereitstellen, muss die Anzahl der Spaltenaliase mit der Anzahl der Ausdrücke in der Abfrage übereinstimmen. Falls keine Spaltenliste angegeben ist, werden Aliase vom Text der Ansicht abgeleitet.

    • column_name

      Die Spaltennamen müssen eindeutig sein und mit den Ausgabespalten der Abfrage übereinstimmen.

    • column_type

      Gibt den Datentyp der Spalte an. Nicht alle von Azure Databricks unterstützten Datentypen werden von materialisierten Sichten unterstützt.

    • column_comment

      Ein optionales STRING-Literal, das den Spaltennamen beschreibt. Diese Option muss zusammen mit column_type angegeben werden. Wenn der Spaltentyp nicht angegeben ist, wird der Spaltenkommentar übersprungen.

    • column_constraint

      Fügt der Spalte in einer materialisierten Sicht einen informativen Primärschlüssel oder eine informative Fremdschlüsseleinschränkung hinzu. Wenn der Spaltentyp nicht angegeben ist, wird die Spalteneinschränkung übersprungen.

    • MASK-Klausel

      Wichtig

      Dieses Feature befindet sich in der Public Preview.

      Fügt eine Spaltenmaskierungsfunktion hinzu, um vertrauliche Zeichenfolgenwerte zu anonymisieren. Alle zukünftigen Abfragen von dieser Spalte erhalten das Ergebnis der Auswertung dieser Funktion über die Spalte anstelle des ursprünglichen Wertes der Spalte. Dies kann für eine präzise Zugriffssteuerung nützlich sein, bei der die Funktion die Identität oder Gruppenmitgliedschaft der aufrufenden Benutzer überprüfen kann, um zu entscheiden, ob der Wert zurückgezogen werden soll. Wenn der Spaltentyp nicht angegeben ist, wird die Spaltenmaske übersprungen.

  • table_constraint

    Fügt der Tabelle in einer materialisierten Sicht einen informativen Primärschlüssel oder eine informative Fremdschlüsseleinschränkung hinzu. Wenn der Spaltentyp nicht angegeben ist, wird die Tabelleneinschränkung übersprungen.

  • view_clauses

    Geben Sie optional Partitionierung, Kommentare, benutzerdefinierte Eigenschaften und einen Aktualisierungszeitplan für die neue materialisierte Sicht an. Jede Unterklausel kann nur einmal angegeben werden.

    • PARTITIONED BY

      Eine optionale Liste der Spalten der Tabelle, nach denen die Tabelle partitioniert werden soll.

    • COMMENT view_comment

      Ein STRING-Literal zum Beschreiben der Tabelle.

    • TBLPROPERTIES

      Legt optional eine oder mehrere benutzerdefinierte Eigenschaften fest.

      Verwenden Sie diese Einstellung, um den Laufzeitkanal delta Live Tables anzugeben, der zum Ausführen dieser Anweisung verwendet wird. Legen Sie den Wert der pipelines.channel Eigenschaft auf "PREVIEW" oder "CURRENT". Der Standardwert ist "CURRENT". Weitere Informationen zu Delta Live Tables-Kanälen finden Sie unter Delta Live Tables-Laufzeitkanäle.

    • SCHEDULE [ REFRESH ] schedule_clause

      • EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }

        Wichtig

        Dieses Feature befindet sich in der Public Preview.

        Verwenden Sie EVERY die Syntax, um eine aktualisierung zu planen, die in regelmäßigen Abständen auftritt. Wenn EVERY die Syntax angegeben ist, wird die Streamingtabelle oder materialisierte Ansicht regelmäßig im angegebenen Intervall aktualisiert, basierend auf dem angegebenen Wert, z HOUR. B. , , HOURS, DAY, DAYS, WEEKoder WEEKS. In der folgenden Tabelle sind akzeptierte ganzzahlige Werte für number.

        Zeiteinheit Ganzzahliger Wert
        HOUR or HOURS 1 <= H <= 72
        DAY or DAYS 1 <= D <= 31
        WEEK or WEEKS 1 <= W <= 8

        Hinweis

        Die Singular- und Pluralformen der enthaltenen Zeiteinheit sind semantisch gleichwertig.

      • CRON cron_string [ AT TIME ZONE timezone_id ]

        Um eine Aktualisierung mit einem Quarz-Cron-Wert zu planen. Gültige time_zone_values werden akzeptiert. AT TIME ZONE LOCAL wird nicht unterstützt.

        Fehlt AT TIME ZONE, wird die Sitzungszeitzone verwendet. Wenn AT TIME ZONE fehlt und die Sitzungszeitzone nicht festgelegt ist, wird ein Fehler ausgelöst. SCHEDULE ist semantisch äquivalent mit SCHEDULE REFRESH.

    • WITH ROW FILTER-Klausel

      Wichtig

      Dieses Feature befindet sich in der Public Preview.

      Fügt der Tabelle eine Zeilenfilterfunktion hinzu. Alle zukünftigen Abfragen von dieser Tabelle erhalten eine Teilmenge der Zeilen, in denen die Funktion als boolescher WAHR ausgewertet wird. Dies kann für eine fein abgestufte Zugriffssteuerung nützlich sein, bei der die Funktion die Identität oder Gruppenmitgliedschaften der aufrufenden Benutzer überprüfen kann, um zu entscheiden, ob bestimmte Spalten gefiltert werden sollen.

  • AS query

    Eine Abfrage, die die Sicht aus Basistabellen oder anderen Sichten erstellt.

Erforderliche Berechtigungen

Der Benutzer, der eine materialisierte Sicht (Materialized View, MV) erstellt, ist der MV-Besitzer und benötigt die folgenden Berechtigungen:

  • SELECT-Berechtigung für die Basistabellen, auf die von der materialisierten Sicht verwiesen wird.
  • USE CATALOG-Berechtigung für den übergeordneten Katalog und USE SCHEMA-Berechtigung für das übergeordnete Schema
  • CREATE MATERIALIZED VIEW-Berechtigung für das Schema für die materialisierte Sicht.

Damit ein Benutzer die materialisierte Sicht aktualisieren kann, wird Folgendes erfordert:

  • USE CATALOG-Berechtigung für den übergeordneten Katalog und USE SCHEMA-Berechtigung für das übergeordnete Schema
  • Besitz der materialisierten Sicht oder REFRESH-Berechtigung für die materialisierte Sicht
  • Der Besitzer benötigt die SELECT-Berechtigung für die Basistabellen, auf die die materialisierte Sicht verweist.

Damit ein Benutzer die materialisierte Sicht abfragen kann, wird Folgendes erfordert:

  • USE CATALOG-Berechtigung für den übergeordneten Katalog und USE SCHEMA-Berechtigung für das übergeordnete Schema
  • SELECT-Berechtigung für die materialisierte Sicht.

Zeilenfilter und Spaltenmasken

Wichtig

Dieses Feature befindet sich in der Public Preview.

Mit Zeilenfiltern können Sie eine Funktion angeben, die als Filter gilt, wenn ein Tabellenscan Zeilen abruft. Mit diesen Filtern können Sie sicherstellen, dass nachfolgende Abfragen nur Zeilen zurückgeben, für die das Filterprädikat zu TRUE ausgewertet wird.

Mit Spaltenmasken können Sie die Werte einer Spalte immer filtern, wenn ein Tabellenscan Zeilen abruft. Alle zukünftigen Abfragen dieser Spalte erhalten das Ergebnis der Auswertung dieser Funktion für die Spalte, das den ursprünglichen Spaltenwert ersetzt.

Weitere Informationen zur Verwendung von Zeilenfiltern und Spaltenmasken finden Sie unter Filtern vertraulicher Tabellendaten mit Zeilenfiltern und Spaltenmasken.

Verwalten von Zeilenfiltern und Spaltenmasken

Zeilenfilter und Spaltenmasken für materialisierte Sichten sollten mithilfe der CREATE-Anweisung hinzugefügt werden.

Behavior

  • Als Definierer aktualisieren: Wenn die REFRESH MATERIALIZED VIEW-Anweisung eine materialisierte Sicht aktualisiert, werden Zeilenfilterfunktionen mit den Berechtigungen des Definierers (als Tabellenbesitzer) ausgeführt. Dies bedeutet, dass die Tabellenaktualisierung den Sicherheitskontext des Benutzers verwendet, der die materialisierte Sicht erstellt hat.
  • Abfrage: Während die meisten Filter mit den Berechtigungen des Definierers ausgeführt werden, sind Funktionen wie CURRENT_USER und IS_MEMBER, die den Benutzerkontext überprüfen, die Ausnahme. Diese Funktionen werden als Aufrufer ausgeführt. Durch diese Vorgehensweise werden benutzerspezifische Datensicherheit und Zugriffssteuerungen basierend auf dem Kontext des aktuellen Benutzers erzwungen.
  • Beim Erstellen materialisierter Sichten über Quelltabellen, die Zeilenfilter und Spaltenmasken enthalten, ist die Aktualisierung der materialisierten Sicht immer eine vollständige Aktualisierung. Bei einer vollständigen Aktualisierung werden alle in der Quelle verfügbaren Daten mit den neuesten Definitionen aktualisiert. Dadurch wird sichergestellt, dass Sicherheitsrichtlinien der Quelltabellen ausgewertet und mit den aktuellen Daten und Definitionen aktualisiert werden.

Einblick

Verwenden Sie DESCRIBE EXTENDED, INFORMATION_SCHEMA oder den Katalog-Explorer, um die vorhandenen Zeilenfilter und Spaltenmasken zu untersuchen, die für eine bestimmte materialisierte Sicht gelten. Mit dieser Funktionalität können Benutzer Datenzugriffs- und Schutzmaßnahmen für materialisierte Sichten überwachen und überprüfen.

Begrenzungen

  • Wenn für eine materialisierte Sicht mit einem sum-Aggregat für eine NULL-Werte zulassende Spalte der letzte Wert ungleich NULL aus dieser Spalte entfernt wurde und somit nur NULL-Werte in dieser Spalte verbleiben, gibt der resultierende Aggregatwert der materialisierten Sicht NULL anstelle von NULL zurück.
  • Spaltenverweise erfordern keinen Alias. Ausdrücke für Nicht-Spaltenverweise erfordern einen Alias, wie im folgenden Beispiel angezeigt:
    • Zulässig: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • Nicht zulässig: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • NOT NULL muss zusammen mit PRIMARY KEY manuell angegeben werden, um eine gültige Anweisung darzustellen.
  • Materialisierte Sichten unterstützen keine Identitätsspalten oder Ersatzschlüssel.
  • Materialisierte Sichten unterstützen nicht die Befehle OPTIMIZE und VACUUM. Die Wartung erfolgt automatisch.
  • Materialisierte Sichten unterstützen keine Erwartungen zum Definieren von Datenqualitätseinschränkungen.

Beispiele

-- Create a materialized view if it doesn't exist
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create and schedule a materialized view to be refreshed daily at midnight.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
  COMMENT 'Daily sales numbers'
  SCHEDULE CRON '0 0 0 * * ? *'
  AS SELECT date AS date, sum(sales) AS sumOfSales
       FROM table1
       GROUP BY date;

-- Sets the runtime channel to "PREVIEW"
> CREATE MATERIALIZED VIEW mv_preview
  TBLPROPERTIES(pipelines.channel = "PREVIEW")
  AS SELECT * FROM RANGE(10)

-- Create a materialized view with a table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id int NOT NULL,
    full_name string,
    movie_title string,
    CONSTRAINT movie_pk PRIMARY KEY(member_id)
  )
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create or replace the materialized view to remove the table constraint and add a partition
> CREATE OR REPLACE MATERIALIZED VIEW subscribed_movies
  PARTITIONED BY (member_id)
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create a materialized view with a row filter and a column mask
> CREATE MATERIALIZED VIEW masked_view (
    id int,
    name string,
    region string,
    ssn string MASK catalog.schema.ssn_mask_fn
  )
  WITH ROW FILTER catalog.schema.us_filter_fn ON (region)
  AS SELECT id, name, region, ssn
       FROM employees;