materialize()
Sorgu yürütmesi süresince tablosal ifadenin değerini yakalar, böylece sorgu tarafından yeniden hesaplama yapılmadan birden çok kez başvurulabilmesini sağlar.
Syntax
materialize(
Ifa -de)
Söz dizimi kuralları hakkında daha fazla bilgi edinin.
Parametreler
Ad | Tür | Gerekli | Açıklama |
---|---|---|---|
expression | string |
✔️ | Sorgu yürütme sırasında değerlendirilecek ve önbelleğe alınacak tablosal ifade. |
Açıklamalar
materialize()
işlevi aşağıdaki senaryolarda yararlıdır:
- Sonuçları sorguda birden çok kez kullanılan ağır hesaplamalar yapan sorguları hızlandırmak için.
- Tablosal ifadeyi yalnızca bir kez değerlendirmek ve sorguda birçok kez kullanmak için. Bu genellikle tablosal ifade belirlenici değilse gereklidir. Örneğin, ifade veya
dcount()
işlevlerini kullanıyorsarand()
.
Not
Materialize'ın önbellek boyutu sınırı 5 GB'tır. Bu sınır küme düğümü başınadır ve eşzamanlı olarak çalıştırılan tüm sorgular için karşılıklıdır. Sorgu kullanıyorsa materialize()
ve önbellek daha fazla veri tutamıyorsa sorgu bir hatayla durdurulacaktır.
İpucu
Tablosal ifadenin gerçekleştirilmesini gerçekleştirmenin bir diğer yolu da as işleci ve hint.materialized
bölüm işleci bayrağını kullanmaktır. Hepsi tek bir gerçekleştirme önbelleğini paylaşır.
İpucu
- Gerçekleştirilmiş veri kümesini azaltan ve sorgunun semantiğini tutan tüm olası işleçleri gönderme. Örneğin, aynı gerçekleştirilmiş ifadenin üzerinde ortak filtreler kullanın.
- İşlenenleri bir kez yürütülebilen karşılıklı alt sorgulara sahip olduğunda birleştirme veya birleşim ile gerçekleştirme özelliğini kullanın. Örneğin, çatal bacakları birleştirme/birleştirme. Bkz. join işleci kullanma örneği.
- Materialize yalnızca önbelleğe alınan sonuca bir ad verirseniz let deyimlerinde kullanılabilir. Bkz. let deyimlerini kullanma örneği).
Sorgu performansı geliştirme örnekleri
Aşağıdaki örnek, sorgunun performansını artırmak için nasıl materialize()
kullanılabileceğini gösterir.
İfade _detailed_data
işlevi kullanılarak materialize()
tanımlanır ve bu nedenle yalnızca bir kez hesaplanır.
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
Çıkış
Durum | Olay türü | EventPercentage | Ekinlikler |
---|---|---|---|
HAWAII SULARı | Su Borusu | 100 | 2 |
ONTARIO GÖLÜ | Deniz Fırtına Rüzgarı | 100 | 8 |
ALASKA KÖRFEZI | Su Borusu | 100 | 4 |
KUZEY ATLANTIK | Deniz Fırtına Rüzgarı | 95.2127659574468 | 179 |
ERIE GÖLÜ | Deniz Fırtına Rüzgarı | 92.5925925925926 | 25 |
E PASIFIK | Su Borusu | 90 | 9 |
MICHIGAN GÖLÜ | Deniz Fırtına Rüzgarı | 85.1648351648352 | 155 |
HURON GÖLÜ | Deniz Fırtına Rüzgarı | 79.3650793650794 | 50 |
MEKSIKA KÖRFEZI | Deniz Fırtına Rüzgarı | 71.7504332755633 | 414 |
HAWAİİ | Yüksek Sörf | 70.0218818380744 | 320 |
Aşağıdaki örnek bir rastgele sayı kümesi oluşturur ve hesaplar:
- Kümede kaç ayrı değer (
Dcount
) - Kümedeki ilk üç değer
- Kümedeki tüm bu değerlerin toplamı
Bu işlem toplu işlemler kullanılarak gerçekleştirilebilir ve gerçekleştirilebilir:
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)
Sonuç kümesi 1:
Dcount |
---|
2578351 |
Sonuç kümesi 2:
değer |
---|
9999998 |
9999998 |
9999997 |
Sonuç kümesi 3:
Sum |
---|
15002960543563 |
materialize() kullanma örnekleri
İpucu
Sorgularınızın çoğu milyonlarca satırdaki dinamik nesnelerden alan ayıklarsa, veri alımı sırasında sütununuzu gerçekleştirin.
deyimini let
birden çok kez kullandığınız bir değerle kullanmak için materialize() işlevini kullanın. Gerçekleştirilmiş veri kümesini azaltacak ve sorgunun semantiğini kullanmaya devam edecek tüm olası işleçleri göndermeyi deneyin. Örneğin, filtreleri kullanın veya yalnızca gerekli sütunları projeleyin.
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))
üzerindeki Text
filtre karşılıklıdır ve gerçekleştirilmiş ifadeye gönderilebilir.
Sorgu yalnızca , , Text
Resource1
ve Resource2
sütunlarına Timestamp
ihtiyaç duyar. Bu sütunları gerçekleştirilmiş ifade içinde yansıtın.
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))
Filtreler aşağıdaki sorguda olduğu gibi aynı değilse:
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))
Birleştirilmiş filtre gerçekleştirilmiş sonucu önemli ölçüde azalttığında, aşağıdaki sorguda olduğu gibi, gerçekleştirilmiş sonuç üzerindeki her iki filtreyi mantıksal or
bir ifadeyle birleştirin. Ancak, sorgunun semantiğini korumak için filtreleri her birleşim bacağında tutun.
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))
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin