Zplošťování, uvozování a zpracování polí JSON

Poznámka:

Služba Time Series Přehledy (TSI) už nebude podporována po březnu 2025. Zvažte migraci stávajících prostředí TSI 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 Přehledy 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 Přehledy 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 Přehledy 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.Longnebo $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}]

Další kroky

  • Vysvětlení omezení propustnosti vašeho prostředí