Azure Veri Gezgini için sorgu yazma

Bu makalede, en yaygın işleçlerle basit sorgular gerçekleştirmek için Azure Veri Gezgini 'de sorgu dilini nasıl kullanacağınızı öğreneceksiniz. Ayrıca, dilin daha gelişmiş özelliklerinden bazılarını da açığa alırsınız.

Önkoşullar

Bu makaledeki sorguları iki şekilde çalıştırabilirsiniz:

Sorgu diline genel bakış

Azure Veri Gezgini 'deki bir sorgu, verileri işlemek ve sonuçları döndürmek için salt bir salt okuma isteğidir. İstek, söz diziminin okunmasını, yazılmasını ve otomatikleştirilmesini kolaylaştırmak için tasarlanmış bir veri akış modeli kullanılarak düz metin biçiminde belirtilir. sorgu, SQL: veritabanları, tablolar ve sütunlar gibi bir hiyerarşide düzenlenmiş şema varlıklarını kullanır.

Sorgu, noktalı virgül () ile ayrılmış bir dizi sorgu deyiminden oluşur. Bu, ; en az bir deyim tablo benzeri bir sütun ve satır halinde düzenlenmiş veri üreten bir ifadedir. Sorgudaki tablo ifadesi deyimleri sorgunun sonuçlarını üretir.

Tablosal ifade deyiminin sözdizimi, bir tablosal sorgu işlecinden diğerine, veri kaynağıyla başlayarak (örneğin, veritabanındaki bir tablo veya veri üreten bir operatör) ve ardından kanal () sınırlayıcısı kullanılarak birbirine bağlanan bir veri dönüştürme işleçleri aracılığıyla akan tablo veri akışı içerir | .

Örneğin, aşağıdaki sorguda tablolu ifade deyimi olan tek bir deyim vardır. Deyim StormEvents adlı bir tabloya başvuruyla başlar (bu tabloyu barındıran veritabanı burada örtük şekilde, bağlantı bilgilerinin bir parçası olarak yer alır). Söz konusu tablonun verileri (satırlar) StartTime sütununun değerine göre ve sonra da State sütununun değerine göre filtrelenir. Ardından sorgu "kalan" satırların sayısını döndürür.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| where StartTime >= datetime(2007-11-01) and StartTime < datetime(2007-12-01)
| where State == "FLORIDA"  
| count

Bu durumda, sonuç şu şekilde olur:

Sayı
23

Daha fazla bilgi için bkz. sorgu dili başvurusu.

En yaygın işleçler

Bu bölümde ele alınan işleçler, Azure Veri Gezgini sorguları anlamak için yapı taşlarıdır. Yazdığınız çoğu sorguya bu işleçlerden birkaçı dahil edilir.

Yardım kümesinde sorguları çalıştırmak için: her bir sorgunun üzerindeki sorguyu çalıştırmak Için tıklayın ' ı seçin.

Sorguları kendi kümenizde çalıştırmak için:

  1. Her sorguyu Web tabanlı sorgu uygulamasına kopyalayın ve ardından sorguyu seçin ya da imlecinizi sorguya yerleştirin.

  2. Uygulamanın en üstünde Çalıştır' ı seçin.

count

sayı: tablodaki satır sayısını döndürür.

Aşağıdaki sorgu, StormEvents tablosundaki satır sayısını döndürür.

[Sorguyu çalıştırmak için tıklayın]

StormEvents | count

take

Al: belirtilen sayıda veri satırı döndürür.

Aşağıdaki sorgu, StormEvents tablosundan beş satır döndürür. Anahtar sözcük sınırı , al için bir diğer addır .

[Sorguyu çalıştırmak için tıklayın]

StormEvents | take 5

İpucu

Kaynak veriler sıralanmamışsa hangi kayıtların döndürüleceğini garanti yoktur.

proje

Proje: bir sütun alt kümesini seçer.

Aşağıdaki sorgu belirli bir sütun kümesini döndürür.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| take 5
| project StartTime, EndTime, State, EventType, DamageProperty, EpisodeNarrative

konum

burada: bir tabloyu bir koşula uyan satır alt kümesiyle filtreler.

Aşağıdaki sorgu, ve ile verileri filtreler EventTypeState .

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| where EventType == 'Flood' and State == 'WASHINGTON'
| take 5
| project StartTime, EndTime, State, EventType, DamageProperty, EpisodeNarrative

sort

Sırala: giriş tablosunun satırlarını bir veya daha fazla sütuna göre sıraya göre sıralayın.

Aşağıdaki sorgu, verileri azalan sırada sıraya göre sıralar DamageProperty .

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| where EventType == 'Flood' and State == 'WASHINGTON'
| sort by DamageProperty desc
| take 5
| project StartTime, EndTime, State, EventType, DamageProperty, EpisodeNarrative

Not

İşlem sırası önemlidir. Daha önce yerleştirmeyi deneyin take 5sort by . Farklı sonuçlar elde edilsin mi?

top

top: belirtilen sütunlara göre sıralanan ilk N kaydı döndürür.

Aşağıdaki sorgu, daha az bir operatör ile aynı sonuçları döndürür.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| where EventType == 'Flood' and State == 'WASHINGTON'
| top 5 by DamageProperty desc
| project StartTime, EndTime, State, EventType, DamageProperty, EpisodeNarrative

genişletmeyi

uzat: türetilmiş sütunları hesaplar.

Aşağıdaki sorgu her satırdaki bir değeri hesaplarken yeni bir sütun oluşturur.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| where EventType == 'Flood' and State == 'WASHINGTON'
| top 5 by DamageProperty desc
| extend Duration = EndTime - StartTime
| project StartTime, EndTime, Duration, State, EventType, DamageProperty, EpisodeNarrative

İfadeler her zamanki işleçleri (+,-, *,/,%) içerebilir ve çağırabilmeniz için kullanabileceğiniz bir dizi kullanışlı işlev vardır.

ölçütü

özetleme: satır gruplarını toplar.

Aşağıdaki sorgu, tarafından olayların sayısını döndürür State .

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| summarize event_count = count() by State

Özetleme işleci, by yan tümcesinde aynı değerlere sahip satırları birlikte gruplandırır ve sonra her grubu tek bir satırda birleştirmek için toplama işlevini ( Countgibi) kullanır. Bu nedenle, bu durumda her durum için bir satır ve bu durumdaki satır sayısı için bir sütun vardır.

Bir dizi toplama işlevi vardır ve birkaç hesaplanan sütun oluşturmak için bunlardan birkaçını tek bir özetleme işlecinde kullanabilirsiniz. Örneğin, her durumda fırtınalarını sayısını ve durum başına benzersiz fırtınalarını sayısını alabilir ve en üst düzey olarak etkilenen durumları almak için yukarıdan yararlanın.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| summarize StormCount = count(), TypeOfStorms = dcount(EventType) by State
| top 5 by StormCount desc

Özetleme işleminin sonucu:

  • İçindeki adlı her sütun

  • Hesaplanan her ifade için bir sütun

  • Her değere göre birleşim için bir satır

işlenecek

render: sonuçları bir grafik çıkış olarak işler.

Aşağıdaki sorgu bir sütun grafiğini görüntüler.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| summarize event_count=count(), mid = avg(BeginLat) by State
| sort by mid
| where event_count > 1800
| project State, event_count
| render columnchart

Aşağıdaki sorgu basit bir zaman grafiği görüntüler.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| summarize event_count=count() by bin(StartTime, 1d)
| render timechart

Aşağıdaki sorgu, olayları bir günde bir kez, saat olarak bir kez ve bir zaman grafiği görüntüleyerek sayar.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| extend hour = floor(StartTime % 1d , 1h)
| summarize event_count=count() by hour
| sort by hour asc
| render timechart

Aşağıdaki sorgu, zaman grafiğinde birden çok günlük serisini karşılaştırır.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| extend hour= floor( StartTime % 1d , 1h)
| where State in ("GULF OF MEXICO","MAINE","VIRGINIA","WISCONSIN","NORTH DAKOTA","NEW JERSEY","OREGON")
| summarize event_count=count() by hour, State
| render timechart

Not

Render işleci, altyapısının bir parçası yerine istemci tarafı bir özelliktir. Kullanım kolaylığı için dil ile tümleşiktir. Web uygulaması şu seçenekleri destekler: çubuk grafik, sütun çizelgesi, pasta çizelgesi, zaman çizelgesi ve çizgi grafik.

Skaler işleçler

Bu bölümde en önemli skaler işleçlerden bazıları yer almaktadır.

bin()

bin(): Değerleri, belirtilen bir bin boyutunun katları olan tamsayıya yuvarlar.

Aşağıdaki sorgu, bir günlük demet boyutuyla s sayımı hesaplar.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| where StartTime > datetime(2007-02-14) and StartTime < datetime(2007-02-21)
| summarize event_count = count() by bin(StartTime, 1d)

case()

case(): Bir durum listesini değerlendirir ve, geçerliliği yerine gelen ilk sonuç ifadesini veya son else ifadesini döndürür. Bu işleci kullanarak verileri kategorilere ayırabilirsiniz veya gruplandırabilirsiniz:

Aşağıdaki sorgu yeni bir sütun döndürür ve deaths_bucket ölümleri sayıya göre gruplar.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| summarize deaths = sum(DeathsDirect) by State
| extend deaths_bucket = case (
    deaths > 50, "large",
    deaths > 10, "medium",
    deaths > 0, "small",
    "N/A")
| sort by State asc

extract()

extract(): Bir metin dizesinde normal ifade için eşleşme alır.

Aşağıdaki sorgu bir izlemeden belirli öznitelik değerlerini ayıklar.

[Sorguyu çalıştırmak için tıklayın]

let MyData = datatable (Trace: string) ["A=1, B=2, Duration=123.45,...", "A=1, B=5, Duration=55.256, ..."];
MyData
| extend Duration = extract("Duration=([0-9.]+)", 1, Trace, typeof(real)) * time(1s)

Bu sorgu, bir adı (bu durumda ) bir ifadeye bağlayan bir let deyimi kullanır. Let deyiminin göründüğü kapsamın geri kalanı için (genel kapsam veya işlev gövdesi kapsamında), sınır değerine başvurmak için ad kullanılabilir.

parse_json()

parse_json(): Bir dizeyi JSON değeri olarak yorumlar ve değeri dinamik olarak döndürür. Bileşik JSON nesnesinin birden fazla öğesini ayıklamak için extractjson() işlevini kullanmak daha üstündür.

Aşağıdaki sorgu bir diziden JSON öğelerini ayıklar.

[Sorguyu çalıştırmak için tıklayın]

let MyData = datatable (Trace: string)
['{"duration":[{"value":118.0,"valcount":5.0,"min":100.0,"max":150.0,"stdDev":0.0}]}'];
MyData
| extend NewCol = parse_json(Trace)
| project NewCol.duration[0].value, NewCol.duration[0].valcount, NewCol.duration[0].min, NewCol.duration[0].max, NewCol.duration[0].stdDev

Aşağıdaki sorgu JSON öğelerini ayıklar.

[Sorguyu çalıştırmak için tıklayın]

let MyData = datatable (Trace: string) ['{"value":118.0,"valcount":5.0,"min":100.0,"max":150.0,"stdDev":0.0}'];
MyData
| extend NewCol = parse_json(Trace)
| project NewCol.value, NewCol.valcount, NewCol.min, NewCol.max, NewCol.stdDev

Aşağıdaki sorgu, dinamik veri türüne sahip JSON öğelerini ayıklar.

[Sorguyu çalıştırmak için tıklayın]

let MyData = datatable (Trace: dynamic)
[dynamic({"value":118.0,"counter":5.0,"min":100.0,"max":150.0,"stdDev":0.0})];
MyData
| project Trace.value, Trace.counter, Trace.min, Trace.max, Trace.stdDev

ago()

ago(): Verilen zaman zamanlarını geçerli UTC saat saatinden çıkarır.

Aşağıdaki sorgu son 12 saat için verileri döndürür.

[Sorguyu çalıştırmak için tıklayın]

//The first two lines generate sample data, and the last line uses
//the ago() operator to get records for last 12 hours.
print TimeStamp= range(now(-5d), now(), 1h), SomeCounter = range(1,121)
| mv-expand TimeStamp, SomeCounter
| where TimeStamp > ago(12h)

startofweek()

startofweek(): Sağlandı ise kaydırmayla kaydırarak tarihi içeren haftanın başlangıcını döndürür

Aşağıdaki sorgu haftanın başlangıcını farklı uzaklıklarla döndürür.

[Sorguyu çalıştırmak için tıklayın]

range offset from -1 to 1 step 1
| project weekStart = startofweek(now(), offset),offset

Bu sorgu, tek sütunlu bir değer tablosu oluşturan range işleci kullanır. Ayrıca bkz. startofday(), startofweek(), startofyear()), startofmonth(), endofday(), endofweek(), endofmonth()ve endofyear().

between()

between(): Kapsayıcı aralığın içindeki girişle eşler.

Aşağıdaki sorgu, verileri belirli bir tarih aralığına göre filtreler.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| where StartTime between (datetime(2007-07-27) .. datetime(2007-07-30))
| count

Aşağıdaki sorgu, verileri belirli bir tarih aralığına göre filtreler ve başlangıç tarihine göre üç günlük ( 3d ) küçük farklılıklar gösterir.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| where StartTime between (datetime(2007-07-27) .. 3d)
| count

Tablosal işleçler

Kusto'da, bazıları bu makalenin diğer bölümlerinde ele alınan birçok tablosal işleç vardır. Burada ayrıştırmaya odaklanın.

parse

parse:Bir dize ifadesini değerlendirir ve değerini bir veya daha fazla hesaplanmış sütuna ayrıştırir. Ayrıştırmanın üç yolu vardır: basit (varsayılan), regex ve gevşek.

Aşağıdaki sorgu, varsayılan basit ayrıştırmayı kullanarak bir izlemeyi ayrıştırarak ilgili değerleri ayıklar. İfade (StringConstant olarak adlandırılır) normal bir dize değeridir ve eşleşme katıdır: genişletilmiş sütunların gerekli türler ile eşleşmesi gerekir.

[Sorguyu çalıştırmak için tıklayın]

let MyTrace = datatable (EventTrace:string)
[
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=23, lockTime=02/17/2016 08:40:01Z, releaseTime=02/17/2016 08:40:01Z, previousLockTime=02/17/2016 08:39:01Z)',
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00Z, releaseTime=02/17/2016 08:40:00Z, previousLockTime=02/17/2016 08:39:00Z)',
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01Z, releaseTime=02/17/2016 08:40:01Z, previousLockTime=02/17/2016 08:39:01Z)',
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01Z, releaseTime=02/17/2016 08:41:00Z, previousLockTime=02/17/2016 08:40:01Z)',
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00Z, releaseTime=02/17/2016 08:41:00Z, previousLockTime=02/17/2016 08:40:00Z)'
];
MyTrace
| parse EventTrace with * "resourceName=" resourceName ", totalSlices=" totalSlices:long * "sliceNumber=" sliceNumber:long * "lockTime=" lockTime ", releaseTime=" releaseTime:date "," * "previousLockTime=" previouLockTime:date ")" *  
| project resourceName ,totalSlices , sliceNumber , lockTime , releaseTime , previouLockTime

Aşağıdaki sorgu bir izlemeyi ayrıştırıyor ve kullanarak ilgili değerleri kind = regex ayıklar. StringConstant normal bir ifade olabilir.

[Sorguyu çalıştırmak için tıklayın]

let MyTrace = datatable (EventTrace:string)
[
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=23, lockTime=02/17/2016 08:40:01Z, releaseTime=02/17/2016 08:40:01Z, previousLockTime=02/17/2016 08:39:01Z)',
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00Z, releaseTime=02/17/2016 08:40:00Z, previousLockTime=02/17/2016 08:39:00Z)',
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01Z, releaseTime=02/17/2016 08:40:01Z, previousLockTime=02/17/2016 08:39:01Z)',
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01Z, releaseTime=02/17/2016 08:41:00Z, previousLockTime=02/17/2016 08:40:01Z)',
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00Z, releaseTime=02/17/2016 08:41:00Z, previousLockTime=02/17/2016 08:40:00Z)'
];
MyTrace
| parse kind = regex EventTrace with "(.*?)[a-zA-Z]*=" resourceName @", totalSlices=\s*\d+\s*.*?sliceNumber=" sliceNumber:long  ".*?(previous)?lockTime=" lockTime ".*?releaseTime=" releaseTime ".*?previousLockTime=" previousLockTime:date "\\)"  
| project resourceName , sliceNumber , lockTime , releaseTime , previousLockTime

Aşağıdaki sorgu bir izlemeyi ayrıştırıyor ve kullanarak ilgili değerleri kind = relaxed ayıklar. StringConstant normal bir dize değeridir ve eşleşme gevşetildi: Genişletilmiş sütunlar gerekli türlere kısmen eş olabilir.

[Sorguyu çalıştırmak için tıklayın]

let MyTrace = datatable (EventTrace:string)
[
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=23, lockTime=02/17/2016 08:40:01Z, releaseTime=02/17/2016 08:40:01Z, previousLockTime=02/17/2016 08:39:01Z)',
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00Z, releaseTime=02/17/2016 08:40:00Z, previousLockTime=02/17/2016 08:39:00Z)',
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01Z, releaseTime=02/17/2016 08:40:01Z, previousLockTime=02/17/2016 08:39:01Z)',
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01Z, releaseTime=02/17/2016 08:41:00Z, previousLockTime=02/17/2016 08:40:01Z)',
'Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00Z, releaseTime=02/17/2016 08:41:00Z, previousLockTime=02/17/2016 08:40:00Z)'
];
MyTrace
| parse kind=relaxed "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=NULL, sliceNumber=23, lockTime=02/17/2016 08:40:01, releaseTime=NULL, previousLockTime=02/17/2016 08:39:01)" with * "resourceName=" resourceName ", totalSlices=" totalSlices:long * "sliceNumber=" sliceNumber:long * "lockTime=" lockTime ", releaseTime=" releaseTime:date "," * "previousLockTime=" previousLockTime:date ")" *  
| project resourceName ,totalSlices , sliceNumber , lockTime , releaseTime , previousLockTime

Zaman serisi analizi

make-series

make-series:özetleme gibi satır gruplarını bir araya toplar, ancak değerlere göre her birleşimde bir (zaman) seri vektörü üretir.

Aşağıdaki sorgu, günlük storm olaylarının sayısı için bir dizi zaman serisi döndürür. Sorgu her durum için üç aylık bir dönemi kapsar ve eksik depoları 0 sabiti ile doldurur:

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| make-series n=count() default=0 on StartTime in range(datetime(2007-01-01), datetime(2007-03-31), 1d) by State

Bir dizi (zaman) serisi oluşturduktan sonra anormal şekilleri, mevsimlik desenleri ve çok daha fazlasını algılamak için seri işlevleri uygulayabilirsiniz.

Aşağıdaki sorgu, belirli bir günde en çok olay olan ilk üç durumları ayıklar:

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| make-series n=count() default=0 on StartTime in range(datetime(2007-01-01), datetime(2007-03-31), 1d) by State
| extend series_stats(n)
| top 3 by series_stats_n_max desc
| render timechart

Daha fazla bilgi için seri işlevlerinin tam listesini gözden geçirebilirsiniz.

Gelişmiş toplamalar

Bu makalenin başlarında count ve summarizegibi temel toplamaları ele amıştık. Bu bölümde daha gelişmiş seçenekler sunulmaktadır.

üst iç içe geçmiş

üst iç içe geçmiş:Her düzeyin önceki düzey değerlerine göre detaya gitme olduğu hiyerarşik üst sonuçlar üretir.

Bu işleç, pano görselleştirme senaryolarında veya aşağıdaki gibi bir soruyu yanıtlamak gerektiğinde kullanışlıdır: "K1'in ilk N değerlerini bulma (bazı toplamalar kullanarak); her biri için K2'nin en üst M değerlerini bulun (başka bir toplama kullanarak); ..."

Aşağıdaki sorgu, en üst düzeyde ve ardından ile State birlikte hiyerarşik bir tablo Sources döndürür.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| top-nested 2 of State by sum(BeginLat),
top-nested 3 of Source by sum(BeginLat),
top-nested 1 of EndLocation by sum(BeginLat)

pivot() eklentisi

pivot() eklentisi:Giriş tablosunda yer alan bir sütundaki benzersiz değerleri çıkış tablosunda birden çok sütuna dönüştürerek tabloyu döndürebilir. işleci, son çıkışta kalan sütun değerlerde gerekli olduğu toplamaları gerçekleştirir.

Aşağıdaki sorgu bir filtre uygular ve satırları sütunlara özetler.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| project State, EventType
| where State startswith "AL"
| where EventType has "Wind"
| evaluate pivot(State)

dcount()

dcount(): Gruptaki bir ifadenin benzersiz değerlerinin sayısıyla ilgili bir tahmin döndürür. Tüm değerleri saymak için count() kullanın.

Aşağıdaki sorgu, tarafından ayrı SourceState sayılır.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| summarize Sources = dcount(Source) by State

dcountif()

dcountif(): İfadenin, geçerli olarak değerlendirilen satırların benzersiz değerlerinin sayısını tahmin eder.

Aşağıdaki sorgu, burada için ayrı değerleri SourceDamageProperty < 5000 sayar.

[Sorguyu çalıştırmak için tıklayın]

StormEvents 
| take 100
| summarize Sources = dcountif(Source, DamageProperty < 5000) by State

dcount_hll()

dcount_hll(): HyperLogLog sonuçlarından(hll veya hll_merge tarafından oluşturulan) sayanı hesaplar.

Aşağıdaki sorgu, sayımı oluşturmak için HLL algoritmasını kullanır.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| summarize hllRes = hll(DamageProperty) by bin(StartTime,10m)
| summarize hllMerged = hll_merge(hllRes)
| project dcount_hll(hllMerged)

arg_max()

arg_max(): Grupta bir ifadeyi en üst düzeye çıkaran bir satır bulur ve başka bir ifadenin değerini (veya satırın tamamını döndüren * ) döndürür.

Aşağıdaki sorgu, her durumdaki son taşma raporunun saati döndürür.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| where EventType == "Flood"
| summarize arg_max(StartTime, *) by State
| project State, StartTime, EndTime, EventType

makeset()

makeset(): Bir ifadenin gruptaki ayrı değerler kümesinde yer alan dinamik (JSON) bir dizisini döndürür.

Aşağıdaki sorgu, her durum tarafından bir taşma rapor edildiğinde ve ayrı değerler kümesinden bir dizi oluşturduğunda tüm süreleri geri döndürür.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| where EventType == "Flood"
| summarize FloodReports = makeset(StartTime) by State
| project State, FloodReports

MV-Genişlet

MV-Expand: koleksiyondaki her değerin ayrı bir satır alması için dinamik olarak belirlenmiş bir sütundan çok değerli koleksiyonları genişletir. Genişletilmiş bir satırdaki diğer tüm sütunlar yinelenir. Bu, MakeList 'in tersidir.

Aşağıdaki sorgu, bir küme oluşturup daha sonra MV-Expand yeteneklerini göstermek için kullanarak örnek veriler üretir.

[Sorguyu çalıştırmak için tıklayın]

let FloodDataSet = StormEvents
| where EventType == "Flood"
| summarize FloodReports = makeset(StartTime) by State
| project State, FloodReports;
FloodDataSet
| mv-expand FloodReports

percentiles()

yüzdebirlik değeri (): bir ifade tarafından tanımlanan popülasyonun belirtilen en yakın derecelendirme yüzdelik değeri için bir tahmin döndürür. Doğruluk, yüzdelik bölge 'nin içindeki popülasyon yoğunluğunu gösterir. Yalnızca özetlemeiçinde toplama bağlamında kullanılabilir.

Aşağıdaki sorgu, yüzdebirlik değeri for fırtınası süresini hesaplar.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| extend duration = EndTime - StartTime
| where duration > 0s
| where duration < 3h
| summarize percentiles(duration, 5, 20, 50, 80, 95)

Aşağıdaki sorgu, yüzdebirlik değeri for fırtınası süresini duruma göre hesaplar ve verileri beş dakikalık sepetler () ile normalleştirir 5m .

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| extend duration = EndTime - StartTime
| where duration > 0s
| where duration < 3h
| summarize event_count = count() by bin(duration, 5m), State
| summarize percentiles(duration, 5, 20, 50, 80, 95) by State

Çapraz veri kümesi

Bu bölüm, daha karmaşık sorgular oluşturmanızı, tablolar arasında veri katılmayı ve veritabanları ile kümeler arasında sorgulama yapmayı sağlayan öğeleri ele alır.

atalım

Let: modülerliği ve yeniden kullanımı geliştirir. Let deyimi, potansiyel olarak karmaşık bir ifadeyi birden çok parçaya bölebilir, her biri bir ada bağlanır ve bu parçaları birlikte oluşturabilir. Bir Let deyimi, Kullanıcı tanımlı işlevler ve görünümler oluşturmak için de kullanılabilir (sonuçları yeni bir tablo gibi görünür tablolar üzerinde ifadeler). Let deyimi tarafından sınırlanan ifadeler, tablo türü veya Kullanıcı tanımlı işlev (Lambdas) türünde skalar türde olabilir.

Aşağıdaki örnek tablosal türünde bir değişken oluşturur ve sonraki bir ifadede onu kullanır.

[Sorguyu çalıştırmak için tıklayın]

let LightningStorms =
StormEvents
| where EventType == "Lightning";
let AvalancheStorms =
StormEvents
| where EventType == "Avalanche";
LightningStorms
| join (AvalancheStorms) on State
| distinct State

join

Birleştir: her tablodan belirtilen sütunların değerlerini eşleştirerek yeni bir tablo oluşturmak için iki tablo satırını birleştirin. Kusto , tambir birleşim türü aralığını destekler: FullOuter, Inner, ınnerunique, leftanti, leftantiyarı, LeftOuter, leftyarı, sağtantı, Soli

Aşağıdaki örnek iki tabloyu bir iç birleşim ile birleştirir.

[Sorguyu çalıştırmak için tıklayın]

let X = datatable(Key:string, Value1:long)
[
    'a',1,
    'b',2,
    'b',3,
    'c',4
];
let Y = datatable(Key:string, Value2:long)
[
    'b',10,
    'c',20,
    'c',30,
    'd',40
];
X 
| join kind=inner Y on Key

İpucu

JOIN öncesinde, giriş tablolarında bulunan satır ve sütun sayılarını azaltmak için WHERE ve Proje işleçlerini kullanın. Bir tablo her zaman diğerinin daha küçükse, bunu birleştirmenin sol (Piped) tarafı olarak kullanın. JOIN eşleşmesi için sütunlar aynı ada sahip olmalıdır. Tablolardan birindeki bir sütunu yeniden adlandırmak için gerekiyorsa Proje işlecini kullanın.

Serialize

serileştirme: row_number ()gibi serileştirilmiş veriler gerektiren işlevleri kullanabilmeniz için satır kümesini seri hale getirir.

Aşağıdaki sorgu, veriler serileştirildiği için başarılı oldu.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| summarize count() by State
| serialize
| extend row_number = row_number()

Satır kümesi de bir sonuç ise serileştirilmiş olarak değerlendirilir: sıralama, üstveya Aralık işleçleri, isteğe bağlı olarak Proje, Proje-kondu, uzat, WHERE, Parse, MV-Expandveya Al işleçleri.

[Sorguyu çalıştırmak için tıklayın]

StormEvents
| summarize count() by State
| sort by State asc
| extend row_number = row_number()

Veritabanları arası ve kümeler arası sorgular

Veritabanları arası ve çapraz küme sorguları: bir veritabanını olarak başvurarak aynı küme üzerinde sorgulayabilirsiniz . Uzak bir kümede bir veritabanını, olarak başvurarak sorgulayabilirsiniz cluster("MyCluster").database("MyDatabase").MyTable .

Aşağıdaki sorgu, kümeden bir kümeden ve sorgu verilerinden çağrılır MyCluster . Bu sorguyu çalıştırmak için kendi küme adınızı ve veritabanı adınızı kullanın.

cluster("MyCluster").database("Wiki").PageViews
| where Views < 2000
| take 1000;

Kullanıcı Analizi

Bu bölüm, kusto içinde kullanıcı davranışlarının analizini gerçekleştirmeye ne kadar kolay olduğunu gösteren öğeleri ve sorguları içerir.

activity_counts_metrics eklentisi

activity_counts_metrics eklentisi: faydalı etkinlik ölçümlerini (Toplam sayı değerleri, farklı sayı değerleri, farklı yeni değer sayısı ve toplanmış ayrı sayım) hesaplar. Ölçümler her bir zaman penceresi için hesaplanır, sonra karşılaştırılır ve tüm önceki zaman pencereleri ile toplanır.

Aşağıdaki sorgu, günlük etkinlik sayılarını hesaplayarak Kullanıcı benimsemesini analiz eder.

[Sorguyu çalıştırmak için tıklayın]

let start=datetime(2017-08-01);
let end=datetime(2017-08-04);
let window=1d;
let T = datatable(UserId:string, Timestamp:datetime)
[
'A', datetime(2017-08-01),
'D', datetime(2017-08-01),
'J', datetime(2017-08-01),
'B', datetime(2017-08-01),
'C', datetime(2017-08-02),
'T', datetime(2017-08-02),
'J', datetime(2017-08-02),
'H', datetime(2017-08-03),
'T', datetime(2017-08-03),
'T', datetime(2017-08-03),
'J', datetime(2017-08-03),
'B', datetime(2017-08-03),
'S', datetime(2017-08-03),
'S', datetime(2017-08-04),
];
T
| evaluate activity_counts_metrics(UserId, Timestamp, start, end,
window)

activity_engagement eklentisi

activity_engagement eklentisi: kayan bir zaman ÇIZELGESI penceresinde kimlik sütununa göre etkinlik katılım oranını hesaplar. activity_engagement eklentisi , Dau, WAU ve Mau 'ları hesaplamak için kullanılabilir (günlük, haftalık ve aylık etkin kullanıcılar).

Aşağıdaki sorgu, her gün bir uygulama kullanan toplam ayrı kullanıcı sayısını, haftalık olarak değişen yedi günlük bir pencerede döndürür.

[Sorguyu çalıştırmak için tıklayın]

// Generate random data of user activities
let _start = datetime(2017-01-01);
let _end = datetime(2017-01-31);
range _day from _start to _end step 1d
| extend d = tolong((_day - _start)/1d)
| extend r = rand()+1
| extend _users=range(tolong(d*50*r), tolong(d*50*r+100*r-1), 1)
| mv-expand id=_users to typeof(long) limit 1000000
// Calculate DAU/WAU ratio
| evaluate activity_engagement(['id'], _day, _start, _end, 1d, 7d)
| project _day, Dau_Wau=activity_ratio*100
| render timechart

İpucu

Bau/MAU hesaplanırken, son verileri ve hareketli pencere dönemini (OuterActivityWindow) değiştirin.

activity_metrics eklentisi

activity_metrics eklentisi: geçerli dönem penceresine ve önceki dönem penceresine göre yararlı etkinlik ölçümlerini (farklı sayım değerleri, farklı yeni değer sayısı, bekletme oranı ve karmaşıklık oranı) hesaplar.

Aşağıdaki sorgu, belirli bir veri kümesi için karmaşıklığı ve bekletme oranını hesaplar.

[Sorguyu çalıştırmak için tıklayın]

// Generate random data of user activities
let _start = datetime(2017-01-02);
let _end = datetime(2017-05-31);
range _day from _start to _end step 1d
| extend d = tolong((_day - _start)/1d)
| extend r = rand()+1
| extend _users=range(tolong(d*50*r), tolong(d*50*r+200*r-1), 1)
| mv-expand id=_users to typeof(long) limit 1000000
| where _day > datetime(2017-01-02)
| project _day, id
// Calculate weekly retention rate
| evaluate activity_metrics(['id'], _day, _start, _end, 7d)
| project _day, retention_rate*100, churn_rate*100
| render timechart

new_activity_metrics eklentisi

new_activity_metrics eklentisi: yeni kullanıcıların kohortu için kullanışlı etkinlik ölçümlerini (ayrı sayı değerleri, farklı yeni değer sayısı, bekletme hızı ve karmaşıklık oranı) hesaplar. Bu eklentinin kavramı activity_metrics eklentisinebenzerdir, ancak yeni kullanıcılara odaklanır.

Aşağıdaki sorgu, yeni kullanıcılar kohortu (ilk hafta gelen kullanıcılar) için haftalık bir hafta penceresinde bir bekletme ve değişim oranı hesaplar.

[Sorguyu çalıştırmak için tıklayın]

// Generate random data of user activities
let _start = datetime(2017-05-01);
let _end = datetime(2017-05-31);
range Day from _start to _end step 1d
| extend d = tolong((Day - _start)/1d)
| extend r = rand()+1
| extend _users=range(tolong(d*50*r), tolong(d*50*r+200*r-1), 1)
| mv-expand id=_users to typeof(long) limit 1000000
// Take only the first week cohort (last parameter)
| evaluate new_activity_metrics(['id'], Day, _start, _end, 7d, _start)
| project from_Day, to_Day, retention_rate, churn_rate

session_count eklentisi

session_count eklentisi: bir zaman ÇIZELGESI üzerinden kimlik sütununa göre oturum sayısını hesaplar.

Aşağıdaki sorgu, oturum sayısını döndürür. Kullanıcı KIMLIĞI, 100-saat yuvalarında en az bir kez görünürse, oturum geri arama penceresi 41-Time yuvadayken oturum etkin kabul edilir.

[Sorguyu çalıştırmak için tıklayın]

let _data = range Timeline from 1 to 9999 step 1
| extend __key = 1
| join kind=inner (range Id from 1 to 50 step 1 | extend __key=1) on __key
| where Timeline % Id == 0
| project Timeline, Id;
// End of data definition
_data
| evaluate session_count(Id, Timeline, 1, 10000, 100, 41)
| render linechart

funnel_sequence eklentisi

funnel_sequence eklentisi: bir durum sırası almış olan kullanıcıların ayrı sayısını hesaplar; önceki ve sonraki durumların, sıranın sonunda veya ardından gelen dağılımını gösterir.

Aşağıdaki sorguda, 2007 ' deki tüm Tornado olayları ne kadar önce ve sonrasında gerçekleşen olay gösterilmektedir.

[Sorguyu çalıştırmak için tıklayın]

// Looking on StormEvents statistics:
// Q1: What happens before Tornado event?
// Q2: What happens after Tornado event?
StormEvents
| evaluate funnel_sequence(EpisodeId, StartTime, datetime(2007-01-01), datetime(2008-01-01), 1d,365d, EventType, dynamic(['Tornado']))

funnel_sequence_completion eklentisi

funnel_sequence_completion eklentisi: farklı zaman aralıklarında tamamlanan dizi adımlarının huni sayısını hesaplar.

Aşağıdaki sorgu, sıranın tamamlanma pirayini denetler: Hail -> Tornado -> Thunderstorm -> Wind bir saatin, dört saatin ve bir günün () "genel" saatlerinde [1h, 4h, 1d] .

[Sorguyu çalıştırmak için tıklayın]

let _start = datetime(2007-01-01);
let _end = datetime(2008-01-01);
let _windowSize = 365d;
let _sequence = dynamic(['Hail', 'Tornado', 'Thunderstorm', 'Wind']);
let _periods = dynamic([1h, 4h, 1d]);
StormEvents
| evaluate funnel_sequence_completion(EpisodeId, StartTime, _start, _end, _windowSize, EventType, _sequence, _periods)

İşlevler

Bu bölüm, sunucuda depolanan yeniden kullanılabilir sorgular olan işlevleriiçerir. İşlevler, sorgular ve diğer işlevler tarafından çağrılabilir (Özyinelemeli işlevler desteklenmez).

Not

Yardım kümesinde, salt okunurdur olan işlevler oluşturamazsınız. Bu bölüm için kendi test kümenizi kullanın.

Aşağıdaki örnek, bir durum adı ( MyState ) bağımsız değişken olarak alan bir işlev oluşturur.

.create function with (folder="Demo")
MyFunction (MyState: string)
{
StormEvents
| where State =~ MyState
}

Aşağıdaki örnek, Texas durumu için veri alan bir işlevi çağırır.

MyFunction ("Texas")
| summarize count()

Aşağıdaki örnek, ilk adımda oluşturulan işlevi siler.

.drop function MyFunction

Sonraki adımlar

Kusto sorgu dili başvurusu