Het dynamische gegevenstype
Van toepassing op: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel-
Het dynamic
scalaire gegevenstype kan een van de volgende waarden zijn:
- Een matrix van
dynamic
waarden die nul of meer waarden bevatten met indexering op basis van nul. - Een eigenschappentas waarmee unieke
string
waarden worden toegewezen aandynamic
waarden. De eigenschapsverzameling heeft nul of meer dergelijke toewijzingen (zogenaamde 'sleuven'), geïndexeerd door de uniekestring
waarden. De sleuven zijn ongeordeerd. - Een waarde van een van de primitieve scalaire gegevenstypen:
bool
,datetime
,guid
,int
,long
,real
,string
entimespan
. - Nul. Zie Null-waardenvoor meer informatie.
Notitie
- Hoewel het
dynamic
type JSON-achtig wordt weergegeven, kan het waarden bevatten die het JSON-model niet vertegenwoordigt omdat deze niet bestaan in JSON (bijvoorbeeldlong
,real
,datetime
,timespan
enguid
). Bij het serialiseren vandynamic
waarden in een JSON-weergave worden waarden die JSON niet kan vertegenwoordigen daarom geserialiseerd instring
waarden. Kusto parseert daarentegen tekenreeksen als sterk getypte waarden als ze als zodanig kunnen worden geparseerd. Dit geldt voor typendatetime
,real
,long
enguid
. Zie json.orgvoor meer informatie over het JSON-objectmodel. - Kusto probeert niet de volgorde van naam-naar-waarde-toewijzingen in een eigenschapsverzameling te behouden. U kunt dus niet aannemen dat de volgorde behouden blijft. Het is volledig mogelijk dat twee eigenschappentassen met dezelfde set toewijzingen verschillende resultaten opleveren wanneer ze worden weergegeven als
string
waarden, bijvoorbeeld. - Bij het opnemen van gegevens worden waarden van
dynamic
gegevenstypen standaard beperkt tot 1 MiB (2^20), uitgeschakeld. U kunt deMaxValueSize
van de kolom verhogen door het bijbehorende coderingsbeleid te wijzigen om waarden van maximaal 32 MiB toe te staan.
Dynamische letterlijke waarden
Als u een letterlijke dynamic
wilt opgeven, gebruikt u een van de volgende syntaxisopties:
Syntaxis | Beschrijving | Voorbeeld |
---|---|---|
dynamic([
waarde [, ...]]) |
Een matrix met dynamische of andere scalaire letterlijke waarden. | dynamic([1, 2, "hello"]) |
dynamic({
sleutelwaarde= [, ...]}) |
Een eigenschappentas of object. De waarde voor een sleutel kan een geneste eigenschapsverzameling zijn. | dynamic({"a":1, "b":{"a":2}}) |
dynamic(
waarde) |
Een dynamische waarde die de waarde van het binnenste scalaire gegevenstype bevat. | dynamic(4) |
dynamic(null) |
Vertegenwoordigt de null-waarde. |
Meer informatie over syntaxisconventies.
Dynamische objecttoegangsors
Als u een woordenlijst wilt subscripteren, gebruikt u de punt notatie (dict.key
) of de punttekening (dict["key"]
). Wanneer het subscript een tekenreeksconstante is, zijn beide opties equivalent.
Notitie
Als u een expressie als subscript wilt gebruiken, gebruikt u de notatie haakjes. Wanneer u rekenkundige expressies gebruikt, moet de expressie tussen de haakjes worden gewikkeld.
In de onderstaande voorbeelden dict
en arr
kolommen van dynamisch type zijn:
Uitdrukking | Type accessor-expressie | Betekenis | Opmerkingen |
---|---|---|---|
dict[kolom] | Entiteitsnaam (kolom) | Een woordenlijst subscripten met behulp van de waarden van de kolom col als sleutel |
Kolom moet van het type tekenreeks zijn |
arr[index] | Entiteitsindex (kolom) | Een matrix subscripteren met behulp van de waarden van de kolom index als de index |
Kolom moet van het type geheel getal of booleaanse waarde zijn |
arr[-index] | Entiteitsindex (kolom) | Haalt de indexwaarde op van het einde van de matrix | Kolom moet van het type geheel getal of booleaanse waarde zijn |
arr[(-1)] | Entiteitsindex | Haalt de laatste waarde in de matrix op | |
arr[toint(indexAsString)] | Functie-aanroep | Hiermee worden de waarden van kolom indexAsString omgezet in int en gebruikt om een matrix te subscripteren |
|
dict[['where']] | Trefwoord dat wordt gebruikt als entiteitsnaam (kolom) | Een woordenlijst subscripten met behulp van de waarden van kolom where als sleutel |
Entiteitsnamen die identiek zijn aan sommige trefwoorden in de querytaal moeten worden geciteerd |
dict.['where'] of dict['where'] | Constant | Een woordenlijst subscripten met where tekenreeks als sleutel |
Fooi
We raden u aan om indien mogelijk constante subscripts te gebruiken.
Het openen van een subobject van een dynamic
waarde resulteert in een andere dynamic
waarde, zelfs als het subobject een ander onderliggend type heeft. Gebruik de gettype
functie om het werkelijke onderliggende type van de waarde te detecteren en een van de hieronder vermelde cast-functies om deze te casten naar het werkelijke type.
Dynamische objecten casten
Nadat u een dynamisch object hebt subscript, moet u de waarde naar een eenvoudig type casten.
Uitdrukking | Waarde | Type |
---|---|---|
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"}') | woordenboek |
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-functies zijn:
tolong()
todouble()
todatetime()
totimespan()
tostring()
toguid()
parse_json()
Dynamische objecten bouwen
Met verschillende functies kunt u nieuwe dynamic
-objecten maken:
- bag_pack() maakt een eigenschapsverzameling van naam-/waardeparen.
- pack_array() maakt een matrix op basis van een lijst met waarden (kan een lijst met kolommen zijn, voor elke rij wordt er een matrix gemaakt op basis van de opgegeven kolommen).
- range() maakt een matrix met een rekenkundige reeks getallen.
- zip() paren 'parallelle' waarden van twee matrices in één matrix.
- repeat() maakt een matrix met een herhaalde waarde.
Daarnaast zijn er verschillende statistische functies die dynamic
matrices maken voor het opslaan van geaggregeerde waarden:
-
buildschema() retourneert het statistische schema van meerdere
dynamic
waarden. - make_bag() retourneert een eigenschappenverzameling met dynamische waarden binnen de groep.
- make_bag_if() retourneert een eigenschapsverzameling met dynamische waarden binnen de groep (met een predicaat).
- make_list() retourneert een matrix met alle waarden op volgorde.
- make_list_if() retourneert een matrix met alle waarden op volgorde (met een predicaat).
- make_list_with_nulls() retourneert een matrix met alle waarden, in volgorde, inclusief null-waarden.
- make_set() retourneert een matrix met alle unieke waarden.
- make_set_if() retourneert een matrix met alle unieke waarden (met een predicaat).
Operators en functies via dynamische typen
Zie dynamische/matrixfunctiesvoor een volledige lijst met scalaire dynamische/matrixfuncties.
Operator of functie | Gebruik met dynamische gegevenstypen |
---|---|
waardein matrix |
Waar als er een element van matrix is dat == waarde where City in ('London', 'Paris', 'Rome') |
waarde!in matrix |
Waar als er geen element van matrix is dat == waarde |
array_length( matrix) |
Null als het geen matrix is |
bag_has_key( zak, sleutel) |
Controleert of een kolom met een dynamische zak een bepaalde sleutel bevat. |
bag_keys( zak) |
Inventariseert alle hoofdsleutels in een dynamisch object voor eigenschapsverzameling. |
bag_merge( tas1,...,bagN-) |
Hiermee worden dynamische eigenschappenverzamelingen samengevoegd in een dynamische eigenschappenverzameling, waarbij alle eigenschappen zijn samengevoegd. |
bag_set_key( zak,sleutel,waarde) |
Hiermee stelt u een bepaalde sleutel in op een bepaalde waarde in een dynamische eigenschapsverzameling. |
extract_json (pad,object), extract_json( pad, object) |
Gebruik het pad om naar het object te navigeren. |
parse_json( bron) |
Hiermee wordt een JSON-tekenreeks omgezet in een dynamisch object. |
range( van,naar,stap) |
Een matrix met waarden. |
mv-expand listColumn- |
Hiermee wordt een rij gerepliceerd voor elke waarde in een lijst in een opgegeven cel. |
summarize buildschema( kolom) |
Hiermee wordt het typeschema afgeleid van kolominhoud. |
summarize make_bag( kolom) |
Hiermee worden de waarden van de eigenschapsverzameling (woordenlijst) in de kolom samengevoegd in één eigenschapsverzameling, zonder sleutelduplicatie. |
summarize make_bag_if( kolom, predicaat) |
Hiermee worden de waarden van de eigenschapsverzameling (woordenlijst) in de kolom samengevoegd in één eigenschapsverzameling, zonder sleutelduplicatie (met predicaat). |
summarize make_list( kolom) |
Hiermee worden groepen rijen afgevlakt en worden de waarden van de kolom in een matrix geplaatst. |
summarize make_list_if( kolom, predicaat) |
Hiermee worden groepen rijen afgevlakt en worden de waarden van de kolom in een matrix geplaatst (met predicaat). |
summarize make_list_with_nulls( kolom) |
Hiermee worden groepen rijen platgemaakt en worden de waarden van de kolom in een matrix geplaatst, inclusief null-waarden. |
summarize make_set( kolom) |
Hiermee worden groepen rijen platgemaakt en worden de waarden van de kolom in een matrix zonder duplicatie geplaatst. |
Indexeren voor dynamische gegevens
Elk veld wordt geïndexeerd tijdens gegevensopname. Het bereik van de index is één gegevensshard.
Als u dynamische kolommen wilt indexeren, inventariseert het opnameproces alle 'atomische' elementen binnen de dynamische waarde (eigenschapsnamen, waarden, matrixelementen) en stuurt deze door naar de opbouwfunctie voor indexen. Anders hebben dynamische velden dezelfde omgekeerde termenindex als tekenreeksvelden.
Voorbeelden
Dynamische eigenschapsverzameling
Met de volgende query wordt een dynamische eigenschapsverzameling gemaakt.
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
Voor het gemak kunnen dynamic
letterlijke waarden die in de querytekst zelf worden weergegeven, ook andere Letterlijke waarden van Kusto bevatten met typen: datetime
, timespan
, real
, long
, guid
, bool
en dynamic
.
Deze extensie via JSON is niet beschikbaar bij het parseren van tekenreeksen (zoals bij het gebruik van de functie parse_json
of bij het opnemen van gegevens), maar hiermee kunt u het volgende doen:
print d=dynamic({"a": datetime(1970-05-11)})
Als u een string
waarde wilt parseren die volgt op de JSON-coderingsregels in een dynamic
-waarde, gebruikt u de functie parse_json
. Bijvoorbeeld:
-
parse_json('[43, 21, 65]')
- een matrix met getallen -
parse_json('{"name":"Alan", "age":21, "address":{"street":432,"postcode":"JLK32P"}}')
- een woordenlijst -
parse_json('21')
: één waarde van het dynamische type dat een getal bevat -
parse_json('"21"')
- één waarde van het dynamische type dat een tekenreeks bevat -
parse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')
: geeft dezelfde waarde also
in het bovenstaande voorbeeld.
Notitie
In tegenstelling tot JavaScript vereist JSON het gebruik van dubbele aanhalingstekens ("
) rond tekenreeksen en eigenschaps-bag-eigenschapsnamen. Daarom is het over het algemeen eenvoudiger om een letterlijke tekenreeks met JSON-codering te citeren met behulp van één aanhalingsteken ('
).
Gegevens opnemen in dynamische kolommen
In het volgende voorbeeld ziet u hoe u een tabel met een dynamic
kolom (evenals een datetime
kolom) kunt definiëren en vervolgens één record erin kunt opnemen. Het laat ook zien hoe u JSON-tekenreeksen in CSV-bestanden kunt coderen.
// 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!""}"]
uitvoer
Tijdstempel | Spoor |
---|---|
2015-01-01 00:00:00.0000000 | {"EventType":"Demo","EventValue":"Double-quote love!"} |
Verwante inhoud
- Zie Waarden toewijzen van de ene set naar een anderevoor een voorbeeld van het uitvoeren van query's met behulp van dynamische objecten en objecttoegangsobjecten.