megvalósul()

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álja dcount() .

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.materialized a 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))