Zplošťování, uvozování a zpracování polí JSON
Poznámka:
Služba Time Series Insights bude vyřazena 7. července 2024. Zvažte migraci stávajících prostředí na alternativní řešení co nejdříve. Další informace o vyřazení a migraci najdete v naší dokumentaci.
Vaše prostředí Azure Time Series Insights Gen2 bude dynamicky vytvářet sloupce vašich teplých a studených obchodů podle konkrétní sady zásad vytváření názvů. Při ingestování události se na datové části JSON a názvy vlastností použije sada pravidel. Patří sem escaping určitých speciálních znaků a zploštění vnořených objektů JSON. Tato pravidla je důležité znát, abyste pochopili, jak bude tvar JSON ovlivnit způsob ukládání a dotazování událostí. Úplný seznam pravidel najdete v následující tabulce. Příklady A &B také ukazují, jak můžete efektivně dávkot více časových řad v poli.
Důležité
- Před výběrem vlastnosti ID časové řady a/nebo časového razítka zdroje událostí zkontrolujte níže uvedená pravidla. Pokud je vaše ID nebo časové razítko TS vnořeného objektu nebo má jeden nebo více speciálních znaků níže, je důležité zajistit, aby název vlastnosti, který zadáte, odpovídal názvu sloupce po použití pravidel příjmu dat. Viz příklad B níže.
Pravidlo | Příklad JSON | Syntaxe výrazů časové řady | Název sloupce vlastnosti v Parquet |
---|---|---|---|
Datový typ Azure Time Series Insights Gen2 se připojí na konec názvu sloupce jako _<dataType>. | "type": "Accumulated Heat" |
$event.type.String |
type_string |
Vlastnost časového razítka zdroje událostí se uloží ve službě Azure Time Series Insights Gen2 jako časové razítko v úložišti a hodnota uložená v UTC. Vlastnost časového razítka zdroje událostí můžete přizpůsobit tak, aby vyhovovala potřebám vašeho řešení, ale název sloupce v teplém a studeném úložišti je časové razítko. Ostatní vlastnosti JSON data a času, které nejsou časovým razítkem zdroje událostí, se uloží s textem "_datetime" v názvu sloupce, jak je uvedeno výše v pravidle. | "ts": "2020-03-19 14:40:38.318" |
$event.$ts |
timestamp |
Názvy vlastností JSON, které obsahují speciální znaky. [ \ a ' jsou unikovány pomocí [' a '] | "id.wasp": "6A3090FD337DE6B" |
$event['id.wasp'].String |
['id.wasp']_string |
V [' a '] je k dispozici další uvozovky a zpětné lomítka. Jedna uvozovka se zapíše jako \' a zpětné lomítko se zapíše jako \\ | "Foo's Law Value": "17.139999389648" |
$event['Foo\'s Law Value'].Double |
['Foo\'s Law Value']_double |
Vnořené objekty JSON jsou zploštěny tečkou jako oddělovačem. Podporuje se vnoření až 10 úrovní. | "series": {"value" : 316 } |
$event.series.value.Long nebo $event['series']['value'].Long $event.series['value'].Long |
series.value_long |
Pole primitivních typů jsou uložena jako dynamický typ. | "values": [154, 149, 147] |
Dynamické typy je možné načíst pouze prostřednictvím rozhraní GetEvents API. | values_dynamic |
Pole obsahující objekty mají dvě chování v závislosti na obsahu objektu: Pokud jsou v objektech v poli buď ID TS, nebo vlastnosti časového razítka, pole se zruší tak, aby počáteční datová část JSON vytvářela více událostí. To umožňuje dávkot více událostí do jedné struktury JSON. Všechny vlastnosti nejvyšší úrovně, které jsou partnerskými uzly pole, budou uloženy s každým neregistrovaným objektem. Pokud vaše ID TS a časové razítko nejsou v poli, uloží se celý jako dynamický typ. | Podívejte se na příklady A, B a C níže. | ||
Pole obsahující smíšené prvky nejsou zploštěna. | "values": ["foo", {"bar" : 149}, 147] |
Dynamické typy je možné načíst pouze prostřednictvím rozhraní GetEvents API. | values_dynamic |
Limit názvu vlastnosti JSON je 512 znaků. Pokud název přesahuje 512 znaků, bude zkrácen na 512 a< _'hashCode'> bude připojen. Všimněte si , že to platí také pro názvy vlastností, které byly zřetězeny z objektu zploštěné, což označuje vnořenou cestu k objektu. | "data.items.datapoints.values.telemetry<...continuing to over 512 chars>" : 12.3440495 |
"$event.data.items.datapoints.values.telemetry<...continuing to include all chars>.Double" |
data.items.datapoints.values.telemetry<...continuing to 512 chars>_912ec803b2ce49e4a541068d495ab570_double |
Principy duálního chování polí
Pole objektů budou buď uložená jako celek, nebo se rozdělí na několik událostí v závislosti na tom, jak jste modelovali data. To vám umožní použít pole pro dávkové události a vyhnout se opakování vlastností telemetrie, které jsou definovány na úrovni kořenového objektu. Dávkování může být výhodné, protože výsledkem je méně odeslaných zpráv Event Hubs nebo IoT Hub.
V některých případech jsou pole obsahující objekty smysluplné pouze v kontextu jiných hodnot. Vytvoření více událostí by vykreslovalo data bez významu. Pokud chcete zajistit, aby pole objektů bylo uloženo jako dynamický typ, postupujte podle pokynů pro modelování dat níže a podívejte se na příklad C.
Jak zjistit, jestli pole objektů vytvoří více událostí
Pokud je vnořená jedna nebo více z id časové řady Time Series propert(ies) v rámci objektů v poli nebo pokud je vlastnost časového razítka zdroje událostí vnořená, modul pro příjem dat ho rozdělí, aby vytvořil více událostí. Názvy vlastností, které jste zadali pro vaše ID TS a/nebo časové razítko, by se měly řídit výše uvedenými pravidly pro zploštění, a proto budou označovat tvar vašeho KÓDU JSON. Podívejte se na následující příklady a podívejte se na průvodce výběrem vlastnosti ID časové řady.
Příklad A
ID časové řady v kořenovém adresáři objektu a vnořeném časovém razítku
ID časové řady prostředí: "id"
Časové razítko zdroje událostí: "values.time"
Datová část JSON:
[
{
"id": "caaae533-1d6c-4f58-9b75-da102bcc2c8c",
"values": [
{
"time": "2020-05-01T00:59:59.000Z",
"value": 25.6073
},
{
"time": "2020-05-01T01:00:29.000Z",
"value": 43.9077
}
]
},
{
"id": "1ac87b74-0865-4a07-b512-56602a3a576f",
"values": [
{
"time": "2020-05-01T00:59:59.000Z",
"value": 0.337288
},
{
"time": "2020-05-01T01:00:29.000Z",
"value": 4.76562
}
]
}
]
Výsledek v souboru Parquet:
Výše uvedená konfigurace a datová část vytvoří tři sloupce a čtyři události.
časové razítko | id_string | values.value_double |
---|---|---|
2020-05-01T00:59:59.000Z |
caaae533-1d6c-4f58-9b75-da102bcc2c8c |
25.6073 |
2020-05-01T01:00:29.000Z |
caaae533-1d6c-4f58-9b75-da102bcc2c8c |
43.9077 |
2020-05-01T00:59:59.000Z |
1ac87b74-0865-4a07-b512-56602a3a576f |
0.337288 |
2020-05-01T01:00:29.000Z |
1ac87b74-0865-4a07-b512-56602a3a576f |
4.76562 |
Příklad B
ID složené časové řady s jednou vnořenou vlastností
ID časové řady prostředí: "plantId"
a "telemetry.tagId"
Časové razítko zdroje událostí: "timestamp"
Datová část JSON:
[
{
"plantId": "9336971",
"timestamp": "2020-01-22T16:38:09Z",
"telemetry": [
{
"tagId": "100231-A-A6",
"tagValue": -31.149018
},
{
"tagId": "100231-A-A1",
"tagValue": 20.560796
},
{
"tagId": "100231-A-A9",
"tagValue": 177
},
{
"tagId": "100231-A-A8",
"tagValue": 420
},
]
},
{
"plantId": "9336971",
"timestamp": "2020-01-22T16:42:14Z",
"telemetry": [
{
"tagId": "103585-A-A7",
"value": -30.9918
},
{
"tagId": "103585-A-A4",
"value": 19.960796
}
]
}
]
Výsledek v souboru Parquet:
Výše uvedená konfigurace a datová část vytvoří čtyři sloupce a šest událostí.
časové razítko | plantId_string | telemetry.tagId_string | telemetry.value_double |
---|---|---|---|
2020-01-22T16:38:09Z |
9336971 |
100231-A-A6 |
-31.149018 |
2020-01-22T16:38:09Z |
9336971 |
100231-A-A1 |
20.560796 |
2020-01-22T16:38:09Z |
9336971 |
100231-A-A9 |
177 |
2020-01-22T16:38:09Z |
9336971 |
100231-A-A8 |
420 |
2020-01-22T16:42:14Z |
9336971 |
100231-A-A7 |
-30.9918 |
2020-01-22T16:42:14Z |
9336971 |
100231-A-A4 |
19.960796 |
Příklad C
ID a časové razítko časové řady jsou v kořenovém adresáři objektu.
ID časové řady prostředí: "id"
Časové razítko zdroje událostí: "timestamp"
Datová část JSON:
{
"id": "800500054755",
"timestamp": "2020-11-01T10:00:00.000Z",
"datapoints": [{
"value": 120
},
{
"value": 124
}
]
}
Výsledek v souboru Parquet:
Výše uvedená konfigurace a datová část vytvoří tři sloupce a jednu událost.
časové razítko | id_string | datapoints_dynamic |
---|---|---|
2020-11-01T10:00:00.000Z |
800500054755 |
[{"value": 120},{"value":124}] |