materialize()
Rögzíti egy táblázatos kifejezés értékét a lekérdezés végrehajtásának időtartamára, hogy a lekérdezés újraszámítás nélkül többször hivatkozzon rá.
Syntax
materialize(
Kifejezés)
További információ a szintaxis konvenciókról.
Paraméterek
Név | Típus | Kötelező | Leírás |
---|---|---|---|
expression | string |
✔️ | A lekérdezés végrehajtása során kiértékelendő és gyorsítótárazandó táblázatos kifejezés. |
Megjegyzések
A materialize()
függvény a következő esetekben hasznos:
- Felgyorsíthatja azokat a lekérdezéseket, amelyek olyan nagy számítási feladatokat végeznek, amelyek eredményeit többször használják fel a lekérdezésben.
- Ha csak egyszer szeretne kiértékelni egy táblázatos kifejezést, és többször is használni szeretné egy lekérdezésben. Ez általában akkor szükséges, ha a táblázatos kifejezés nem determinisztikus. Ha például a kifejezés a
rand()
vagy a függvénytdcount()
használja.
Megjegyzés
A Materialize gyorsítótárméretkorlátja 5 GB. Ez a korlát fürtcsomópontonként van, és az egyidejűleg futó összes lekérdezés esetében kölcsönös. Ha egy lekérdezés használ materialize()
, és a gyorsítótár nem tud több adatot tárolni, a lekérdezés egy hibával megszakad.
Tipp
A táblázatos kifejezések materializálásának másik módja az hint.materialized
operátorként és partícióoperátorként használt jelző használata. Mindegyiknek egyetlen materializációs gyorsítótára van.
Tipp
- Küldje le az összes lehetséges operátort, amely csökkenti a materializált adathalmazt, és megtartja a lekérdezés szemantikáját. Használjon például gyakori szűrőket ugyanarra a materializált kifejezésre.
- Ha operandusaik kölcsönös al lekérdezésekkel rendelkeznek, akkor az illesztéssel vagy az egyesítéssel való materializálást akkor érdemes használni, ha az operandusok egyszer hajthatók végre. Például illesztés/egyesítő elágazás lábak. Lásd a join operátor használatát szemléltető példát.
- A Materialize csak akkor használható a let utasításokban, ha nevet ad a gyorsítótárazott eredménynek. Lásd a let utasítások használatát ismertető példát).
Példák a lekérdezési teljesítmény javítására
Az alábbi példa bemutatja, hogyan materialize()
javítható a lekérdezés teljesítménye.
A kifejezés _detailed_data
függvény használatával materialize()
van definiálva, ezért csak egyszer lesz kiszámítva.
let _detailed_data = materialize(StormEvents | summarize Events=count() by State, EventType);
_detailed_data
| summarize TotalStateEvents=sum(Events) by State
| join (_detailed_data) on State
| extend EventPercentage = Events*100.0 / TotalStateEvents
| project State, EventType, EventPercentage, Events
| top 10 by EventPercentage
Kimenet
Állapot | EventType | EventPercentage | esemény |
---|---|---|---|
HAWAII VIZEK | Vízspout | 100 | 2 |
ONTARIO-TÓ | Tengeri zivatar szél | 100 | 8 |
ALASZKAI-ÖBÖL | Vízspout | 100 | 4 |
ATLANTI-ÓCEÁN ÉSZAKI RÉGIÓJA | Tengeri zivatar szél | 95.2127659574468 | 179 |
TÓ ERIE | Tengeri zivatar szél | 92.5925925925926 | 25 |
CSENDES-ÓCEÁNI TÉRSÉG | Vízspout | 90 | 9 |
MICHIGAN-TÓ | Tengeri zivatar szél | 85.1648351648352 | 155 |
HURON-TÓ | Tengeri zivatar szél | 79.3650793650794 | 50 |
MEXIKÓI-ÖBÖL | Tengeri zivatar szél | 71.7504332755633 | 414 |
HAWAII | High Surf | 70.0218818380744 | 320 |
Az alábbi példa véletlenszerű számokból álló készletet hoz létre, és kiszámítja a következőket:
- Hány különböző érték van a készletben (
Dcount
) - A készlet első három értéke
- A készletben lévő összes érték összege
Ez a művelet kötegekkel végezhető el, és a következőket valósíthatja meg:
let randomSet =
materialize(
range x from 1 to 3000000 step 1
| project value = rand(10000000));
randomSet | summarize Dcount=dcount(value);
randomSet | top 3 by value;
randomSet | summarize Sum=sum(value)
Eredményhalmaz 1:
Dcount |
---|
2578351 |
Eredményhalmaz 2:
érték |
---|
9999998 |
9999998 |
9999997 |
Eredményhalmaz 3:
Sum |
---|
15002960543563 |
Példák materialize() használatára
Tipp
Ha a lekérdezések többsége dinamikus objektumokból több millió sorból nyer ki mezőket, a betöltési időben materializálja az oszlopot.
Ha egynél többször használt értékkel szeretné használni az let
utasítást, használja a materialize() függvényt. Próbálja meg leküldni az összes lehetséges operátort, amely csökkenti a materializált adathalmazt, és továbbra is megőrzi a lekérdezés szemantikáját. Használjon például szűrőket, vagy csak a szükséges oszlopokat projektelje ki.
let materializedData = materialize(Table
| where Timestamp > ago(1d));
union (materializedData
| where Text !has "somestring"
| summarize dcount(Resource1)), (materializedData
| where Text !has "somestring"
| summarize dcount(Resource2))
A szűrő kölcsönös Text
, és leküldhető a materializált kifejezésre.
A lekérdezésnek csak oszlopra Timestamp
, Text
, Resource1
és Resource2
oszlopra van szüksége. Ezeket az oszlopokat a materializált kifejezésen belül kivetíti.
let materializedData = materialize(Table
| where Timestamp > ago(1d)
| where Text !has "somestring"
| project Timestamp, Resource1, Resource2, Text);
union (materializedData
| summarize dcount(Resource1)), (materializedData
| summarize dcount(Resource2))
Ha a szűrők nem azonosak, mint az alábbi lekérdezésben:
let materializedData = materialize(Table
| where Timestamp > ago(1d));
union (materializedData
| where Text has "String1"
| summarize dcount(Resource1)), (materializedData
| where Text has "String2"
| summarize dcount(Resource2))
Ha az egyesített szűrő drasztikusan csökkenti a materializált eredményt, kombinálja mindkét szűrőt a materializált eredményen egy logikai or
kifejezéssel, mint az alábbi lekérdezésben. Tartsa azonban a szűrőket minden egyes egyesítő lábban, hogy megőrizze a lekérdezés szemantikáját.
let materializedData = materialize(Table
| where Timestamp > ago(1d)
| where Text has "String1" or Text has "String2"
| project Timestamp, Resource1, Resource2, Text);
union (materializedData
| where Text has "String1"
| summarize dcount(Resource1)), (materializedData
| where Text has "String2"
| summarize dcount(Resource2))
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: