Het dynamische gegevenstype
Het dynamic
scalaire gegevenstype kan een van de volgende waarden zijn:
- Een matrix met
dynamic
waarden met nul of meer waarden met op nul gebaseerde indexering. - Een eigenschappenverzameling die unieke
string
waarden toe wijst aandynamic
waarden. De eigenschappenverzameling bevat nul of meer van dergelijke toewijzingen ('sleuven' genoemd), geïndexeerd op basis van de uniekestring
waarden. De sleuven zijn ongeordeerd. - Een waarde van een van de primitieve scalaire gegevenstypen:
bool
,datetime
,guid
,int
,long
, ,real
,string
, entimespan
. - Null. Zie Null-waarden voor meer informatie.
Notitie
- Waarden van het type
dynamic
zijn beperkt tot 1 MB (2^20), niet gecomprimeerd. Als een celwaarde in een record groter is dan 1 MB, wordt de waarde verwijderd en slaagt de opname. U kunt deMaxValueSize
van de kolom verhogen door het coderingsbeleid te wijzigen. - Hoewel het
dynamic
type JSON-achtig lijkt, kan het waarden bevatten die het JSON-model niet vertegenwoordigt, omdat ze niet bestaan in JSON (bijvoorbeeldlong
,real
,datetime
,timespan
enguid
). Daarom worden waarden die niet door JSON kunnen worden geserialiseerdstring
in waarden bij het serialiserendynamic
van waarden in een JSON-weergave. Kusto parseert daarentegen tekenreeksen als sterk getypeerde waarden als ze als zodanig kunnen worden geparseerd. Dit is van toepassing opdatetime
de typen ,real
long
, enguid
. Zie json.org voor meer informatie over het JSON-objectmodel. - Kusto probeert niet de volgorde van naam-naar-waarde-toewijzingen in een eigenschappenverzameling te behouden en u kunt er dus niet van uitgaan dat de volgorde moet worden behouden. Het is heel goed mogelijk dat twee eigenschappenverzamelingen met dezelfde set toewijzingen verschillende resultaten opleveren wanneer ze bijvoorbeeld worden weergegeven als
string
waarden.
Dynamische letterlijke waarden
Als u een letterlijke dynamic
waarde wilt opgeven, gebruikt u een van de volgende syntaxisopties:
Syntax | Beschrijving | Voorbeeld |
---|---|---|
dynamic([ waarde [, ...]]) |
Een matrix met dynamische of andere scalaire letterlijke waarden. | dynamic([1, 2, "hello"]) |
dynamic({ Sleutel= waarde [, ...]}) |
Een eigenschappenverzameling of -object. De waarde voor een sleutel kan een geneste eigenschappenverzameling 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 puntnotatie (dict.key
) of de hakennotatie (dict["key"]
). Wanneer subscript een tekenreeksconstante is, zijn beide opties gelijkwaardig.
Notitie
Als u een expressie als subscript wilt gebruiken, gebruikt u de hakennotatie. Wanneer u rekenkundige expressies gebruikt, moet de expressie tussen haakjes worden geplaatst.
In de onderstaande dict
voorbeelden zijn kolommen arr
van het dynamische type:
Expression | Type toegangsexpressie | Betekenis | Opmerkingen |
---|---|---|---|
dict[col] | Entiteitsnaam (kolom) | Hiermee wordt een woordenlijst geschreven met de waarden van de kolom col als sleutel |
Kolom moet van het type tekenreeks zijn |
arr[index] | Entiteitsindex (kolom) | Hiermee wordt een matrix in een subscript geplaatst 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 'index'-th-waarde van het einde van de matrix op | 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 de kolom indexAsString naar int gecast en gebruikt om een matrix te subscripteren |
|
dict[['where']] | Trefwoord dat wordt gebruikt als entiteitsnaam (kolom) | Een woordenlijst subscripten met de waarden van kolom where als sleutel |
Entiteitsnamen die identiek zijn aan bepaalde trefwoorden in de querytaal, moeten worden geciteerd |
dict.['where'] of dict['where'] | Constant | Een woordenlijst subscripts uitvoeren met tekenreeks where als sleutel |
Tip
We raden u aan om waar mogelijk constante subscripts te gebruiken.
Toegang tot een subobject van een dynamic
waarde levert een andere dynamic
waarde op, 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 onderstaande cast-functies om deze te casten naar het werkelijke type.
Dynamische objecten casten
Nadat u een dynamisch object hebt gesubscripted, moet u de waarde naar een eenvoudig type casten.
Expression | Waarde | Type |
---|---|---|
X | parse_json('[100.101.102]') | matrix |
X[0] | parse_json('100') | dynamic |
toint(X[1]) | 101 | int |
J | parse_json('{"a1":100, "a b c":"2015-01-01"}') | Woordenboek |
Y.a1 | parse_json('100') | dynamic |
Y["a b c"] | parse_json("01-01-2015") | dynamic |
todate(Y["a b c"]) | datetime(01-01-2015) | 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 eigenschappenverzameling van naam-waardeparen.
- pack_array() maakt een matrix op basis van naam-waardeparen.
- met range() maakt u een matrix met een rekenkundige reeks getallen.
- Zip() koppelt 'parallelle' waarden van twee matrices in één matrix.
- repeat() maakt een matrix met een herhaalde waarde.
Daarnaast zijn er verschillende statistische functies die matrices maken dynamic
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 eigenschappenverzameling met dynamische waarden binnen de groep (met een predicaat).
- make_list() retourneert een matrix die alle waarden opeenvolgend bevat.
- make_list_if() retourneert een matrix die alle waarden op volgorde (met een predicaat) bevat.
- make_list_with_nulls() retourneert een matrix die alle waarden op volgorde bevat, inclusief null-waarden.
- make_set() retourneert een matrix die alle unieke waarden bevat.
- make_set_if() retourneert een matrix met alle unieke waarden (met een predicaat).
Operators en functies via dynamische typen
Zie dynamische/matrixfuncties voor een volledige lijst met scalaire dynamische /matrixfuncties.
Operator of functie | Gebruik met dynamische gegevenstypen |
---|---|
Waardein Array |
True als er een element van de matrix is dat == waarde where City in ('London', 'Paris', 'Rome') |
Waarde!in Array |
True als er geen element van de matrix is dat == waarde bevat |
array_length( Array) |
Null als het geen matrix is |
bag_has_key( zaksleutel, ) |
Hiermee wordt gecontroleerd of een kolom met een dynamische zak een bepaalde sleutel bevat. |
bag_keys( Zak) |
Inventariseert alle hoofdsleutels in een dynamisch eigenschapsverzamelingsobject. |
bag_merge( bag1,...,bagN) |
Hiermee worden dynamische eigenschapsverzamelingen samengevoegd in een dynamische eigenschappenverzameling met alle eigenschappen samengevoegd. |
bag_set_key( zak,sleutel,waarde) |
Hiermee stelt u een bepaalde sleutel in op een bepaalde waarde in een dynamische eigenschappenverzameling. |
extract_json (pad,object), extract_json( pad,object) |
Gebruik pad om naar het object te navigeren. |
parse_json( Bron) |
Verandert een JSON-tekenreeks in een dynamisch object. |
range( van,naar,stap) |
Een matrix van waarden. |
mv-expand Listcolumn |
Repliceert een rij voor elke waarde in een lijst in een opgegeven cel. |
summarize buildschema( Kolom) |
Hiermee wordt het typeschema afgeleid uit de kolominhoud. |
summarize make_bag( Kolom) |
Hiermee worden de waarden van de eigenschappenverzameling (woordenlijst) in de kolom samengevoegd tot één eigenschappenverzameling, zonder sleutelduplicatie. |
summarize make_bag_if( kolom,predicaat) |
Hiermee worden de waarden van de eigenschappenverzameling (woordenlijst) in de kolom samengevoegd tot één eigenschappenverzameling, zonder sleutelduplicatie (met predicaat). |
summarize make_list( Kolom) |
Hiermee worden groepen rijen platgemaakt en worden de waarden van de kolom in een matrix geplaatst. |
summarize make_list_if( kolom,predicaat) |
Hiermee worden groepen rijen platgemaakt en worden de waarden van de kolom in een matrix geplaatst (met predicaat). |
summarize make_list_with_nulls( Kolom) |
Hiermee worden groepen rijen afgevlakt 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 geplaatst, zonder duplicatie. |
Indexering 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 in de dynamische waarde (eigenschapsnamen, waarden, matrixelementen) en stuurt deze door naar de opbouwfunctie voor indexen. Anders hebben dynamische velden dezelfde omgekeerde termindex als tekenreeksvelden.
Voorbeelden
Dynamische eigenschappenverzameling
Met de volgende query wordt een dynamische eigenschappenverzameling 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 letterlijke waarden die in de querytekst zelf worden weergegeven, dynamic
ook andere Letterlijke Kusto-waarden bevatten met de 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 parse_json
functie of bij het opnemen van gegevens), maar u kunt het volgende doen:
print d=dynamic({"a": datetime(1970-05-11)})
Gebruik de parse_json
functie om een string
waarde die volgt op de JSON-coderingsregels te parseren in een dynamic
waarde. Bijvoorbeeld:
parse_json('[43, 21, 65]')
- een matrix van getallenparse_json('{"name":"Alan", "age":21, "address":{"street":432,"postcode":"JLK32P"}}')
- een woordenlijstparse_json('21')
- een enkele waarde van dynamisch type die een getal bevatparse_json('"21"')
- één waarde van dynamisch type die een tekenreeks bevatparse_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 eigenschapsverzamelingsnamen. Daarom is het over het algemeen eenvoudiger om een letterlijke tekenreeks met JSON-codering te citeren met behulp van een enkel aanhalingsteken ('
).
Gegevens opnemen in dynamische kolommen
In het volgende voorbeeld ziet u hoe u een tabel kunt definiëren die een dynamic
kolom (en een datetime
kolom) bevat en er vervolgens één record in opneemt. 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 | Tracering |
---|---|
2015-01-01 00:00:00.0000000 | {"EventType":"Demo","EventValue":"Double-quote love!"} |
Gerelateerde inhoud
- Zie Waarden van de ene set toewijzen aan een andere voor een voorbeeld van het uitvoeren van query's met behulp van dynamische objecten en objecttoegangsfuncties.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor