Delen via


CREATE MATERIALIZED VIEW (pijplijnen)

Een gerealiseerde weergave is een weergave waarin vooraf ingevulde resultaten beschikbaar zijn voor query's en kunnen worden bijgewerkt om wijzigingen in de invoer weer te geven. gerealiseerde weergaven worden ondersteund door een pijplijn. Telkens wanneer een gerealiseerde weergave wordt bijgewerkt, worden queryresultaten opnieuw berekend om wijzigingen in upstream-gegevenssets weer te geven. U kunt gematerialiseerde weergaven handmatig bijwerken of volgens een schema.

Zie Een pijplijnupdate uitvoeren voor meer informatie over het uitvoeren of plannen van updates.

Syntaxis

CREATE [OR REFRESH] [PRIVATE] MATERIALIZED VIEW
  view_name
  [ column_list ]
  [ view_clauses ]
  AS query

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

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

view_clauses
  { USING DELTA |
    PARTITIONED BY (col [, ...]) |
    CLUSTER BY clause |
    LOCATION path |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    WITH { ROW FILTER clause } } [...]

Parameterwaarden

  • REFRESH

    Indien opgegeven, maakt u de weergave of werkt u een bestaande weergave en de inhoud ervan bij.

  • PRIVÉ

    Een privé gematerialiseerde weergave wordt aangemaakt. Een privé gerealiseerde weergave kan nuttig zijn als een intermediaire tabel binnen een pijplijn die niet in de catalogus gepubliceerd hoeft te worden.

    • Ze worden niet toegevoegd aan de catalogus en zijn alleen toegankelijk binnen de definiërende pijplijn
    • Ze kunnen dezelfde naam hebben als een bestaand object in de catalogus. Als in de pijplijn een privé gerealiseerde weergave en een object in de catalogus dezelfde naam hebben, worden verwijzingen naar de naam omgezet in de privé gerealiseerde weergave.
    • Privé-gerealiseerde weergaven blijven alleen behouden gedurende de levensduur van de pijplijn, niet slechts één update.

    Privé gematerialiseerde weergaven werden eerder gemaakt met de TEMPORARY parameter.

  • view_name

    De naam van de zojuist gemaakte weergave. De volledig gekwalificeerde weergavenaam moet uniek zijn.

    Privé-gematerialiseerde weergaven kunnen dezelfde naam hebben als een object dat in de catalogus wordt gepubliceerd.

  • column_list

    U kunt desgewenst de kolommen in het queryresultaat van de weergave labelen. Als u een kolomlijst opgeeft, moet het aantal kolomaliassen overeenkomen met het aantal expressies in de query. Als er geen kolomlijst is opgegeven, worden aliassen afgeleid van de hoofdtekst van de weergave.

    • column_name

      De kolomnamen moeten uniek zijn en corresponderen met de uitvoerkolommen van de query.

    • column_type

      Hiermee geeft u het gegevenstype van de kolom op. Niet alle gegevenstypen die worden ondersteund door Azure Databricks, worden ondersteund door gerealiseerde weergaven.

    • column_comment

      Een optionele STRING literal die de kolom beschrijft. Deze optie moet gespecificeerd worden samen met column_type. Als het kolomtype niet is opgegeven, wordt de kolomopmerking overgeslagen.

    • column_constraint

      Hiermee voegt u een beperking toe waarmee gegevens worden gevalideerd terwijl deze in de tabel stromen. Zie Gegevenskwaliteit beheren met de verwachtingen van pijplijnen.

    • MASK-clausule

      Belangrijk

      Deze functie bevindt zich in openbare preview-versie.

      Voegt een kolommaskerfunctie toe om gevoelige gegevens anoniem te maken. Zie rijfilters en kolommaskers.

  • tabelbeperking

    Belangrijk

    Deze functie bevindt zich in openbare preview-versie.

    Wanneer u een schema opgeeft, kunt u primaire en vreemde sleutels definiëren. De beperkingen zijn informatief en worden niet afgedwongen. Zie de CONSTRAINT clausule in de SQL-taalreferentie.

    Opmerking

    Als u tabelbeperkingen wilt definiëren, moet uw pijplijn een Unity Catalog-pijplijn zijn.

  • view_clauses

    Geef desgewenst partitionering, opmerkingen en door de gebruiker gedefinieerde eigenschappen op voor de gerealiseerde weergave. Elke subclausule mag slechts eenmaal worden gespecificeerd.

    • DELTA GEBRUIKEN

      Hiermee geeft u de gegevensindeling op. De enige optie is DELTA.

      Deze component is optioneel en standaard ingesteld op DELTA.

    • GEPARTITIONEERD PER

      Een optionele lijst met een of meer kolommen die moeten worden gebruikt voor partitionering in de tabel. Wederzijds uitsluiten met CLUSTER BY.

      Liquid clustering biedt een flexibele, geoptimaliseerde oplossing voor clustering. Overweeg het gebruik CLUSTER BY in plaats van PARTITIONED BY voor pijplijnen.

    • CLUSTER BY

      Schakel vloeistofclustering in de tabel in en definieer de kolommen die moeten worden gebruikt als clustersleutels. Gebruik automatische liquide clustering met CLUSTER BY AUTOen Databricks kiest op intelligente wijze clusteringsleutels om de queryprestaties te optimaliseren. Wederzijds uitsluiten met PARTITIONED BY.

      Zie Liquid Clustering gebruiken voor tabellen.

    • PLAATS

      Een optionele opslaglocatie voor tabelgegevens. Als dit niet is ingesteld, wordt het systeem standaard ingesteld op de opslaglocatie van de pijplijn.

      Deze optie is alleen beschikbaar bij het publiceren naar hive-metastore. In Unity Catalog wordt de locatie automatisch beheerd.

    • COMMENTAAR

      Een optionele beschrijving voor de tabel.

    • TBLPROPERTIES

      Een optionele lijst met tabeleigenschappen voor de tabel.

    • MET ROW FILTER

    Belangrijk

    Deze functie bevindt zich in openbare preview-versie.

    Hiermee voegt u een rijfilterfunctie toe aan de tabel. Toekomstige query's voor die tabel ontvangen een subset van de rijen waarvoor de functie de waarde WAAR oplevert. Dit is handig voor gedetailleerd toegangsbeheer, omdat hiermee de functie de identiteit en groepslidmaatschappen van de aanroepende gebruiker kan inspecteren om te bepalen of bepaalde rijen moeten worden gefilterd.

    Zie ROW FILTER clausule.

  • vraag

    Een query die de gegevensset voor de tabel definieert.

Vereiste toestemmingen

De run-as-gebruiker voor een pijplijn moet de volgende machtigingen hebben:

  • SELECT bevoegdheid voor de basistabellen waarnaar wordt verwezen door de gematerialiseerde weergave.
  • USE CATALOG bevoegdheid voor de bovenliggende catalogus en USE SCHEMA bevoegdheid voor het bovenliggende schema.
  • CREATE MATERIALIZED VIEW recht op het schema voor de gematerialiseerde weergave.

Om een gebruiker in staat te stellen de pijplijn bij te werken, zijn de volgende vereisten voor de gerealiseerde weergave gedefinieerd:

  • USE CATALOG bevoegdheid voor de bovenliggende catalogus en USE SCHEMA bevoegdheid voor het bovenliggende schema.
  • Eigendom van de gematerialiseerde weergave of REFRESH rechten voor de gematerialiseerde weergave.
  • De eigenaar van de gerealiseerde weergave moet de SELECT bevoegdheid hebben voor de basistabellen waarnaar wordt verwezen door de gerealiseerde weergave.

Voor een gebruiker die een query kan uitvoeren op de resulterende gerealiseerde weergave, is het volgende vereist:

  • USE CATALOG bevoegdheid voor de bovenliggende catalogus en USE SCHEMA bevoegdheid voor het bovenliggende schema.
  • SELECT bevoegdheden voor de gerealiseerde weergave.

Beperkingen

  • Wanneer een gematerialiseerde weergave met een sum aggregatie over een NULL-vatbare kolom de laatste niet-NULL-waarde uit die kolom verwijderd heeft - en dus alleen NULL waarden in die kolom overblijven - geeft de resultante aggregatiewaarde van de gematerialiseerde weergave nul in plaats van NULL.
  • Kolomverwijzing vereist geen alias. Voor niet-kolomverwijzingsexpressies is een alias vereist, zoals in het volgende voorbeeld:
    • Toegestaan: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • Niet toegestaan: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • NOT NULL moet samen met PRIMARY KEY handmatig worden opgegeven om een geldige instructie te vormen.
  • Gematerialiseerde weergaven bieden geen ondersteuning voor identiteitskolommen of surrogaatsleutels.
  • Gematerialiseerde weergaven bieden geen ondersteuning voor OPTIMIZE en VACUUM opdrachten. Onderhoud gebeurt automatisch.
  • Het wijzigen van de naam van de tabel of het wijzigen van de eigenaar wordt niet ondersteund.
  • Gegenereerde kolommen, identiteitskolommen en standaardkolommen worden niet ondersteund.

Voorbeelden

-- Create a materialized view by reading from an external data source, using the default schema:
CREATE OR REFRESH MATERIALIZED VIEW taxi_raw
AS SELECT * FROM read_files("/databricks-datasets/nyctaxi/sample/json/")

-- Create a materialized view by reading from a dataset defined in a pipeline:
CREATE OR REFRESH MATERIALIZED VIEW filtered_data
AS SELECT
  ...
FROM taxi_raw

-- Specify a schema and clustering columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
  customer_name STRING,
  number_of_line_items STRING,
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) CLUSTER BY (order_day_of_week, customer_id)
COMMENT "Raw data on sales"
AS SELECT * FROM ...

-- Specify partition columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
  customer_name STRING,
  number_of_line_items STRING,
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) PARTITIONED BY (order_day_of_week)
COMMENT "Raw data on sales"
AS SELECT * FROM ...

-- Specify a primary and foreign key constraint for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING NOT NULL PRIMARY KEY,
  customer_name STRING,
  number_of_line_items STRING,
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime)),
  CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES main.default.customers(customer_id)
)
COMMENT "Raw data on sales"
AS SELECT * FROM ...

-- Specify a row filter and mask clause for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales (
  customer_id STRING MASK catalog.schema.customer_id_mask_fn,
  customer_name STRING,
  number_of_line_items STRING COMMENT 'Number of items in the order',
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
)
COMMENT "Raw data on sales"
WITH ROW FILTER catalog.schema.order_number_filter_fn ON (order_number)
AS SELECT * FROM sales_bronze