Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
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.
- 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
TIMEZONEellerANSI_MODEmatchar. - 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()elleris_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 BYsatser. - Inkludera eventuella filterkolumner (kolumner som används i
WHEREnä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 regionGROUP BY region, event_month-
GROUP BY skumedWHERE 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.
Frågan körs automatiskt på den bästa materialiseringen i stället för bastabellerna med den här algoritmen:
- Först försöker frågeoptimeraren göra en exakt matchning.
- Om det inte finns någon exakt matchning försöker frågeoptimeraren att hitta en matchning på en högre aggregeringsnivå.
- Om det inte finns någon rollup-matchning, och det finns en oaggregerad materialisering, försöker frågeoptimeraren att hitta en oaggregerad matchning.
- 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.
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
SUMavSUMs ellerMAXavMAXes).MEDIANkan inte rullas upp eftersom den förlitar sig på gruppdistributionen. -
Alla deltagande filter måste vara deterministiska uttryck: Om frågan har en
WHEREsats måste filtret alltid generera samma resultat för samma indata. Till exempelWHERE region = 'US'är deterministisk, men uttryck somrand()elleruuid()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:
SUMCOUNTMINMAXBIT_ANDBIT_ORBIT_XORBOOL_ANDBOOL_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
FILTERsats 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 EXTENDEDpå 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.
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:
- Klicka på Materialiseringar.
- 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.
- Välj en typ. Endast en oaggregerad materialisering tillåts per måttvy. Mer information finns i Typer av materialiseringar för måttvyer.
- Använd listrutan Fält för att välja de fält som ska inkluderas i materialiseringen.
- 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
schedulestöder inte satsenTRIGGER ON UPDATE.