Materialisering för mätvärdesvyer

Materialisering för måttvyer påskyndar frågor genom att använda materialiserade vyer för förberäkningsaggregeringar. Lakeflow-pipelines orkestrerar användardefinierade materialiserade vyer för en viss metrikvy. Vid frågetillfället dirigerar frågeoptimeraren frågor till den bästa materialiserade vyn med hjälp av automatisk aggregerad frågematchning (frågeomskrivning). Du kör frågor mot måttvyn som vanligt, utan ytterligare manuella åtgärder. Databricks uppdaterar materialiseringarna för att hålla dem uppdaterade. Den väljer också vilken materialisering som ska frågas för att ge snabbare frågor till lägre kostnad.

Så här fungerar materialisering

Materialisering för måttvyer omfattar två faser: definiera materialiseringen och köra frågor mot den.

Definitionsfasen

När du definierar en måttvy med materialisering anger du dina fält, mått och uppdateringsschema i måttvyn YAML. Från den definitionen skapar Databricks en hanterad Lakeflow-pipeline som skapar och underhåller de materialiserade vyerna.

Definition och materialisering av måttvyer i en pipeline

Detta håller måttdefinitionen separat från hur den lagras:

  • Måttvyn är ett Unity Catalog-objekt som definierar måttets fält, mått och kopplingar, tillsammans med materialiseringskonfigurationen (schema och kornighet). Det är den enda sanningskällan för vad måttet betyder.
  • Pipelinen omvandlar den definitionen till en eller flera materialiserade vyer, som var och en är beräknad i förväg på en specifik detaljnivå. Databricks väljer vilken som ska läsas vid frågetillfället.

Frågekörning

När du kör SELECT ... FROM <metric_view> använder frågeoptimeraren aggregerad-frågemedveten omskrivning för att optimera prestanda.

Frågekörning med aggregerad omskrivning

  • Snabb sökväg: Läser från förberäknade materialiserade vyer när det finns en lämplig materialisering.
  • Återställningssökväg: Läser direkt från källdata när ingen lämplig materialisering är tillgänglig.

Frågeoptimeraren balanserar automatiskt prestanda och färskhet genom att välja mellan materialiserade data och källdata. Du får resultat transparent oavsett vilken sökväg optimeraren använder. Mer information om hur du kör frågor mot måttvyer finns i Frågemåttvyer.

Requirements

Så här använder du materialisering för måttvyer:

  • Din arbetsyta måste ha serverless compute aktiverad för att köra Lakeflow-pipelines.
  • En SQL-lager- eller beräkningsresurs som kör Databricks Runtime 17.3 eller senare. Metriska vyer utan materialisering stöds från och med Databricks Runtime 16.4. Information om den lägsta körtiden för varje funktion finns i Tillgänglighet för funktioner i måttvyn.

Important

Du kan inte materialisera en metrikvy när vyn eller någon av dess källtabeller använder radnivåsäkerhet (RLS),kolumnmasker eller attributbaserade åtkomstkontrollpolicys (ABAC). Eftersom en materialisering är förberäknad när den använder ägarens identitet, skulle servering av den till andra användare kringgå de användaråtkomstkontroller som dessa funktioner upprätthåller vid frågetillfället. För detaljer, se Frågeomskrivningsläge.

Konfigurationsreferens

Du konfigurerar materialisering i ett fält på den översta nivån materialization i YAML-definitionen för måttvyn. Det här fältet anger frågeomskrivningen mode (alltid relaxed), en valfri uppdatering scheduleoch en lista över materialized_views att underhålla. Varje materialiserad vy är antingen aggregated, som förberäknar specifika dimensioner och mått, eller unaggregated, som materialiserar den fullständiga datamodellen.

Fullständig fält-för-fält-specifikation, inklusive obligatoriska och valfria fält, tillåtna värden och schedule satsens begränsningar, finns i Materialisering.

Exempeldefinition

I följande exempel definieras en måttvy med en oaggregerad och två aggregerade materialiseringar:

version: 1.1

source: prod.operations.orders_enriched_view

filter: revenue > 0

fields:
  - name: category
    expr: substring(category, 5)

  - name: color
    expr: color

measures:
  - name: total_revenue
    expr: SUM(revenue)

  - name: number_of_suppliers
    expr: COUNT(DISTINCT supplier_id)

materialization:
  schedule: every 6 hours
  mode: relaxed

  materialized_views:
    - name: baseline
      type: unaggregated

    - name: revenue_breakdown
      type: aggregated
      dimensions:
        - category
        - color
      measures:
        - total_revenue
      cluster_by:
        cols:
          - category
          - color
      partition_by:
        - category

    - name: suppliers_by_category
      type: aggregated
      dimensions:
        - category
      measures:
        - number_of_suppliers

Note

materialization-blocket använder nyckelordet dimensions: för att lista vilka fält som ska materialiseras, även om definitionen på toppnivå använder fields:. De två nyckelorden är likvärdiga. Se Fält.

Materialiseringen revenue_breakdown använder cluster_by och partition_by för att styra hur det materialiserade datat lagras fysiskt, på samma sätt som satserna CLUSTER BY och PARTITION BY för en materialiserad vy. Fullständig fältspecifikation finns i Materialisering.

Skapa måttvyn med hjälp av SQL

Om du vill skapa den här metrikvyn utanför Catalog Explorer omsluter du YAML-koden med CREATE OR REPLACE VIEW ... WITH METRICS LANGUAGE YAML AS och placerar definitionen mellan avgränsarna $$:

CREATE OR REPLACE VIEW catalog.schema.orders_materialized WITH METRICS LANGUAGE YAML AS
$$
  version: 1.1

  source: prod.operations.orders_enriched_view

  filter: revenue > 0

  dimensions:
    - name: category
      expr: substring(category, 5)

    - name: color
      expr: color

  measures:
    - name: total_revenue
      expr: SUM(revenue)

    - name: number_of_suppliers
      expr: COUNT(DISTINCT supplier_id)

  materialization:
    schedule: every 6 hours
    mode: relaxed

    materialized_views:
      - name: baseline
        type: unaggregated

      - name: revenue_breakdown
        type: aggregated
        dimensions:
          - category
          - color
        measures:
          - total_revenue

      - name: suppliers_by_category
        type: aggregated
        dimensions:
          - category
        measures:
          - number_of_suppliers
$$

Frågeomskrivningsläge

I läget relaxed kontrollerar automatisk frågeomskrivning bara huruvida materialiserade kandidatvyer har de nödvändiga fälten och måtten för att besvara frågan.

Följande kontroller har hoppats över:

  • Färskhet: Det verifierar inte att materialiseringen är uppdaterad.
  • SQL-inställningar: Det verifierar inte att inställningar som TIMEZONE eller ANSI_MODE matchar.
  • Determinism: Det verifierar inte att de materialiserade resultaten är helt deterministiska.

Frågor som matchar en materialisering använder den senaste uppdateringen. Frågor som inte matchar återgår till källan och returnerar livedata. Därför kan datas färskhet variera beroende på om en fråga kvalificerar sig för omskrivning. För att säkerställa konsekvens bör du anpassa uppdateringsschemat för materialiseringen efter din källpipeline. Till exempel, om källan uppdateras dagligen med en batchpipeline, schemalägger du materialiseringsuppdateringar så att de körs efter att pipelinen har slutförts. Du kan också använda en oaggregerad materialisering för att garantera att alla frågor läser från samma ögonblicksbild.

Du kan inte skapa en materialisering när måttvyn eller någon av dess källtabeller använder:

  • Säkerhet på radnivå (RLS), maskering på kolumnnivå (CLM) eller ABAC-principer. Förberäknade resultat kan kringgå åtkomstkontroller per användare som är avsedda att tillämpas vid frågetillfället.
  • Anroparberoende uttryck, vars resultat ändras baserat på vem som kör frågan (till exempel current_user() eller is_member()). En materialisering förberäknas en gång och delas, så om den visas för en annan användare kan det ge felaktiga eller osäkra resultat.

Databricks validerar den här begränsningen när du skapar, ändrar eller uppdaterar en materialisering. Dessa åtgärder misslyckas med felvillkoret METRIC_VIEW_MATERIALIZATION_WITH_INVOKER_DEPENDENT_EXPRESSIONS_NOT_SUPPORTED (SQLSTATE 42K0E). Se METRIC_VIEW_MATERIALIZATION_WITH_INVOKER_DEPENDENT_EXPRESSIONS_NOT_SUPPORTED.

Typer av materialiseringar för måttvyer

I följande avsnitt beskrivs vilka typer av materialiserade vyer som är tillgängliga för måttvyer och ger vägledning om hur du väljer lämplig konfiguration för dina datakällor och frågemönster.

Aggregerad typ

Den här typen förberäknar sammansättningar för angivna mått- och fältkombinationer för måltäckning.

Använd en aggregerad typ när det finns specifika dimensions- och måttkombinationer som efterfrågas ofta. Med aggregerade materialiseringar kan både exakt matchning och rollup-matchning tillämpas, vilket ger den bästa frågeprestandan för dessa mönster.

För optimala sammansättningar:

  • Inkludera de vanligaste dimensionerna i GROUP BY satser.
  • Inkludera eventuella filterkolumner (kolumner som används i WHERE när frågan körs).
  • Materialisera på den mest detaljerade nivån som dina frågor behöver. Till exempel kan en materialisering vid (region, sku, event_day) användas för samtliga följande:
    • GROUP BY region
    • GROUP BY region, event_month
    • GROUP BY sku med WHERE region = 'US'
  • Undvik dimensioner som är så detaljerade att de huvudsakligen producerar grupper med en rad (till exempel en rå tidsstämpel med millisekunders precision). Detta har ingen fördel och blåser upp lagringen.
  • Håll utkik efter icke-additiva mått. Icke-additiva mått kan inte aggregeras från partiella resultat (till exempel COUNT(DISTINCT), MEDIANoch percentiler) och kräver en exakt matchning mot en materialisering.

En enskild aggregering kan bara betjäna frågor som matchar dess specifika dimensioner (exakt matchning) eller en delmängd av dess dimensioner (rollup-matchning). Databricks rekommenderar att du skapar flera aggregerade materialiseringar för olika frågeformer.

Oaggregerad typ

Den här typen materialiserar hela den oaggregerade datamodellen (fälten source, joins, filteroch fields ) för bredare täckning med lägre prestandalyft jämfört med den aggregerade typen.

Använd en oaggregeringstyp när något av följande är sant:

  • Din måttvy omfattar dyra källtransformeringar eller kopplingar.
  • Frågemönster är oförutsägbara eller varierande.
  • Alla användare som ställer frågor mot metrikvyn måste se att data är konsekventa.

Med icke-aggregerade materialiseringar beräknas dyra källvyer och sammanfogningar en gång vid uppdatering i stället för vid varje fråga. När det finns både aggregerade och oaggregerade materialiseringar beräknar Databricks de aggregerade materialiseringarna från den oaggregerade. Detta ger en konsekvent ögonblicksbild och undviker redundant omkomputation av källan. En oaggregerad matchning är alltid berättigad oavsett frågeform, med förbehåll för de begränsningar som beskrivs i frågeomskrivningsläget.

En oaggregerad materialisering hjälper inte när källan är en direkt tabellreferens utan ett selektivt filter. I så fall har den ingen fördel jämfört med att fråga källan direkt.

Mer information om hur och när du ska använda dessa materialiseringstyper finns i Välja en materialiseringstyp för måttvyer.

Automatisk omskrivning av frågor

När du frågar en måttvy dirigerar funktionen för frågeomskrivning automatiskt din fråga till den bästa tillgängliga materialiseringen. Den använder tre strategier för frågeomskrivning: exakt matchning, sammanslagningsmatchning och oaggregerad matchning.

Aggregerad omskrivning av frågor

Frågan körs automatiskt på den bästa materialiseringen i stället för bastabellerna med den här algoritmen:

  1. Först försöker frågeoptimeraren göra en exakt matchning.
  2. Om det inte finns någon exakt matchning försöker frågeoptimeraren att hitta en matchning på en högre aggregeringsnivå.
  3. Om det inte finns någon rollup-matchning, och det finns en oaggregerad materialisering, försöker frågeoptimeraren att hitta en oaggregerad matchning.
  4. Om det inte finns någon oaggregerad matchning läser frågan direkt från källtabellerna.

I följande avsnitt förklaras hur varje strategi fungerar.

Matchningsstrategier för omskrivning av frågor

Note

Materialiseringar måste slutföra materialiseringen innan frågeomskrivningen kan träda i kraft.

Exakt träff

Frågan efterfrågar exakt det som förberäknats vid materialiseringen. Frågeomskrivning läser det lagrade resultatet utan extra arbete, vilket ger snabba resultat.

För att kvalificera dig för exakt matchning:

  • Frågans uttryck måste exakt matcha materialiseringsdimensionerna GROUP BY .
  • Frågans mått måste vara en delmängd av materialiseringsmåtten.

En materialisering har till exempel dimensioner [region, order_date] och mått [total_revenue, order_count]. En fråga som grupperar efter region och order_date och begär total_revenue är en exakt överensstämmelse, eftersom dimensionerna är desamma och mätvärdet har förberäknats.

Sammanslagningsmatchning

Frågan frågar efter en sammanfattning på en högre nivå än vad som var förberäknat. Optimeraren läser det förberäknade resultatet och aggregerar det på nytt upp till den nivå som frågan behöver.

Så här kvalificerar du dig för sammanslagningsmatchning:

  • Större kornighet: Frågan grupperas efter färre dimensioner eller en bredare tidskornighet än materialiseringen.
  • Alla mått är additiva: Varje mått som din fråga frågar efter måste vara ett mått som kan omberäknas korrekt genom att kombinera partiella resultat (till exempel SUM av SUMs eller MAX av MAXes). MEDIAN kan inte rullas upp eftersom den förlitar sig på gruppdistributionen.
  • Alla deltagande filter måste vara deterministiska uttryck: Om frågan har en WHERE sats måste filtret alltid generera samma resultat för samma indata. Till exempel WHERE region = 'US' är deterministisk, men uttryck som rand() eller uuid() inte är det.

Rollup-matchning kan inte användas för icke-additiva mätvärden, eftersom de inte kan omaggregeras korrekt utifrån delresultat. Se Additiva mätvärden.

Om man till exempel använder samma materialisering med dimensionerna [region, order_date] och måtten [total_revenue, order_count], är en fråga som endast grupperar efter region och begär total_revenue en rollup-matchning. Frågan behöver färre dimensioner än de som materialiserades, så motorn aggregerar de dagliga totalerna till totaler på regionnivå.

Note

Rollup-matchning är inte tillgänglig när metrikvyn använder en one_to_many join. I så fall faller varje materialisering tillbaka till exakt matchning endast. Mer information om en-till-många-kopplingar finns i En-till-många-kopplingar.

Additiva mått

Ett mått är additivt om dess aggregerade resultat kan omberäknas korrekt genom omaggregering från befintliga aggregerade materialiseringar. Detta är det grundläggande kravet för rollup-matchning.

Alla aggregeringar som använder DISTINCT (till exempel COUNT(DISTINCT), SUM(DISTINCT)) är icke-additiva och kan inte sammanställas.

Följande funktioner är additiva:

  • SUM
  • COUNT
  • MIN
  • MAX
  • BIT_AND
  • BIT_OR
  • BIT_XOR
  • BOOL_AND
  • BOOL_OR

Ytterligare begränsningar gäller för additiva mått:

  • Måttdefinitionen måste innehålla exakt en mängdfunktion. Ett mått vars definition kombinerar flera aggregat (till exempel sum(cost) + min(revenue)) är inte berättigat till sammanslagningsmatchning.
  • Om måttdefinitionen innehåller en FILTER sats måste den vara deterministisk.
  • Måttet kan inte vara ett fönstermått (till exempel en rullande 7-dagars total- eller årsjämförelse som definierats med ett fönsterblock).

I följande tabell sammanfattas hur vanliga måttmönster mappas för att matcha typer:

Mätmönster Matchningstyp Förnuft
Enskilt additivt aggregat (SUM, COUNT, MIN, MAX) Sammanslagningsberättigad Kan aggregeras på nytt från partiella resultat
COUNT(DISTINCT) eller annan icke-additiv aggregering Endast exakt matchning Det går inte att aggregera om
Flera aggregeringar i ett uttryck (SUM(x) + MIN(y)) Endast exakt matchning Det går inte att isolera enskilda aggregat för sammanslagning
Additivt aggregat med deterministiskt FILTER Sammanslagningsberättigad Filtret är deterministiskt, aggregering är additivt
Fönstermått Endast exakt matchning Fönsterramen beror på den exakta ådringen

Oaggregerad match

Frågan matchar inte någon förberäknad aggregering, men det dyra förberedelsearbetet (kopplingar och filter) är redan klart. Frågeomskrivningen startar från den förberedda datamängden för den oaggregerade materialiseringen i stället för att gå tillbaka till källtabellerna.

Om det finns en oaggregerad materialisering är den här strategin alltid berättigad som reserv innan den går till källan. Alla frågeformer kan använda den, med förbehåll för de begränsningar som beskrivs i frågeomskrivningsläget.

Till exempel grupperar din fråga efter category och begär unique_customers, men ingen aggregerad materialisering innehåller dessa fält och mätvärden. Det finns dock en icke-aggregerad materialisering där den sammanfogade, filtrerade datamängden är redo. Frågeoptimeraren läser från den förberedda datauppsättningen och kör GROUP BY category, COUNT(DISTINCT customer_id) när frågan körs, i stället för att sammanfoga råtabellerna på nytt.

Kontrollera att en fråga använder materialiserade vyer

Det finns två sätt att kontrollera om en fråga använder en materialiserad vy:

  • Kör EXPLAIN EXTENDED på din fråga för att se frågeplanen. Om materialiseringen användes innehåller lövnoden __materialization_mat_<pipeline ID>___metric_view_mat_ och namnet på materialiseringen från YAML-filen.
  • Titta på frågeprofilen enligt nedan.

Frågeprofil som visar materialiseringsanvändning

Livscykel för materialisering

Det här avsnittet förklarar hur materialiseringar skapas, hanteras och uppdateras under hela livscykeln.

Skapa och ändra

När du skapar eller ändrar en måttvy (med hjälp av CREATE, ALTEReller Katalogutforskaren) uppdateras definitionsdefinitionen för måttvyn omedelbart. Materialiserade vyer uppdateras asynkront i bakgrunden med hjälp av en hanterad pipeline.

Så här definierar du en ny materialisering i Catalog Explorer-redigeraren:

  1. Klicka på Materialiseringar.
  2. Klicka på Schemalägg för att ange ett schema. Du kan välja en intervallperiod eller ange att materialiseringen ska köras vid en viss tidpunkt.
  3. Välj en typ. Endast en oaggregerad materialisering tillåts per måttvy. Mer information finns i Typer av materialiseringar för måttvyer.
  4. Använd listrutan Fält för att välja de fält som ska inkluderas i materialiseringen.
  5. Använd listrutan Mått för att välja de mått som ska inkluderas.

När du skapar en måttvy skapar Databricks en Lakeflow-pipeline och schemalägger en första uppdatering omedelbart om det finns angivna materialiserade vyer. Måttvyn är fortfarande frågebar utan materialiseringar genom att återgå till att fråga från källdata.

När du ändrar en måttvy schemalägger Inte Databricks nya uppdateringar, såvida du inte aktiverar materialisering för första gången. Materialiserade vyer används inte för automatisk frågeomskrivning förrän nästa schemalagda uppdatering är klar.

Att ändra materialiseringsschemat utlöser ingen uppdatering.

Utan ett schema kör pipelinen en första uppdatering när den skapas, men efterföljande uppdateringar måste utlösas manuellt eller så blir data inaktuella. Databricks rekommenderar att du alltid anger ett schema så att datan hålls uppdaterad, såvida du inte testar eller utvecklar en prototyp.

Mer information om uppdateringsbeteende finns i Manuell uppdatering .

Inspektera underliggande pipeline

Materialisering för måttvyer implementeras med hjälp av Lakeflow-pipelines. Du kan komma åt pipelinen på två sätt:

  • I Katalogutforskaren: Fliken Översikt för måttvyn innehåller en direktlänk under rubriken Uppdatera schema . Mer information om hur du kommer åt Katalogutforskaren finns i Vad är Katalogutforskaren?.
  • Använda SQL: Kör DESCRIBE EXTENDED. Avsnittet Uppdateringsinformation innehåller pipelinelänken och den aktuella uppdateringsstatusen.
DESCRIBE EXTENDED my_metric_view;

Exempel på utdata:

-- Returns additional metadata such as parent schema, owner, access time etc.
> DESCRIBE EXTENDED my_metric_view;
                      col_name                       data_type    comment
 ------------------------------- ------------------------------ ----------
                           ...                             ...        ...

 # Detailed Table Information
                           ...                             ...

                      Language                            YAML
              Table properties                             ...
 # Refresh Information
         Latest Refresh Status                       Succeeded
                Latest Refresh                     https://...
              Refresh Schedule                   EVERY 6 HOURS

Manuell uppdatering

Via länken till Lakeflow-pipelinesidan kan du manuellt starta en uppdatering av en pipeline för att uppdatera materialiseringarna. Du kan också utlösa en manuell uppdatering med följande SQL-kommando:

REFRESH MATERIALIZED VIEW <metric-view-name>

Inkrementell uppdatering

De materialiserade vyerna använder inkrementell uppdatering när det är möjligt och har samma begränsningar som materialiserade standardvyer när det gäller datakällor och planstruktur.

Mer information om krav och begränsningar finns i Inkrementell uppdatering för materialiserade vyer.

Billing

Uppdatering av materialiserade vyer medför användningsavgifter för Lakeflow-pipelines. Information om DBU-förbrukningen för pipelinen finns i Vad är DBU-förbrukningen för en serverlös pipeline?.

Kända begränsningar

Följande begränsningar gäller vid materialisering av måttvyer:

  • Du kan inte materialisera en måttvy som definierar parametrar.
  • När en materialisering har skapats för en måttvy kan du inte ändra ägaren.
  • Databricks stöder inte gruppägande för materialiserade måttvyer.
  • Endast den exakta matchningsstrategin kan användas för måttvyer med en-till-många-joiner.
  • Materialiseringen schedule stöder inte satsen TRIGGER ON UPDATE.