Den dynamiska datatypen
Den dynamic
skalära datatypen kan vara något av följande värden:
- En matris med
dynamic
värden med noll eller fler värden med nollbaserad indexering. - En egenskapsuppsättning som mappar unika
string
värden tilldynamic
värden. Egenskapsuppsättningen har noll eller fler sådana mappningar (kallas "platser"), indexerade med de unikastring
värdena. Platserna är osorterade. - Ett värde för någon av de primitiva skalära datatyperna:
bool
,datetime
,guid
,int
,long
,real
,string
ochtimespan
. - Null. Mer information finns i Null-värden.
Anteckning
- Värden av typen
dynamic
är begränsade till 1 MB (2^20), okomprimerade. Om ett cellvärde i en post överskrider 1 MB tas värdet bort och inmatningen lyckas. Du kan ökaMaxValueSize
kolumnen genom att ändra dess kodningsprincip. dynamic
Även om typen verkar JSON-liknande kan den innehålla värden som JSON-modellen inte representerar eftersom de inte finns i JSON (t.ex.long
,real
,datetime
,timespan
ochguid
). Vid serialisering avdynamic
värden i en JSON-representation serialiseras därför värden som JSON inte kan representera istring
värden. Omvänt parsar Kusto strängar som starkt skrivna värden om de kan parsas som sådana. Detta gäller fördatetime
typerna ,real
,long
ochguid
. Mer information om JSON-objektmodellen finns i json.org.- Kusto försöker inte bevara ordningen på namn-till-värde-mappningar i en egenskapsuppsättning, och därför kan du inte anta att ordningen ska bevaras. Det är fullt möjligt för två egenskapspåsar med samma uppsättning mappningar att ge olika resultat när de representeras som
string
värden, till exempel.
Dynamiska literaler
Om du vill ange en dynamic
literal använder du något av följande syntaxalternativ:
Syntax | Beskrivning | Exempel |
---|---|---|
dynamic([ värde [, ...]]) |
En matris med dynamiska eller andra skalära literaler. | dynamic([1, 2, "hello"]) |
dynamic({ Nyckel= värde [, ...]}) |
En egenskapsuppsättning eller ett objekt. Värdet för en nyckel kan vara en kapslad egenskapsuppsättning. | dynamic({"a":1, "b":{"a":2}}) |
dynamic( Värde) |
Ett dynamiskt värde som innehåller värdet för den inre skalärdatatypen. | dynamic(4) |
dynamic(null) |
Representerar null-värdet. |
Läs mer om syntaxkonventioner.
Dynamiska objektåtkomster
Om du vill nedsänkta en ordlista använder du antingen punktnotationen (dict.key
) eller hakparentesnotationen (dict["key"]
). När nedsänkt text är en strängkonstant är båda alternativen likvärdiga.
Anteckning
Om du vill använda ett uttryck som nedsänkt text använder du hakparentesnotationen. När du använder aritmetiska uttryck måste uttrycket inom hakparenteserna omslutas av parenteser.
I exemplen nedan dict
och arr
är kolumner av dynamisk typ:
Uttryck | Uttryckstyp för accessor | Innebörd | Kommentarer |
---|---|---|---|
dict[col] | Entitetsnamn (kolumn) | Prenumererar på en ordlista med värdena i kolumnen col som nyckel |
Kolumnen måste vara av typen sträng |
arr[index] | Entitetsindex (kolumn) | Nedsänkt en matris med värdena i kolumnen index som index |
Kolumnen måste vara av typen heltal eller booleskt värde |
arr[-index] | Entitetsindex (kolumn) | Hämtar indexvärdet från slutet av matrisen | Kolumnen måste vara av typen heltal eller booleskt värde |
arr[(-1)] | Entitetsindex | Hämtar det sista värdet i matrisen | |
arr[toint(indexAsString)] | Funktionsanrop | Omvandlar värdena för kolumnen indexAsString till int och använder dem för att nedsänkta en matris |
|
dict[['where']] | Nyckelord som används som entitetsnamn (kolumn) | Prenumererar på en ordlista med värdena för kolumnen where som nyckel |
Entitetsnamn som är identiska med vissa nyckelord i frågespråket måste anges |
dict.['where'] eller dict['where'] | Konstant | Ger en ordlista en ordlista med strängen where som nyckel |
Tips
Vi rekommenderar att du använder konstanta nedsänkta dokument när det är möjligt.
Åtkomst till ett underobjekt av ett dynamic
värde ger ett annat dynamic
värde, även om underobjektet har en annan underliggande typ. gettype
Använd funktionen för att identifiera den faktiska underliggande typen av värde och någon av de cast-funktioner som anges nedan för att omvandla den till den faktiska typen.
Gjutning av dynamiska objekt
När du har nedsänkt ett dynamiskt objekt måste du omvandla värdet till en enkel typ.
Uttryck | Värde | Typ |
---|---|---|
X | parse_json('[100,101,102]') | matris |
X[0] | parse_json('100') | dynamic |
toint(X[1]) | 101 | int |
Y | parse_json('{"a1":100, "a b":"2015-01-01"}') | Ordbok |
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 |
Cast-funktioner är:
tolong()
todouble()
todatetime()
totimespan()
tostring()
toguid()
parse_json()
Skapa dynamiska objekt
Med flera funktioner kan du skapa nya dynamic
objekt:
- bag_pack() skapar en egenskapsuppsättning från namn/värde-par.
- pack_array() skapar en matris från namn/värde-par.
- range() skapar en matris med en aritmetikserie med tal.
- zip() parar "parallella" värden från två matriser till en enda matris.
- repeat() skapar en matris med ett upprepat värde.
Dessutom finns det flera mängdfunktioner som skapar dynamic
matriser för att lagra aggregerade värden:
- buildschema() returnerar mängdschemat för flera
dynamic
värden. - make_bag() returnerar en egenskapsuppsättning med dynamiska värden i gruppen.
- make_bag_if() returnerar en egenskapsuppsättning med dynamiska värden i gruppen (med ett predikat).
- make_list() returnerar en matris som innehåller alla värden i följd.
- make_list_if() returnerar en matris som innehåller alla värden, i följd (med ett predikat).
- make_list_with_nulls() returnerar en matris som innehåller alla värden, i följd, inklusive null-värden.
- make_set() returnerar en matris som innehåller alla unika värden.
- make_set_if() returnerar en matris som innehåller alla unika värden (med ett predikat).
Operatorer och funktioner över dynamiska typer
En fullständig lista över skalära dynamiska/matrisfunktioner finns i funktioner för dynamisk/matris.
Operator eller funktion | Användning med dynamiska datatyper |
---|---|
Värdein Array |
Sant om det finns ett element i matrisen som == värde where City in ('London', 'Paris', 'Rome') |
Värde!in Array |
Sant om det inte finns något element i matrisen som == värde |
array_length( Array) |
Null om det inte är en matris |
bag_has_key( väska, nyckel) |
Kontrollerar om en dynamisk påse-kolumn innehåller en viss nyckel. |
bag_keys( Väska) |
Räknar upp alla rotnycklar i ett dynamiskt egenskapsuppsättningsobjekt. |
bag_merge( bag1,...,bagN) |
Sammanfogar dynamiska egenskapspåsar i en dynamisk egenskapsuppsättning med alla sammanslagna egenskaper. |
bag_set_key( bag,key,value) |
Anger en given nyckel till ett angivet värde i en dynamisk egenskapsuppsättning. |
extract_json (path,object), extract_json( path,object) |
Använd sökvägen för att navigera till objektet. |
parse_json( Källkod) |
Omvandlar en JSON-sträng till ett dynamiskt objekt. |
range( från,till,steg) |
En matris med värden. |
mv-expand listColumn |
Replikerar en rad för varje värde i en lista i en angiven cell. |
summarize buildschema( Kolumn) |
Härleder typschemat från kolumninnehållet. |
summarize make_bag( Kolumn) |
Sammanfogar egenskapsuppsättningsvärdena (ordlistan) i kolumnen till en egenskapsuppsättning, utan nyckelduplicering. |
summarize make_bag_if( column,predicate) |
Sammanfogar egenskapsuppsättningsvärdena (ordlistan) i kolumnen till en egenskapsuppsättning, utan nyckelduplicering (med predikat). |
summarize make_list( Kolumn) |
Plattar ut grupper av rader och placerar värdena för kolumnen i en matris. |
summarize make_list_if( column,predicate) |
Plattar ut grupper av rader och placerar värdena för kolumnen i en matris (med predikat). |
summarize make_list_with_nulls( Kolumn) |
Plattar ut grupper av rader och placerar värdena för kolumnen i en matris, inklusive null-värden. |
summarize make_set( Kolumn) |
Plattar ut grupper av rader och placerar värdena för kolumnen i en matris, utan duplicering. |
Indexering för dynamiska data
Varje fält indexeras under datainmatningen. Indexets omfång är en enda datashard.
För att indexera dynamiska kolumner räknar inmatningsprocessen upp alla "atomiska" element i det dynamiska värdet (egenskapsnamn, värden, matriselement) och vidarebefordrar dem till indexverktyget. Annars har dynamiska fält samma inverterade termindex som strängfält.
Exempel
Dynamisk egenskapsuppsättning
Följande fråga skapar en dynamisk egenskapsuppsättning.
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
För enkelhetens skull dynamic
kan literaler som visas i själva frågetexten även innehålla andra Kusto-literaler med typer: datetime
, timespan
, real
, long
, guid
, bool
och dynamic
.
Det här tillägget över JSON är inte tillgängligt när du parsar strängar (till exempel när du använder parse_json
funktionen eller när du matar in data), men det gör att du kan göra följande:
print d=dynamic({"a": datetime(1970-05-11)})
Om du vill parsa ett string
värde som följer JSON-kodningsreglerna till ett dynamic
värde använder du parse_json
funktionen . Exempel:
parse_json('[43, 21, 65]')
– en matris med talparse_json('{"name":"Alan", "age":21, "address":{"street":432,"postcode":"JLK32P"}}')
- en ordlistaparse_json('21')
– ett enda värde av dynamisk typ som innehåller ett talparse_json('"21"')
– ett enda värde av dynamisk typ som innehåller en strängparse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')
- ger samma värde somo
i exemplet ovan.
Anteckning
Till skillnad från JavaScript kräver JSON att du använder dubbla citattecken ("
) runt strängar och egenskapsnamn för egenskapsuppsättningar. Därför är det vanligtvis enklare att citera en JSON-kodad strängliteral med hjälp av ett enkelt citattecken ('
).
Mata in data i dynamiska kolumner
I följande exempel visas hur du kan definiera en tabell som innehåller en dynamic
kolumn (samt en datetime
kolumn) och sedan mata in en post i den. Det visar också hur du kan koda JSON-strängar i CSV-filer.
// 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!""}"]
Resultat
Timestamp | Spårning |
---|---|
2015-01-01 00:00:00.0000000 | {"EventType":"Demo","EventValue":"Dubbelcitat kärlek!"} |
Relaterat innehåll
- Ett exempel på hur du frågar med dynamiska objekt och objektåtkomster finns i Mappa värden från en uppsättning till en annan.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för