Zploštění, zapouzdření 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 příjmu události se na dávku JSON a názvy vlastností použije sada pravidel. Patří sem maskování speciálních znaků a vyrovná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ávkovat více časových řad v poli.
Důležitý
- Před výběrem vlastnosti ID časové řady a/nebo vlastnosti časového razítka u zdroje událostízkontrolujte následující pravidla. Pokud je vaše TS ID nebo časové razítko umístěno uvnitř vnořeného objektu nebo obsahuje jeden či více z uvedených speciálních znaků, je důležité, aby zadaný název vlastnosti odpovídal názvu sloupce po aplikování pravidel příjmu dat. Viz příklad B níže.
Pravidlo | Příklad JSON | syntaxe výrazů časové řady | Název vlastnostního sloupce ve formátu 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 |
Zdroj událostí , vlastnost časového razítka, bude uložen v Azure Time Series Insights Gen2 jako “timestamp” v úložišti a hodnota bude uložena v UTC. Můžete přizpůsobit vlastnost časového razítka vašich zdrojů událostí, 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 s datem a časem, které nejsou časovým razítkem zdroje události, budou uloženy s příponou "_datetime" v názvu sloupce, jak je uvedeno v pravidle výše. | "ts": "2020-03-19 14:40:38.318" |
$event.$ts |
timestamp |
Názvy vlastností JSON, které obsahují speciální znaky. [ \ a ' jsou escapovány pomocí [' a '] | "id.wasp": "6A3090FD337DE6B" |
$event['id.wasp'].String |
['id.wasp']_string |
V rámci [' a '] dochází k dalšímu úniku uvozovek a zpětných lomítek. 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 s použitím tečky jako oddělovače. Podporuje se vnoření až 10 úrovní. | "series": {"value" : 316 } |
$event.series.value.Long , $event['series']['value'].Long nebo $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ě možnosti chování v závislosti na obsahu objektu: Pokud je v objektech v poli buď vlastnost ID TS, nebo vlastnost časového razítka, pole se rozbalí a počáteční datová část JSON vytváří více událostí. To umožňuje dávkot více událostí do jedné struktury JSON. Všechny vlastnosti nejvyšší úrovně, které jsou rovnocenné s poli, budou uloženy s každým rozvinutým objektem. Pokud jsou vaše ID TS a časové razítko nejsou v rámci pole, uloží se jako dynamický typ celý. | Podívejte se na příklady A, Ba 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">je připojen. Poznámka, že to platí také pro názvy vlastností, které byly zřetězeny ze zploštěného objektu, které označují cestu k vnořenému 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 |
Porozumění duálnímu 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 násobných událostí by činilo data bezvýznamnými. Pokud chcete zajistit, aby se pole objektů ukládaly as-is 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 jeden nebo více identifikátorů časové řady vnořen v objektech v poli, případně nebo, pokud je vlastnost časového razítka zdroje událostí vnořená, zpracovatelský modul ho rozdělí, aby vytvořil více událostí. Názvy vlastností, které jste zadali pro vaše TS ID a/nebo časové razítko, by se měly řídit výše uvedenými pravidly pro zploštění, a tedy budou označovat tvar vašeho JSON. Podívejte se na následující příklady a přečtěte si návod, jak vybrat vlastnost ID časové řady.
Příklad A
ID časové řady v kořeni objektu a časové razítko ve vnořené podobě.
ID časové řady prostředí :"id"
Časové razítko zdroje události :"values.time"
datová zátěž 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á značka | 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
Identifikátor 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á značka | 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álosti :"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á značka | id_string | datapoints_dynamic |
---|---|---|
2020-11-01T10:00:00.000Z |
800500054755 |
[{"value": 120},{"value":124}] |
Další kroky
- Vysvětlení omezení propustnosti prostředí