Den dynamiska datatypen
Gäller för: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
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 egenskapsväska som mappar unika
string
värden tilldynamic
värden. Egenskapsväskan har noll eller fler sådana mappningar (kallas "fack"), indexerade efter de unikastring
värdena. Facken är osorterade. - Ett värde för någon av de primitiva skalära datatyperna:
bool
,datetime
,guid
,int
,long
,real
,string
ochtimespan
. - Noll. Mer information finns i Null-värden.
Not
- Även om den
dynamic
typen visas som JSON kan den innehålla värden som JSON-modellen inte representerar eftersom de inte finns i JSON (t.ex.long
,real
,datetime
,timespan
ochguid
). Närdynamic
värden serialiseras till en JSON-representation serialiseras därför värden som JSON inte kan representera tillstring
värden. Omvänt parsar Kusto strängar som starkt skrivna värden om de kan parsas som sådana. Detta gäller för typernadatetime
,real
,long
ochguid
. Mer information om JSON-objektmodellen finns i json.org. - Kusto försöker inte bevara ordningen för namn-till-värde-mappningar i en egenskapspåse, så du kan 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. - Vid inmatning av data begränsas värdena för
dynamic
datatyper som standard till 1 MiB (2^20), okomprimerad. Du kan ökaMaxValueSize
i kolumnen genom att ändra dess kodningsprincip för att tillåta värden upp till 32 MiB.
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({
nyckelvärde= [, ...]}) |
En egenskapsväska eller ett objekt. Värdet för en nyckel kan vara en kapslad egenskapsväska. | dynamic({"a":1, "b":{"a":2}}) |
dynamic(
värde) |
Ett dynamiskt värde som innehåller värdet för den inre skalära datatypen. | dynamic(4) |
dynamic(null) |
Representerar värdet null. |
Läs mer om syntaxkonventioner.
Dynamiska objektåtkomstorer
Om du vill skriva en ordlista använder du antingen punkt notationen (dict.key
) eller hakparenteser notation (dict["key"]
). När det nedsänkta objektet är en strängkonstant är båda alternativen likvärdiga.
Not
Om du vill använda ett uttryck som nedsänkt text använder du hakparenteser notationen. När du använder aritmetiska uttryck måste uttrycket inom hakparenteserna omslutas av parenteser.
I exemplen nedan dict
och arr
kolumner av dynamisk typ:
Uttryck | Typ av accessoruttryck | Betydelse | Kommentarer |
---|---|---|---|
dict[col] | Entitetsnamn (kolumn) | Nedsänkt en ordlista med hjälp av värdena i kolumnen col som nyckel |
Kolumnen måste vara av typen sträng |
arr[index] | Entitetsindex (kolumn) | Nedsänkt en matris med hjälp av 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 kolumn indexAsString till int och använder dem för att skriva in en matris |
|
diktering[['where']] | Nyckelord som används som entitetsnamn (kolumn) | Nedsänkt en ordlista med värdena för kolumnen where som nyckel |
Entitetsnamn som är identiska med vissa nyckelord för frågespråk måste anges |
dict.['where'] eller dict['where'] | Konstant | Nedsänkt en ordlista med where sträng som nyckel |
Dricks
Vi rekommenderar att du använder konstanta nedsänkta dokument när det är möjligt.
Åtkomst till ett underobjekt i ett dynamic
värde ger ett annat dynamic
värde, även om underobjektet har en annan underliggande typ. Använd funktionen gettype
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 det 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]') | samling |
X[0] | parse_json('100') | dynamic |
toint(X[1]) | 101 | int |
Y | parse_json({"a1":100, "a b c":"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 egenskapsväska från namn/värde-par.
- pack_array() skapar en matris från en lista med värden (kan vara en lista över kolumner, för varje rad skapas en matris från de angivna kolumnerna).
- range() skapar en matris med en aritmetikserie med tal.
- zip() parar ihop "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 aggregeringsschemat 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 med 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 funktioner/matrisfunktioner finns i dynamiska funktioner/matrisfunktioner.
Operator eller funktion | Användning med dynamiska datatyper |
---|---|
värdein matris |
Sant om det finns ett element i matris som == värde where City in ('London', 'Paris', 'Rome') |
värde!in matris |
Sant om det inte finns något element i matris det == värdet |
array_length( matris) |
Null om det inte är en matris |
bag_has_key( påse, nyckel) |
Kontrollerar om en dynamisk påskolumn innehåller en viss nyckel. |
bag_keys( väska) |
Räknar upp alla rotnycklar i ett dynamiskt egenskaps-bag-objekt. |
bag_merge( bag1,...,bagN) |
Sammanfogar dynamiska egenskapspåsar till en dynamisk egenskapsväska med alla egenskaper sammanfogade. |
bag_set_key( väska,nyckel,värde) |
Anger en given nyckel till ett angivet värde i en dynamisk egenskapsuppsättning. |
extract_json (sökväg, objekt), extract_json( sökväg, objekt) |
Använd sökvägen för att navigera till objektet. |
parse_json( källa) |
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 egenskapspåse, utan nyckelduplicering. |
summarize make_bag_if( kolumn, predikat) |
Sammanfogar egenskapsuppsättningsvärdena (ordlistan) i kolumnen till en egenskapspåse, utan nyckelduplicering (med predikat). |
summarize make_list( kolumn) |
Jämnar ut grupper med rader och placerar värdena för kolumnen i en matris. |
summarize make_list_if( kolumn, predikat) |
Jämnar ut grupper av rader och placerar värdena för kolumnen i en matris (med predikat). |
summarize make_list_with_nulls( kolumn) |
Jämnar ut grupper med rader och placerar värdena för kolumnen i en matris, inklusive null-värden. |
summarize make_set( kolumn) |
Jämnar 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 datainmatning. 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 egenskapsväska
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 kan dynamic
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 funktionen parse_json
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 i ett dynamic
-värde använder du funktionen parse_json
. Till exempel:
-
parse_json('[43, 21, 65]')
– en matris med tal -
parse_json('{"name":"Alan", "age":21, "address":{"street":432,"postcode":"JLK32P"}}')
– en ordlista -
parse_json('21')
– ett enda värde av dynamisk typ som innehåller ett tal -
parse_json('"21"')
– ett enda värde av dynamisk typ som innehåller en sträng -
parse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')
– ger samma värde somo
i exemplet ovan.
Not
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 enda 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. Den 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!""}"]
utdata
Tidsstämpel | Spåra |
---|---|
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.