Dinamik veri türü

Skaler dynamic veri türü aşağıdaki değerlerden herhangi biri olabilir:

  • Sıfır tabanlı dizinleme ile sıfır veya daha fazla değer tutan bir değer dizisi dynamic .
  • Benzersiz string değerleri değerlerle dynamic eşleyen özellik paketi. Özellik paketi, benzersiz string değerler tarafından dizinlenmiş sıfır veya daha fazla eşlemeye ("yuvalar" denir) sahiptir. Yuvalar sıralanmamış.
  • İlkel skaler veri türlerinden herhangi birinin değeri: , , , , , longreal, , stringve timespan. intguiddatetimebool
  • Null. Daha fazla bilgi için bkz. Null değerler.

Not

  • Tür dynamic değerleri, sıkıştırılmamış 1 MB (2^20) ile sınırlıdır. Kayıttaki bir hücre değeri 1 MB'ı aşarsa, değer bırakılır ve alım başarılı olur. Kodlama ilkesini değiştirerek sütunun sayısını artırabilirsinizMaxValueSize.
  • Tür JSON benzeri görünse dynamic de JSON modelinin temsil etmediği değerleri tutabilir çünkü JSON'da mevcut değildir (örneğin long, , real, datetime, timespanve guid). Bu nedenle, değerleri bir JSON gösterimine seri hale getirmede dynamic , JSON'un gösteremiyorsa değerler seri hale getirilir string . Buna karşılık Kusto, dizeleri bu şekilde ayrıştırılabilirse kesin olarak türlenmiş değerler olarak ayrıştıracaktır. Bu, , real, longve guid türleri için datetimegeçerlidir. JSON nesne modeli hakkında daha fazla bilgi için bkz. json.org.
  • Kusto, bir özellik paketinde addan değere eşlemelerin sırasını korumaya çalışmaz ve bu nedenle korunacak sırayı varsayamazsınız. Aynı eşleme kümesine sahip iki özellik çantasının, örneğin değer olarak string temsil edildiğinde farklı sonuçlar vermesi tamamen mümkündür.

Dinamik değişmez değerler

Değişmez dynamic değer belirtmek için aşağıdaki söz dizimi seçeneklerinden birini kullanın:

Syntax Açıklama Örnek
dynamic([value [, ...]]) Dinamik veya diğer skaler değişmez değerlerden oluşan bir dizi. dynamic([1, 2, "hello"])
dynamic({Anahtar=value [, ...]}) Özellik paketi veya nesne. Bir anahtarın değeri iç içe bir özellik paketi olabilir. dynamic({"a":1, "b":{"a":2}})
dynamic(Değer) İç skaler veri türünün değerini tutan dinamik bir değer. dynamic(4)
dynamic(null) Null değeri temsil eder.

Söz dizimi kuralları hakkında daha fazla bilgi edinin.

Dinamik nesne erişimcileri

Bir sözlüğü alt simgeye almak için noktalı gösterimi (dict.key) veya köşeli ayraç gösterimini (dict["key"]) kullanın. Alt simge bir dize sabiti olduğunda, her iki seçenek de eşdeğerdir.

Not

Bir ifadeyi alt simge olarak kullanmak için köşeli ayraç gösterimini kullanın. Aritmetik ifadeler kullanılırken köşeli ayraçların içindeki ifade parantez içinde sarmalanmalıdır.

Aşağıdaki dict örneklerde ve arr dinamik türdeki sütunlar verilmiştir:

Expression Erişimci ifade türü Anlamı Yorumlar
dict[col] Varlık adı (sütun) Sütunun değerlerini col anahtar olarak kullanarak bir sözlüğü alt simgeye alır Sütun dize türünde olmalıdır
arr[index] Varlık dizini (sütun) Dizin olarak sütunun değerlerini kullanarak bir diziyi index alt simgeye dönüştürür Sütun tamsayı veya boole türünde olmalıdır
arr[-index] Varlık dizini (sütun) Dizinin sonundan 'index'-th değerini alır Sütun tamsayı veya boole türünde olmalıdır
arr[(-1)] Varlık dizini Dizideki son değeri alır
arr[toint(indexAsString)] İşlev çağrısı Sütun indexAsString değerlerini int'e dönüştürür ve bunları kullanarak bir diziyi alt simgeletir
dict[['where']] Varlık adı (sütun) olarak kullanılan anahtar sözcük Bir sözlüğü anahtar olarak sütun where değerlerini kullanarak alt simge oluşturur Bazı sorgu dili anahtar sözcükleriyle aynı varlık adları tırnak içine alınmalıdır
dict.['where'] veya dict['where'] Sabit Anahtar olarak dize kullanarak where bir sözlüğü alt simgeler

İpucu

Mümkün olduğunda sabit alt simgeler kullanmanızı öneririz.

Bir değerin alt nesnesine dynamic erişmek, alt nesnenin farklı bir temel türü olsa bile başka dynamic bir değer verir. Değerin gettype gerçek temel türünü bulmak için işlevini ve aşağıda listelenen atama işlevlerinden herhangi birini kullanarak gerçek türe dönüştürebilirsiniz.

Dinamik nesneleri atama

Dinamik bir nesneyi alt simgeledikten sonra, değeri basit bir türe atamanız gerekir.

Expression Değer Tür
X parse_json('[100.101.102]') array
X[0] parse_json('100') dynamic
toint(X[1]) 101 int
Y parse_json('{"a1":100, "a b c":"2015-01-01"}') Sözlük
Y.a1 parse_json('100') dynamic
Y["a b c"] parse_json("2015-01-01") dynamic
todate(Y["a b c"]) datetime(2015-01-01) datetime

Atama işlevleri şunlardır:

  • tolong()
  • todouble()
  • todatetime()
  • totimespan()
  • tostring()
  • toguid()
  • parse_json()

Dinamik nesneler oluşturma

Çeşitli işlevler yeni dynamic nesneler oluşturmanıza olanak tanır:

  • bag_pack() ad/değer çiftlerinden bir özellik paketi oluşturur.
  • pack_array() ad/değer çiftlerinden bir dizi oluşturur.
  • range() aritmetik bir sayı serisine sahip bir dizi oluşturur.
  • zip() iki diziden "paralel" değerleri tek bir dizide eşleştirir.
  • repeat() yinelenen değere sahip bir dizi oluşturur.

Ayrıca, toplanan değerleri tutmak için diziler oluşturan dynamic birkaç toplama işlevi vardır:

  • buildschema() birden çok dynamic değerin toplam şemasını döndürür.
  • make_bag() grup içindeki dinamik değerlerin bir özellik torbasını döndürür.
  • make_bag_if() , grup içindeki dinamik değerlerin bir özellik torbasını döndürür (bir koşulla).
  • make_list() tüm değerleri sıralı olarak tutan bir dizi döndürür.
  • make_list_if() tüm değerleri sıralı olarak (bir koşulla) tutan bir dizi döndürür.
  • make_list_with_nulls() , null değerler de dahil olmak üzere tüm değerleri sıralı olarak tutan bir dizi döndürür.
  • make_set() tüm benzersiz değerleri tutan bir dizi döndürür.
  • make_set_if() tüm benzersiz değerleri (bir koşulla) tutan bir dizi döndürür.

Dinamik türler üzerinde işleçler ve işlevler

Skaler dinamik/dizi işlevlerinin tam listesi için bkz. dinamik/dizi işlevleri.

İşleç veya işlev Dinamik veri türleriyle kullanım
DeğerinDizi == değeri olan bir dizi öğesi varsa True
where City in ('London', 'Paris', 'Rome')
Değer!inDizi == değeri olan bir dizi öğesi yoksa True
array_length(Dizi) Dizi değilse null
bag_has_key(çanta,anahtarı) Dinamik torba sütunlarının belirli bir anahtar içerip içermediğini denetler.
bag_keys(Çanta) Dinamik özellik paketi nesnesindeki tüm kök anahtarları numaralandırır.
bag_merge(bag1,...,bagN) Dinamik özellik torbalarını, tüm özellikleri birleştirilmiş dinamik bir özellik paketinde birleştirir.
bag_set_key(çanta,anahtar,değer) Verilen anahtarı dinamik özellik paketindeki belirli bir değere ayarlar.
extract_json(yol,nesne), extract_json(yol,nesne) Nesneye gitmek için yolu kullanın.
parse_json(Kaynak) JSON dizesini dinamik bir nesneye dönüştürür.
range(from,to,step) Bir değer dizisi.
mv-expand listColumn Belirtilen hücredeki bir listedeki her değer için bir satır çoğaltır.
summarize buildschema(Sütun) Tür şemasını sütun içeriğinden çıkarsar.
summarize make_bag(Sütun) Sütundaki özellik paketi (sözlük) değerlerini anahtar yinelemesi olmadan tek bir özellik paketinde birleştirir.
summarize make_bag_if(sütun,koşul) Sütundaki özellik paketi (sözlük) değerlerini anahtar yinelemesi olmadan (koşul ile) tek bir özellik paketinde birleştirir.
summarize make_list(Sütun) Satır gruplarını düzleştirme ve sütunun değerlerini bir diziye koyma.
summarize make_list_if(sütun,koşul) Satır gruplarını düzleştirir ve sütunun değerlerini bir diziye yerleştirir (koşul ile).
summarize make_list_with_nulls(Sütun) Satır gruplarını düz hale getirir ve null değerler de dahil olmak üzere sütunun değerlerini bir diziye yerleştirir.
summarize make_set(Sütun) Satır gruplarını düz hale getirir ve sütunun değerlerini yineleme olmadan bir diziye yerleştirir.

Dinamik veriler için dizin oluşturma

Veri alımı sırasında her alan dizine eklenir. Dizinin kapsamı tek bir veri parçasıdır.

Dinamik sütunları dizine almak için, alma işlemi dinamik değer içindeki tüm "atomik" öğeleri (özellik adları, değerler, dizi öğeleri) numaralandırır ve bunları dizin oluşturucusunun içine iletir. Aksi takdirde, dinamik alanlar dize alanlarıyla aynı ters terim dizinine sahiptir.

Örnekler

Dinamik özellik paketi

Aşağıdaki sorgu dinamik bir özellik paketi oluşturur.

print o=dynamic({"a":123, "b":"hello", "c":[1,2,3], "d":{}})
| extend a=o.a, b=o.b, c=o.c, d=o.d

Kolaylık olması için, dynamic sorgu metninin kendisinde görünen değişmez değerler, türleri olan diğer Kusto değişmez değerlerini de içerebilir: datetime, timespan, real, long, guid, , boolve dynamic. JSON üzerinden bu uzantı dizeleri ayrıştırırken (işlevi kullanırken parse_json veya verileri alırken gibi) kullanılamaz, ancak aşağıdakileri yapmanıza olanak tanır:

print d=dynamic({"a": datetime(1970-05-11)})

JSON kodlama kurallarını izleyen bir string değeri bir dynamic değere ayrıştırmak için işlevini kullanın parse_json . Örnek:

  • parse_json('[43, 21, 65]') - sayı dizisi
  • parse_json('{"name":"Alan", "age":21, "address":{"street":432,"postcode":"JLK32P"}}') - sözlük
  • parse_json('21') - sayı içeren dinamik türün tek bir değeri
  • parse_json('"21"') - dize içeren dinamik türün tek bir değeri
  • parse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}') - yukarıdaki örnekte olduğu gibi o aynı değeri verir.

Not

JavaScript'in aksine JSON, dizeler ve özellik paketi özellik adlarının çevresinde çift tırnak (") karakterlerin kullanılmasını gerektirir. Bu nedenle, tek tırnak işareti (') karakteri kullanarak JSON kodlu dize değişmez değerini tırnak içine almak genellikle daha kolaydır.

Dinamik sütunlara veri alma

Aşağıdaki örnek, bir sütunu (sütunun yanı datetime sıra) tutan bir dynamic tabloyu nasıl tanımlayabileceğinizi ve ardından tek bir kaydı bu tabloya nasıl alabileceğinizi gösterir. Ayrıca CSV dosyalarında JSON dizelerini nasıl kodlayabileceğinizi de gösterir.

// dynamic is just like any other type:
.create table Logs (Timestamp:datetime, Trace:dynamic)

// Everything between the "[" and "]" is parsed as a CSV line would be:
// 1. Since the JSON string includes double-quotes and commas (two characters
//    that have a special meaning in CSV), we must CSV-quote the entire second field.
// 2. CSV-quoting means adding double-quotes (") at the immediate beginning and end
//    of the field (no spaces allowed before the first double-quote or after the second
//    double-quote!)
// 3. CSV-quoting also means doubling-up every instance of a double-quotes within
//    the contents.

.ingest inline into table Logs
  [2015-01-01,"{""EventType"":""Demo"", ""EventValue"":""Double-quote love!""}"]

Çıkış

Zaman damgası İzleme
2015-01-01 00:00:00.0000000 {"EventType":"Demo","EventValue":"Çift tırnaklı aşk!"}