Delen via


Het dynamische gegevenstype

Van toepassing op: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft 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 aan dynamic waarden. De eigenschapsverzameling heeft nul of meer dergelijke toewijzingen (zogenaamde 'sleuven'), geïndexeerd door de unieke string waarden. De sleuven zijn ongeordeerd.
  • Een waarde van een van de primitieve scalaire gegevenstypen: bool, datetime, guid, int, long, real, stringen timespan.
  • 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 (bijvoorbeeld long, real, datetime, timespanen guid). Bij het serialiseren van dynamic waarden in een JSON-weergave worden waarden die JSON niet kan vertegenwoordigen daarom geserialiseerd in string waarden. Kusto parseert daarentegen tekenreeksen als sterk getypte waarden als ze als zodanig kunnen worden geparseerd. Dit geldt voor typen datetime, real, longen guid. 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 de MaxValueSize 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
waardeinmatrix Waar als er een element van matrix is dat == waarde
where City in ('London', 'Paris', 'Rome')
waarde!inmatrix 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, boolen 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 als o 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!"}