Perataan, Pelolosan, dan Penanganan Array JSON
Catatan
Layanan Time Series Insights (TSI) tidak akan lagi didukung setelah Maret 2025. Pertimbangkan untuk memigrasikan lingkungan TSI yang ada ke solusi alternatif sesegera mungkin. Untuk informasi selengkapnya tentang penghentian dan migrasi, kunjungi dokumentasi kami.
Lingkungan Azure Time Series Insights Gen2 Anda akan secara dinamis membuat kolom penyimpanan yang hangat dan dingin, mengikuti serangkaian konvensi penamaan tertentu. Ketika suatu kejadian diserap, serangkaian aturan diterapkan ke payload JSON dan nama properti. Ini termasuk pelepasan karakter khusus tertentu dan perataan objek JSON bertumpuk. Penting untuk mengetahui aturan ini sehingga Anda memahami bagaimana bentuk JSON akan memengaruhi bagaimana kejadian disimpan dan dikueri. Lihat tabel di bawah ini untuk daftar lengkap aturan. Contoh A & B juga menunjukkan bagaimana Anda dapat membuat batch atas beberapa seri waktu secara efisien dalam sebuah array.
Penting
- Tinjau aturan di bawah sebelum memilih properti ID Time Series dan/atau properti tanda waktu sumber kejadian. Jika ID TS atau tanda waktu berada dalam objek bertumpuk atau memiliki satu atau beberapa karakter khusus di bawah ini, penting untuk memastikan bahwa nama properti yang diberikan sesuai dengan nama kolom setelah aturan penyerapan diterapkan. Lihat contoh B di bawah ini.
Aturan | Contoh JSON | Sintaks Ekspresi Time Series | Nama kolom properti di Parquet |
---|---|---|---|
Jenis data Azure Time Series Insights Gen2 ditambahkan ke akhir nama kolom Anda sebagai "_<dataType>" | "type": "Accumulated Heat" |
$event.type.String |
type_string |
Properti tanda waktu sumber kejadian akan disimpan di Azure Time Series Insights Gen2 sebagai “tanda waktu” di penyimpanan, dan nilainya disimpan di UTC. Anda dapat menyesuaikan properti tanda waktu sumber kejadian untuk memenuhi kebutuhan solusi Anda, tetapi nama kolom dalam penyimpanan hangat dan dingin adalah "tanda waktu". Properti JSON tanggalwaktu lain yang bukan tanda waktu sumber kejadian akan disimpan dengan "_datetime" dalam nama kolom, seperti yang disebutkan dalam aturan di atas. | "ts": "2020-03-19 14:40:38.318" |
$event.$ts |
timestamp |
Nama properti JSON yang menyertakan karakter khusus. [ \ dan ' diloloskan menggunakan [' dan '] | "id.wasp": "6A3090FD337DE6B" |
$event['id.wasp'].String |
['id.wasp']_string |
Di dalam [' dan '] ada pelepasan lain dari tanda petik tunggal dan garis miring terbalik. Kutipan tunggal akan ditulis sebagai \' dan garis miring terbalik akan ditulis sebagai \\ | "Foo's Law Value": "17.139999389648" |
$event['Foo\'s Law Value'].Double |
['Foo\'s Law Value']_double |
Objek JSON bertumpuk diratakan dengan titik sebagai pemisah. Menumpuk hingga 10 tingkat didukung. | "series": {"value" : 316 } |
$event.series.value.Long , $event['series']['value'].Long atau $event.series['value'].Long |
series.value_long |
Array jenis primitif disimpan sebagai jenis Dinamis | "values": [154, 149, 147] |
Jenis dinamis hanya dapat diambil melalui API GetEvents | values_dynamic |
Array yang berisi objek memiliki dua perilaku yang tergantung pada konten objek: Jika ID TS atau properti tanda waktu berada di dalam objek di array, array akan dibuka sehingga payload JSON awal menghasilkan beberapa kejadian. Ini memungkinkan Anda membuat batch atas beberapa kejadian ke dalam satu struktur JSON. Properti tingkat atas apa pun yang merupakan peer terhadap array akan disimpan dengan setiap objek yang dibuka. Jika ID TS dan tanda waktu Anda tidak berada dalam array, ID tersebut akan disimpan utuh sebagai jenis Dinamis. | Lihat contoh A, B, and C di bawah ini | ||
Array yang berisi elemen campuran tidak diratakan. | "values": ["foo", {"bar" : 149}, 147] |
Jenis dinamis hanya dapat diambil melalui API GetEvents | values_dynamic |
512 karakter adalah batas nama properti JSON. Jika nama melebihi 512 karakter, nama akan dipotong menjadi 512 dan '_<'hashCode'>' ditambahkan. Perhatikan bahwa ini juga berlaku untuk nama properti yang telah digabungkan dari objek yang diratakan, yang menunjukkan jalur objek bertumpuk. | "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 |
Memahami perilaku ganda untuk array
Array dari objek akan disimpan secara keseluruhan atau dibagi menjadi beberapa kejadian, tergantung bagaimana Anda memodelkan data Anda. Ini memungkinkan Anda menggunakan array untuk membuat batch atas beberaa kejadian, dan menghindari pengulangan properti telemetri yang ditentukan pada tingkat objek akar. Pembuatan batch mungkin menguntungkan karena menghasilkan lebih sedikit Pusat Aktivitas atau pesan IoT Hub yang dikirim.
Namun, dalam beberapa kasus, array yang berisi objek hanya memiliki makna dalam konteks nilai lain. Membuat beberapa kejadian akan menyebabkan data tidak berarti. Untuk memastikan bahwa array objek disimpan apa adanya sebagai jenis dinamis, ikuti panduan pemodelan data di bawah ini dan lihat Contoh C
Cara mengetahui apakah array objek saya akan menghasilkan beberapa kejadian
Jika satu atau beberapa properti ID Time Series Anda ditumpuk di dalam objek di array, atau jika properti tanda waktu sumber kejadian Anda bertumpuk, mesin penyerapan akan membaginya untuk membuat beberapa kejadian. Nama properti yang diberikan untuk ID TS dan/atau tanda waktu Anda harus mengikuti aturan perataan di atas, dan karena itu akan menunjukkan bentuk JSON Anda. Lihat contoh di bawah ini, dan lihat panduan tentang cara memilih properti ID Time Series.
Contoh A
ID Deret Waktu di akar objek dan tanda waktu berlapis
ID Rangkaian Waktu Lingkungan:"id"
Tanda waktu sumber peristiwa:"values.time"
Payload 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
}
]
}
]
Hasil dalam file Parquet:
Konfigurasi dan payload di atas akan menghasilkan tiga kolom dan empat kejadian
rentang waktu | 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 |
Contoh B
ID Rangkaian Waktu Komposit dengan satu properti berlapis
ID Rangkaian Waktu Lingkungan:"plantId"
dan "telemetry.tagId"
Tanda waktu sumber peristiwa:"timestamp"
Payload 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
}
]
}
]
Hasil dalam file Parquet:
Konfigurasi dan payload di atas akan menghasilkan empat kolom dan enam kejadian
rentang waktu | 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 |
Contoh C
ID Time Series dan tanda waktu berada di akar objek
ID Rangkaian Waktu Lingkungan:"id"
Tanda waktu sumber peristiwa:"timestamp"
Payload JSON:
{
"id": "800500054755",
"timestamp": "2020-11-01T10:00:00.000Z",
"datapoints": [{
"value": 120
},
{
"value": 124
}
]
}
Hasil dalam file Parquet:
Konfigurasi dan payload di atas akan menghasilkan tiga kolom dan satu kejadian
rentang waktu | id_string | datapoints_dynamic |
---|---|---|
2020-11-01T10:00:00.000Z |
800500054755 |
[{"value": 120},{"value":124}] |
Langkah berikutnya
- Memahami batasan throughput lingkungan Anda