JSON-egybesimítás, escape-karaktersorozat és tömbkezelés

Megjegyzés:

A Time Series Elemzések (TSI) szolgáltatás 2025 márciusa után már nem támogatott. Fontolja meg a meglévő TSI-környezetek migrálását alternatív megoldásokba a lehető leghamarabb. Az elavulással és a migrálással kapcsolatos további információkért tekintse meg dokumentációnkat.

Az Azure Time Series Elemzések Gen2-környezet dinamikusan hozza létre a meleg és hideg tárolók oszlopait egy adott elnevezési konvenciók alapján. Egy esemény betöltésekor a rendszer szabályokat alkalmaz a JSON hasznos adataira és a tulajdonságnevekre. Ezek közé tartozik bizonyos speciális karakterek eltávolítása és a beágyazott JSON-objektumok simítása. Fontos ismerni ezeket a szabályokat, hogy tisztában legyen azzal, hogy a JSON alakja hogyan befolyásolja az események tárolását és lekérését. A szabályok teljes listáját az alábbi táblázatban találja. Az A > B példák azt is bemutatják, hogyan lehet hatékonyan több idősort kötegeltíteni egy tömbben.

Fontos

Szabály Például szolgáló JSON Idősorkifejezés szintaxisa Tulajdonságoszlop neve a Parquetben
Az Azure Time Series Elemzések Gen2 adattípus az oszlopnév végéhez "_<dataType>" néven van hozzáfűzve "type": "Accumulated Heat" $event.type.String type_string
Az eseményforrás időbélyeg tulajdonsága az Azure Time Series Elemzések Gen2-ben lesz mentve "időbélyegként" a tárolóban, és az UTC-ben tárolt érték. Az eseményforrás(ok) időbélyeg-tulajdonságát testre szabhatja a megoldás igényeinek megfelelően, de a meleg és hideg tárolóban az oszlop neve "időbélyeg". Az eseményforrás időbélyegének nem minősülő egyéb datetime JSON-tulajdonságokat a rendszer a fenti szabályban említett "_datetime" oszlopnévvel menti. "ts": "2020-03-19 14:40:38.318" $event.$ts timestamp
A speciális karaktereket tartalmazó JSON-tulajdonságnevek. [ \ és ' a megmenekült segítségével ... és > "id.wasp": "6A3090FD337DE6B" $event['id.wasp'].String ['id.wasp']_string
A [] és a benne lévő idézőjelek és fordított perjelek további menekülési lehetőségeket is magában foglalnak. A rendszer egyetlen idézőjelet \' néven ír, a fordított perjel pedig \\ "Foo's Law Value": "17.139999389648" $event['Foo\'s Law Value'].Double ['Foo\'s Law Value']_double
A beágyazott JSON-objektumok elválasztóként egy ponttal vannak elválasztóként összeolvasztva. Legfeljebb 10 szint beágyazása támogatott. "series": {"value" : 316 } $event.series.value.Long, $event['series']['value'].Long vagy $event.series['value'].Long series.value_long
A primitív típusú tömbök dinamikus típusként vannak tárolva "values": [154, 149, 147] A dinamikus típusok csak a GetEvents API-val kérhetők le values_dynamic
Az objektumokat tartalmazó tömböknek az objektum tartalmától függően két viselkedésük van: Ha a TS-azonosító(k) vagy az időbélyeg tulajdonság(ok) a tömb objektumai között vannak, a tömb nem lesz iktatott, így a kezdeti JSON-hasznos adat több eseményt hoz létre. Ez lehetővé teszi, hogy több eseményt kötegeljen egy JSON-struktúrába. A tömbhöz társviszonyban álló legfelső szintű tulajdonságokat a rendszer minden nem regisztrált objektummal menti. Ha a TS-azonosító(k) és az időbélyegek nincsenek a tömbben, a rendszer egészben dinamikus típusként menti. Lásd az alábbi A, B és C példákat
A vegyes elemeket tartalmazó tömbök nem lapulnak. "values": ["foo", {"bar" : 149}, 147] A dinamikus típusok csak a GetEvents API-val kérhetők le values_dynamic
A JSON tulajdonságnévkorlát 512 karakter. Ha a név meghaladja az 512 karaktert, akkor a program 512 karakterre csonkolja, és hozzáfűzi a "_<'hashCode"> karaktert. Vegye figyelembe , hogy ez azokra a tulajdonságnevekre is vonatkozik, amelyeket összefűztek az objektumok összesimított objektumából, és beágyazott objektum elérési útját jelölik. "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

A tömbök kettős viselkedésének ismertetése

Az objektumtömbök vagy egészben lesznek tárolva, vagy több eseményre lesznek felosztva az adatok modellezésétől függően. Így tömb használatával kötegelheti az eseményeket, és elkerülheti a gyökérobjektum szintjén definiált telemetriai tulajdonságok ismétlődését. A kötegelés előnyös lehet, mivel kevesebb Event Hubs- vagy IoT Hub-üzenetet eredményez.

Bizonyos esetekben azonban az objektumokat tartalmazó tömbök csak más értékek kontextusában értelmezhetők. Több esemény létrehozása értelmetlenné tenné az adatokat. Annak érdekében, hogy az objektumok tömbje dinamikus típusként legyen tárolva, kövesse az alábbi adatmodellezési útmutatót, és tekintse meg a C példát

Megtudhatja, hogy az objektumtömböm több eseményt hoz-e létre

Ha egy vagy több time series ID propert(ies) egy tömb objektumaiba van ágyazva, vagy ha az eseményforrás időbélyeg tulajdonsága beágyazott, a betöltési motor felosztja azt, hogy több eseményt hozzon létre. A TS-azonosítóhoz és/vagy időbélyeghez megadott tulajdonságneveknek a fenti simítási szabályokat kell követniük, ezért a JSON alakját jelzik. Tekintse meg az alábbi példákat, és tekintse meg a Time Series ID tulajdonság kiválasztásának útmutatóját.

A példa

Idősor azonosítója az objektum gyökerénél és a beágyazott időbélyegnél
Környezeti idősor azonosítója:"id"
Eseményforrás időbélyege:"values.time"
JSON hasznos adat:

[
    {
        "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
            }
        ]
    }
]

Eredmény: Parquet-fájl:
A fenti konfiguráció és hasznos adatok három oszlopot és négy eseményt hoznak létre

timestamp 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

B példa

Összetett idősor azonosítója egy beágyazott tulajdonsággal
Környezeti idősor azonosítója:"plantId" és "telemetry.tagId"
Eseményforrás időbélyege:"timestamp"
JSON hasznos adat:

[
    {
        "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
            }
        ]
    }
]

Eredmény: Parquet-fájl:
A fenti konfiguráció és hasznos adatok négy oszlopot és hat eseményt hoznak létre

timestamp 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

C példa

Az idősor azonosítója és az időbélyeg az objektum gyökérkönyvtárában található
Környezeti idősor azonosítója:"id"
Eseményforrás időbélyege:"timestamp"
JSON hasznos adat:

{
    "id": "800500054755",
    "timestamp": "2020-11-01T10:00:00.000Z",
    "datapoints": [{
            "value": 120
        },
        {
            "value": 124
        }
    ]
}

Eredmény: Parquet-fájl:
A fenti konfiguráció és hasznos adatok három oszlopot és egy eseményt hoznak létre

timestamp id_string datapoints_dynamic
2020-11-01T10:00:00.000Z 800500054755 [{"value": 120},{"value":124}]

További lépések