Tipo di dati dynamic
Il dynamic
tipo di dati scalare può essere uno dei valori seguenti:
- Una matrice di valori
dynamic
, contenente zero o più valori con indicizzazione in base zero. - Un contenitore di proprietà che mappa valori
string
univoci a valoridynamic
. Il contenitore di proprietà include zero o più mapping di questo tipo, definiti "slot", indicizzati in base ai valoristring
univoci. Gli slot non sono ordinati. - Un valore di qualsiasi tipo di dati scalare primitivo:
bool
,datetime
,guid
,int
,long
,real
,string
etimespan
. - Null. Per altre informazioni, vedere Valori Null.
Nota
- I valori di tipo
dynamic
sono limitati a 1 MB (2^20), non compressi. Se un valore di cella in un record supera 1 MB, il valore viene eliminato e l'inserimento ha esito positivo. È possibile aumentare l'oggetto della colonna modificando iMaxValueSize
criteri di codifica. - Anche se il tipo viene visualizzato come JSON, può contenere valori che il
dynamic
modello JSON non rappresenta perché non esistono in JSON (ad esempiolong
,timespan
real
datetime
e ).guid
Pertanto, nella serializzazione di valoridynamic
in una rappresentazione JSON, i valori che JSON non può rappresentare vengono serializzati in valoristring
. Viceversa, Kusto analizzerà le stringhe come valori fortemente tipizzati, se possono essere analizzati come tali. Ciò si applica aidatetime
tipi ,real
,long
eguid
. Per altre informazioni sul modello a oggetti JSON, vedere json.org. - Kusto non prova a preservare l'ordine dei mapping nome-valore in un contenitore di proprietà, quindi non è possibile presupporre che tale ordine venga mantenuto. È interamente possibile che due contenitori di proprietà con lo stesso set di mapping generino risultati diversi quando vengono rappresentati, ad esempio, come valori
string
.
Valori letterali dinamici
Per specificare un dynamic
valore letterale, usare una delle opzioni di sintassi seguenti:
Sintassi | Descrizione | Esempio |
---|---|---|
dynamic([ value [, ...]]) |
Matrice di valori letterali scalari o dinamici. | dynamic([1, 2, "hello"]) |
dynamic({ Chiave= value [, ...]}) |
Oggetto o borsa delle proprietà. Il valore per una chiave può essere un contenitore di proprietà annidato. | dynamic({"a":1, "b":{"a":2}}) |
dynamic( value) |
Valore dinamico che contiene il valore del tipo di dati scalare interno. | dynamic(4) |
dynamic(null) |
Rappresenta il valore Null. |
Altre informazioni sulle convenzioni di sintassi.
Funzioni di accesso di oggetti dinamici
Per indicizzare un dizionario, usare la notazione con il punto (dict.key
) o con le parentesi quadre (dict["key"]
). Se l'indice è una costante stringa, le due opzioni sono equivalenti.
Nota
Per usare un'espressione come indice, usare la notazione con parentesi quadre. Se si usano espressioni aritmetiche, l'espressione all'interno delle parentesi quadre deve essere racchiusa tra parentesi tonde.
Negli esempi seguenti dict
e arr
sono colonne di tipo dynamic:
Expression | Tipo di espressione delle funzione di accesso | Significato | Commenti |
---|---|---|---|
dict[col] | Nome dell'entità (colonna) | Indicizza un dizionario usando i valori della colonna col come chiave |
La colonna deve essere di tipo string |
arr[index] | Indice dell'entità (colonna) | Indicizza una matrice usando i valori della colonna index come indice |
La colonna deve essere di tipo integer o boolean |
arr[-index] | Indice dell'entità (colonna) | Recupera il valore dell'oggetto 'index' indicato dalla fine della matrice | La colonna deve essere di tipo integer o boolean |
arr[(-1)] | Indice di entità | Recupera l'ultimo valore nella matrice | |
arr[toint(indexAsString)] | Chiamata di funzione | Esegue il cast dei valori della colonna indexAsString a int e li usa per indicizzare una matrice |
|
dict[['where']] | Parola chiave usata come nome dell'entità (colonna) | Indicizza un dizionario usando i valori della colonna where come chiave |
I nomi delle entità identici a parole chiave di qualche linguaggio di query devono essere racchiusi tra virgolette |
dict.['where'] o dict['where'] | Costante | Indicizza un dizionario usando la stringa where come chiave |
Suggerimento
È consigliabile usare i sottoscritti costanti quando possibile.
L'accesso a un oggetto secondario di un valore dynamic
genera un altro valore dynamic
, anche se l'oggetto secondario ha un tipo sottostante diverso. Usare la funzione gettype
per individuare il tipo sottostante effettivo del valore e una delle funzioni cast elencate di seguito per eseguirne il cast al tipo effettivo.
Cast di oggetti dinamici
Dopo aver indicizzato un oggetto dinamico, è necessario eseguire il cast del valore a un tipo semplice.
Expression | Valore | Tipo |
---|---|---|
X | parse_json('[100,101,102]') | array |
X[0] | parse_json('100') | dynamic |
toint(X[1]) | 101 | int |
S | parse_json('{"a1":100, "a b c":"2015-01-01"}') | dictionary |
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 |
Le funzioni cast sono:
tolong()
todouble()
todatetime()
totimespan()
tostring()
toguid()
parse_json()
Creazione di oggetti dinamici
Diverse funzioni consentono di creare nuovi oggetti dynamic
:
- bag_pack() crea un contenitore di proprietà da coppie nome/valore.
- pack_array() crea una matrice da coppie nome-valore.
- range() crea una matrice con una serie aritmetica di numeri.
- zip() abbina i valori "paralleli" di due matrici in una singola matrice.
- repeat() crea una matrice con un valore ripetuto.
Inoltre, sono disponibili diverse funzioni di aggregazione che creano matrici dynamic
in cui contenere valori aggregati:
- buildschema() restituisce lo schema aggregato di più valori
dynamic
. - make_bag() restituisce un contenitore di proprietà di valori dinamici all'interno del gruppo.
- make_bag_if() restituisce un contenitore di proprietà di valori dinamici all'interno del gruppo (con un predicato).
- make_list() restituisce una matrice che contiene tutti i valori in sequenza.
- make_list_if() restituisce una matrice che contiene tutti i valori in sequenza (con un predicato).
- make_list_with_nulls() restituisce una matrice che contiene tutti i valori in sequenza, inclusi i valori Null.
- make_set() restituisce una matrice che contiene tutti valori univoci.
- make_set_if() restituisce una matrice che contiene tutti valori univoci (con un predicato).
Operatori e funzioni su tipi dinamici
Per un elenco completo di funzioni scalari su tipi dinamici/matrici, vedere Funzioni su tipi dinamici/matrici.
Operatore o funzione | Utilizzo con i tipi di dati dinamici |
---|---|
Valorein Matrice |
True se è presente un elemento della matrice che == valore where City in ('London', 'Paris', 'Rome') |
Valore!in Matrice |
True se non è presente alcun elemento della matrice che == valore |
array_length( matrice) |
Null se non è una matrice |
bag_has_key( chiave di borsa, ) |
Verifica se una colonna del contenitore dinamico contiene una chiave specificata. |
bag_keys( bag) |
Enumera tutte le chiavi radice in un oggetto contenitore di proprietà dinamiche. |
bag_merge( bag1,...,bagN) |
Unisce i contenitori di proprietà dinamiche in un contenitore di proprietà dinamiche con tutte le proprietà unite. |
bag_set_key( borsa, chiave, valore) |
Imposta una chiave specificata su un determinato valore in un contenitore di proprietà dinamico. |
extract_json (path,object), extract_json( path,object) |
Usare il percorso per passare all'oggetto. |
parse_json( source) |
Converte una stringa JSON in un oggetto dinamico. |
range( from,to,step) |
Matrice di valori . |
mv-expand listColumn |
Replica una riga per ogni valore in un elenco in una cella specificata. |
summarize buildschema( column) |
Inferisce lo schema di tipo dal contenuto della colonna. |
summarize make_bag( column) |
Unisce i valori del contenitore di proprietà (dizionario) della colonna in un unico contenitore di proprietà, senza duplicazione di chiavi. |
summarize make_bag_if( column,predicate) |
Unisce i valori del contenitore di proprietà (dizionario) della colonna in un unico contenitore di proprietà, senza duplicazione di chiavi (con predicato). |
summarize make_list( column) |
Rende flat gruppi di righe e inserisce i valori della colonna in una matrice. |
summarize make_list_if( column,predicate) |
Appiattisce gruppi di righe e inserisce i valori della colonna in una matrice (con predicato). |
summarize make_list_with_nulls( column) |
Appiattisce gruppi di righe e inserisce i valori della colonna in una matrice, inclusi i valori Null. |
summarize make_set( column) |
Rende flat gruppi di righe e inserisce i valori della colonna in una matrice, senza duplicazione. |
Indicizzazione per i dati dinamici
Ogni campo viene indicizzato durante l'inserimento dei dati. L'ambito dell'indice è una singola partizione di dati.
Per indicizzare le colonne dinamiche, il processo di inserimento enumera tutti gli elementi "atomici" all'interno del valore dinamico (nomi di proprietà, valori, elementi matrice) e li inoltra al generatore di indici. In caso contrario, i campi dinamici hanno lo stesso indice termine invertito dei campi stringa.
Esempio
Borsa di proprietà dinamica
La query seguente crea un contenitore di proprietà dinamico.
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
Per praticità, i valori letterali dynamic
inclusi nel testo stesso della query possono anche includere altri valori letterali Kusto con i tipi datetime
, timespan
, real
, long
, guid
, bool
e dynamic
.
Questa estensione rispetto a JSON non è disponibile per l'analisi di stringhe, ad esempio quando si usa la funzione parse_json
o si inseriscono dati, ma consente di eseguire quanto segue:
print d=dynamic({"a": datetime(1970-05-11)})
Per analizzare un valore string
che segue le regole di codifica JSON in un valore dynamic
, usare la funzione parse_json
. Ad esempio:
parse_json('[43, 21, 65]')
: una matrice di numeriparse_json('{"name":"Alan", "age":21, "address":{"street":432,"postcode":"JLK32P"}}')
: un dizionarioparse_json('21')
: un singolo valore di tipo dinamico che contiene un numeroparse_json('"21"')
: un singolo valore di tipo dinamico che contiene una stringaparse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')
- assegna lo stesso valoreo
dell'esempio precedente.
Nota
A differenza di JavaScript, JSON richiede l'uso di caratteri con virgolette doppie ("
) intorno a stringhe e nomi di proprietà del contenitore di proprietà. Pertanto, è in genere più facile usare il carattere virgolette singole ('
) per un valore letterale stringa con codifica JSON.
Inserire dati in colonne dinamiche
Nell'esempio seguente viene illustrato come definire una tabella che contiene una colonna (oltre a una dynamic
datetime
colonna) e quindi inserire un singolo record in esso. Illustra anche come codificare stringhe JSON nei file CSV.
// 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!""}"]
Output
Timestamp | Trace |
---|---|
2015-01-01 00:00:00.0000000 | {"EventType":"Demo","EventValue":"Double-quote love!"} |
Contenuti correlati
- Per un esempio su come eseguire query usando oggetti dinamici e funzioni di accesso agli oggetti, vedere Eseguire il mapping dei valori da un set a un altro.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per