Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Szolgáltatások váltása a Verzió legördülő listával. További információ a navigációról.
A következőkre vonatkozik: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Egy táblázatos kifejezés értékét rögzíti a lekérdezés végrehajtásának időtartamára, hogy a lekérdezés többször is hivatkozni lehessen rá újraszámítás nélkül.
Szemantika
materialize(
kifejezés)
További információ szintaxiskonvenciákról.
Paraméterek
| Név | Típus | Kötelező | Leírás |
|---|---|---|---|
| kifejezés | 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:
- Gyorsíthatja azokat a lekérdezéseket, amelyek olyan nagy számításokat végeznek, amelyek eredményeit többször használják a lekérdezésben.
- Táblázatos kifejezés csak egyszer értékelhető ki, és többször is használható egy lekérdezésben. Ez általában akkor szükséges, ha a táblázatos kifejezés nemdeterminista. Ha például a kifejezés a függvényeket
rand()használjadcount().
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 megszakad egy hibával.
Jótanács
- A táblázatos kifejezés materializálásának másik módja az
hint.materializeda partíció operátorának megjelölése. Mindegyiknek egyetlen materializálási gyorsítótára van. - Leküldheti 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 az operandusaik közös alquerykkel rendelkeznek, akkor az illesztéssel vagy az egyesítéssel materializálhatók, amelyek egyszer végrehajthatók. Például illesztés/egyesítő elágazás lábak. Lásd az illesztés operátorának használatát.
- A Materialize csak akkor használható a let utasításban, ha nevet ad a gyorsítótárazott eredménynek. Lásd a let utasításokkal kapcsolatos példát).
Caution
Mérje fel a lekérdezéseket a materializálás() nélkül, és ellenőrizze, hogy javítja-e az adatok és a lekérdezési minták teljesítményét. Bizonyos esetekben a materialize() növelheti a memóriahasználatot anélkül, hogy jelentős teljesítménynövekedést biztosítanának, így a tesztelés segít a legjobb módszer kiválasztásában.
Példák a lekérdezési teljesítmény javítására
Az alábbi példa bemutatja, hogyan materialize() használható a lekérdezés teljesítményének javítására.
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
| Állam | Eseménytípus | EventPercentage | Események |
|---|---|---|---|
| HAWAII VIZEK | Vízspout | 100 | 2 |
| LAKE ONTARIO | Tengeri zivatar szél | 100 | 8 |
| ALASZKAI-ÖBÖL | Vízspout | 100 | 4 |
| ATLANTI-ÓCEÁN ÉSZAK | Tengeri zivatar szél | 95.2127659574468 | 179 |
| LAKE ERIE | Tengeri zivatar szél | 92.5925925925926 | 25 |
| E PACIFIC | Vízspout | 90 | 9 |
| MICHIGAN-TÓ | Tengeri zivatar szél | 85.1648351648352 | 155 |
| LAKE HURON | Tengeri zivatar szél | 79.3650793650794 | 50 |
| MEXIKÓI-ÖBÖL | Tengeri zivatar szél | 71.7504332755633 | 414 |
| HAWAII | Magas surf | 70.0218818380744 | 320 |
Az alábbi példa véletlenszerű számokat hoz létre, és kiszámítja:
- Hány különböző érték van a készletben (
Dcount) - A készlet első három értéke
- A készlet összes értékének összege
Ez a művelet kötegek használatával végezhető el, és az alábbiakat 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)
1. eredményhalmaz:
| Dcount |
|---|
| 2578351 |
2. eredményhalmaz:
| érték |
|---|
| 9999998 |
| 9999998 |
| 9999997 |
3. eredményhalmaz:
| Összeg |
|---|
| 15002960543563 |
Példák a materialize() használatára
Jótanács
Ha a lekérdezések többsége több millió sorból nyer ki mezőket dinamikus objektumokból, akkor a betöltési időben hasznosíthatja az oszlopot. Ebben a forgatókönyvben használja a Frissítési szabályzat áttekintését.
Ha az let utasítást egy többször használt értékkel szeretné használni, 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éshez.
A lekérdezéshez csak oszlopokraTimestamp, Textés Resource1.Resource2 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, a materializált eredmény mindkét szűrője egy logikai or kifejezéssel kombinálható, mint az alábbi lekérdezésben. A lekérdezés szemantikájának megőrzése érdekében azonban tartsa meg a szűrőket minden egyesítő lábban.
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))