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