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
- Tekintse át az alábbi szabályokat, mielőtt kiválaszt egy Time Series ID tulajdonságot és/vagy az eseményforrás időbélyeg-beállítását(ies). Ha a TS-azonosító vagy az időbélyeg egy beágyazott objektumon belül van, vagy egy vagy több speciális karakterrel rendelkezik, fontos gondoskodni arról, hogy a megadott tulajdonságnév megegyezik az oszlop nevével a betöltési szabályok alkalmazása után . Lásd az alábbi B példát.
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
- A környezet átviteli sebességére vonatkozó korlátozások ismertetése