Aracılığıyla paylaş


Dinamik veri türü

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

  • Sıfır tabanlı dizin oluşturma ile sıfır veya daha fazla değer tutan bir değer dizisi dynamic .
  • Benzersiz string değerleri değerlere dynamic eşleyen özellik paketi. Özellik paketi, benzersiz string değerler tarafından dizine alınan sıfır veya daha fazla eşlemeye ("yuvalar" denir) sahiptir. Yuvalar sıralanmamış.
  • İlkel skaler veri türlerinden herhangi birinin değeri: , , , , , , real, stringve timespan. longintguiddatetimebool
  • Sıfır. 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. Bir kayıttaki 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österemdiği değerler değerler halinde string serileştirilir. Buna karşılık Kusto, dizeleri bu şekilde ayrıştırılabiliyorsa 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 torbasının, örneğin değer olarak string temsil edildiğinde farklı sonuçlar elde etmesi tamamen mümkündür.

Dinamik değişmez değerler

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

Sözdizimi Açıklama Örnek
dynamic([değer [, ...]]) Dinamik veya diğer skaler değişmez değerlerden oluşan bir dizi. dynamic([1, 2, "hello"])
dynamic({anahtar = değeri [, ...]}) Özellik paketi veya nesne. Bir anahtarın değeri iç içe bir özellik paketi olabilir. dynamic({"a":1, "b":{"a":2}})
dynamic(value) İç 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 simge olarak kullanmak 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ı Açıklamalar
dict[col] Varlık adı (sütun) Sütunun col değerlerini anahtar olarak kullanarak bir sözlüğü alt simgeletir Sütun dize türünde olmalıdır
arr[index] Varlık dizini (sütun) Sütunun değerlerini dizin olarak kullanarak bir diziyi index alt indisler 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 simgeler
dict[['where']] Varlık adı (sütun) olarak kullanılan anahtar sözcük Anahtar olarak sütun where değerlerini kullanarak bir sözlüğü alt simgeletir 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 Dizeyi anahtar olarak kullanarak where sözlüğü alt simge olarak ekler

İpucu

Mümkün olduğunda sabit alt indisler 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 cast 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 dönüştürmeniz gerekir.

Expression Değer Tür
X parse_json('[100.101.102]') dizi
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() değer listesinden bir dizi oluşturur (sütun listesi olabilir; her satır için belirtilen sütunlardan 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ğerlerden oluşan bir özellik paketi döndürür.
  • make_bag_if(), grup içinde dinamik değerlerden oluşan bir özellik paketi 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 (koşul ile) 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 içeren 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ğer in dizisi == değerine sahip bir dizi öğesi varsa True
where City in ('London', 'Paris', 'Rome')
değer !in dizisi == değerine sahip bir dizi öğesi yoksa True
array_length(dizi) Bir 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 özellikler birleştirilmiş dinamik ö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(source) JSON dizesini dinamik bir nesneye dönüştürür.
range(from,to,step) Bir değer dizisi.
mv-expand listColumn Belirtilen hücredeki 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 yerleştirir.
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 sütun değerlerini null değerler de dahil olmak üzere 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 numaralandırır (özellik adları, değerler, dizi öğeleri) 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 bir dinamik ö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, , , timespan, real, long, guid, boolve dynamictürlerine datetimesahip diğer Kusto değişmez değerlerini de içerebilir. Dizeleri ayrıştırırken (işlevi kullanırken parse_json veya veri alırken gibi) JSON üzerinden bu uzantı kullanılamaz, ancak aşağıdakileri yapmanızı sağlar:

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 . Örneğin:

  • parse_json('[43, 21, 65]') - bir 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 örnektekiyle aynı değeri o 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 (') karakteri kullanarak JSON ile kodlanmış bir 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ğiniz de gösterilmektedir.

// 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!""}"]

Çıktı

Zaman damgası İzleme
2015-01-01 00:00:00.0000000 {"EventType":"Demo","EventValue":"Çift tırnak sevgisi!"}