Dynamiczny typ danych
Dotyczy: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Typ dynamic
danych skalarnych może być dowolną z następujących wartości:
- Tablica
dynamic
wartości, zawierająca zero lub więcej wartości z indeksowaniem zerowym. - Torba właściwości, która mapuje unikatowe
string
wartości nadynamic
wartości. Worek właściwości ma zero lub więcej takich mapowań (nazywanych "miejscami"), indeksowanych przez unikatowestring
wartości. Miejsca są nieurządzane. - Wartość dowolnego z pierwotnych typów danych skalarnych:
bool
, ,datetime
,guid
real
string
int
long
i .timespan
- Zero. Aby uzyskać więcej informacji, zobacz Wartości null.
Uwaga
- Wartości typu
dynamic
są ograniczone do 1 MB (2^20), nieskompresowane. Jeśli wartość komórki w rekordzie przekracza 1 MB, wartość zostanie porzucona i pozyskiwanie zakończy się powodzeniem. KolumnęMaxValueSize
można zwiększyć, zmieniając jej zasady kodowania. dynamic
Mimo że typ jest wyświetlany w formacie JSON, może przechowywać wartości, które model JSON nie reprezentuje, ponieważ nie istnieją w formacie JSON (np.long
,real
,datetime
,timespan
iguid
). W związku z tym w serializacjidynamic
wartości w reprezentacji JSON wartości, których nie można reprezentować w formacie JSON, są serializowane nastring
wartości. Z drugiej strony usługa Kusto przeanalizuje ciągi jako silnie typizowane wartości, jeśli można je przeanalizować.datetime
Dotyczy to typów , ,long
real
iguid
. Aby uzyskać więcej informacji na temat modelu obiektów JSON, zobacz json.org.- Usługa Kusto nie próbuje zachować kolejności mapowań nazw na wartość w torbie właściwości i dlatego nie można założyć, że kolejność ma zostać zachowana. Jest to całkowicie możliwe, aby dwie torby właściwości z tym samym zestawem mapowań przyniosły różne wyniki, gdy są one reprezentowane jako
string
wartości, na przykład.
Literały dynamiczne
Aby określić dynamic
literał, użyj jednej z następujących opcji składni:
Składnia | opis | Przykład |
---|---|---|
dynamic([ value [, ...]]) |
Tablica dynamicznych lub innych literałów skalarnych. | dynamic([1, 2, "hello"]) |
dynamic({ wartość klucza = [, ...]}) |
Torba właściwości lub obiekt. Wartość klucza może być zagnieżdżonym workiem właściwości. | dynamic({"a":1, "b":{"a":2}}) |
dynamic( wartość) |
Wartość dynamiczna zawierająca wartość wewnętrznego typu danych skalarnych. | dynamic(4) |
dynamic(null) |
Reprezentuje wartość null. |
Dowiedz się więcej na temat konwencji składni.
Dynamiczne metody dostępu do obiektów
Do indeksu dolnego słownika użyj notacji kropkowej (dict.key
) lub notacji nawiasów kwadratowych (dict["key"]
). Gdy indeks dolny jest stałą ciągu, obie opcje są równoważne.
Uwaga
Aby użyć wyrażenia jako indeksu dolnego, użyj notacji nawiasów kwadratowych. W przypadku używania wyrażeń arytmetycznych wyrażenie wewnątrz nawiasów musi być opakowane w nawiasy.
W poniższych dict
przykładach znajdują arr
się kolumny typu dynamicznego:
Wyrażenie | Typ wyrażenia dostępu | Znaczenie | Komentarze |
---|---|---|---|
dict[col] | Nazwa jednostki (kolumna) | Indeksuje słownik przy użyciu wartości kolumny col jako klucza |
Kolumna musi być ciągiem typu |
arr[index] | Indeks jednostki (kolumna) | Indeksuje tablicę przy użyciu wartości kolumny index jako indeksu |
Kolumna musi być typu liczba całkowita lub wartość logiczna |
arr[-index] | Indeks jednostki (kolumna) | Pobiera wartość "index"-th z końca tablicy | Kolumna musi być typu liczba całkowita lub wartość logiczna |
arr[-1)] | Indeks jednostki | Pobiera ostatnią wartość w tablicy | |
arr[toint(indexAsString)] | Wywoływanie funkcji | Rzutuje wartości kolumny indexAsString na int i używa ich do indeksu dolnego tablicy |
|
dict[['where']] | Słowo kluczowe używane jako nazwa jednostki (kolumna) | Indeksuje słownik przy użyciu wartości kolumny where jako klucza |
Nazwy jednostek, które są identyczne z niektórymi słowami kluczowymi języka zapytań, muszą być cytowane |
dict.['where'] lub dict['where'] | Stała | Indeksuje słownik przy użyciu where ciągu jako klucza |
Napiwek
Zalecamy używanie stałych indeksów dolnych, jeśli jest to możliwe.
Uzyskanie dostępu do obiektu podrzędnego dynamic
wartości daje inną dynamic
wartość, nawet jeśli obiekt podrzędny ma inny typ bazowy. gettype
Użyj funkcji , aby odnaleźć rzeczywisty typ wartości bazowej i dowolną funkcję rzutowania wymienioną poniżej, aby rzutować ją na rzeczywisty typ.
Rzutowanie obiektów dynamicznych
Po wpisaniu dolnym obiektu dynamicznego należy rzutować wartość na prosty typ.
Wyrażenie | Wartość | Typ |
---|---|---|
X | parse_json("[100,101,102]") | tablica |
X[0] | parse_json('100') | dynamic |
toint(X[1]) | 101 | int |
Y | parse_json('{"a1":100, "a b c":"2015-01-01"}') | słownik |
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 |
Funkcje rzutu to:
tolong()
todouble()
todatetime()
totimespan()
tostring()
toguid()
parse_json()
Tworzenie obiektów dynamicznych
Kilka funkcji umożliwia tworzenie nowych dynamic
obiektów:
- bag_pack() tworzy torbę właściwości na podstawie par nazw/wartości.
- pack_array() tworzy tablicę na podstawie listy wartości (może to być lista kolumn, dla każdego wiersza utworzy tablicę z określonych kolumn).
- range() tworzy tablicę z arytmetyczną serią liczb.
- zip() paruje wartości "równoległe" z dwóch tablic do jednej tablicy.
- repeat() tworzy tablicę z wielokrotną wartością.
Ponadto istnieje kilka funkcji agregujących, które tworzą dynamic
tablice do przechowywania zagregowanych wartości:
- buildschema() zwraca zagregowany schemat wielu
dynamic
wartości. - make_bag() zwraca worek właściwości wartości dynamicznych w grupie.
- make_bag_if() zwraca worek właściwości wartości dynamicznych w grupie (z predykatem).
- make_list() zwraca tablicę zawierającą wszystkie wartości w sekwencji.
- make_list_if() zwraca tablicę zawierającą wszystkie wartości w sekwencji (z predykatem).
- make_list_with_nulls() zwraca tablicę zawierającą wszystkie wartości w sekwencji, w tym wartości null.
- make_set() zwraca tablicę zawierającą wszystkie unikatowe wartości.
- make_set_if() zwraca tablicę zawierającą wszystkie unikatowe wartości (z predykatem).
Operatory i funkcje w typach dynamicznych
Aby uzyskać pełną listę funkcji dynamicznych/tablicowych skalarnych, zobacz funkcje dynamiczne/tablicowe.
Operator lub funkcja | Użycie z dynamicznymi typami danych |
---|---|
tablica wartości in |
Prawda, jeśli istnieje element tablicy, która == wartość where City in ('London', 'Paris', 'Rome') |
tablica wartości !in |
Prawda, jeśli nie ma elementu tablicy, która == wartość |
array_length( tablica) |
Wartość null, jeśli nie jest tablicą |
bag_has_key( torbowy, klucz) |
Sprawdza, czy kolumna torby dynamicznej zawiera dany klucz. |
bag_keys( torba) |
Wylicza wszystkie klucze główne w obiekcie dynamicznej torby właściwości. |
bag_merge( bag1,...,bagN) |
Scala dynamiczne torby właściwości w dynamiczną torbę właściwości ze wszystkimi właściwościami scalanymi. |
bag_set_key( torba, klucz, wartość) |
Ustawia dany klucz na daną wartość w dynamicznej torbie właściwości. |
extract_json (ścieżka,obiekt), extract_json( ścieżka,obiekt) |
Użyj ścieżki, aby przejść do obiektu. |
parse_json( source) |
Zamienia ciąg JSON w obiekt dynamiczny. |
range( od,do,krok) |
Tablica wartości. |
mv-expand listColumn |
Replikuje wiersz dla każdej wartości na liście w określonej komórce. |
summarize buildschema( kolumna) |
Wywnioskuje schemat typu z zawartości kolumny. |
summarize make_bag( kolumna) |
Scala wartości torby właściwości (słownika) w kolumnie z jedną torbą właściwości bez duplikowania kluczy. |
summarize make_bag_if( kolumna,predykat) |
Scala wartości torby właściwości (słownika) w kolumnie z jedną torbą właściwości bez duplikowania klucza (z predykatem). |
summarize make_list( kolumna) |
Spłaszcza grupy wierszy i umieszcza wartości kolumny w tablicy. |
summarize make_list_if( kolumna,predykat) |
Spłaszczanie grup wierszy i umieszcza wartości kolumny w tablicy (z predykatem). |
summarize make_list_with_nulls( kolumna) |
Spłaszcza grupy wierszy i umieszcza wartości kolumny w tablicy, w tym wartości null. |
summarize make_set( kolumna) |
Spłaszcza grupy wierszy i umieszcza wartości kolumny w tablicy bez duplikowania. |
Indeksowanie danych dynamicznych
Każde pole jest indeksowane podczas pozyskiwania danych. Zakres indeksu to pojedynczy fragment danych.
Aby indeksować kolumny dynamiczne, proces pozyskiwania wylicza wszystkie "niepodzielne" elementy w ramach wartości dynamicznej (nazwy właściwości, wartości, elementy tablicy) i przekazuje je do konstruktora indeksów. W przeciwnym razie pola dynamiczne mają ten sam odwrócony indeks terminów co pola ciągu.
Przykłady
Torby właściwości dynamicznej
Poniższe zapytanie tworzy torby właściwości dynamicznej.
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
Dla wygody literałydynamic
, które pojawiają się w samym tekście zapytania, mogą również zawierać inne literały Kusto z typami: datetime
, bool
long
guid
timespan
real
i .dynamic
To rozszerzenie w formacie JSON nie jest dostępne podczas analizowania ciągów (takich jak podczas korzystania z parse_json
funkcji lub podczas pozyskiwania danych), ale umożliwia wykonywanie następujących czynności:
print d=dynamic({"a": datetime(1970-05-11)})
Aby przeanalizować wartość zgodną string
dynamic
z regułami kodowania JSON do wartości, użyj parse_json
funkcji . Na przykład:
parse_json('[43, 21, 65]')
- tablica liczbparse_json('{"name":"Alan", "age":21, "address":{"street":432,"postcode":"JLK32P"}}')
- słownikparse_json('21')
- pojedyncza wartość typu dynamicznego zawierająca liczbęparse_json('"21"')
— pojedyncza wartość typu dynamicznego zawierająca ciągparse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')
— daje taką samą wartość jako
w powyższym przykładzie.
Uwaga
W przeciwieństwie do języka JavaScript kod JSON wymaga użycia znaków podwójnego cudzysłowu ("
) wokół ciągów i nazw właściwości bag. W związku z tym zazwyczaj łatwiej jest zacytować literał ciągu zakodowanego w formacie JSON przy użyciu znaku pojedynczego cudzysłowu ('
).
Pozyskiwanie danych do kolumn dynamicznych
W poniższym przykładzie pokazano, jak można zdefiniować tabelę zawierającą kolumnę dynamic
(a także kolumnę datetime
), a następnie pozyskać do niej pojedynczy rekord. Pokazuje również, jak kodować ciągi JSON w plikach 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!""}"]
Wyjście
Sygnatura czasowa | Śledzenie |
---|---|
2015-01-01 00:00:00.0000000 | {"EventType":"Demo","EventValue":"Double-quote love!"} |
Powiązana zawartość
- Aby zapoznać się z przykładem wykonywania zapytań przy użyciu obiektów dynamicznych i metod dostępu do obiektów, zobacz Mapuj wartości z jednego zestawu na inny.