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ğerlerledynamic
eşleyen özellik paketi. Özellik paketi, benzersizstring
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: , , , , ,
long
real
, ,string
vetimespan
.int
guid
datetime
bool
- 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ğinlong
, ,real
,datetime
,timespan
veguid
). Bu nedenle, değerleri bir JSON gösterimine seri hale getirmededynamic
, JSON'un gösteremiyorsa değerler seri hale getirilirstring
. 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
,long
veguid
türleri içindatetime
geç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ğerin Dizi |
== değeri olan bir dizi öğesi varsa True where City in ('London', 'Paris', 'Rome') |
Değer!in Dizi |
== 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
, , bool
ve 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ı dizisiparse_json('{"name":"Alan", "age":21, "address":{"street":432,"postcode":"JLK32P"}}')
- sözlükparse_json('21')
- sayı içeren dinamik türün tek bir değeriparse_json('"21"')
- dize içeren dinamik türün tek bir değeriparse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')
- yukarıdaki örnekte olduğu gibio
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!"} |
İlgili içerik
- Dinamik nesneleri ve nesne erişimcilerini kullanarak sorgulama örneği için bkz. Değerleri bir kümeden diğerine eşleme.
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