Bagikan melalui


Menyerap data sampel berformat JSON ke Azure Data Explorer

Artikel ini memperlihatkan kepada Anda cara menyerap data berformat JSON ke dalam database Azure Data Explorer. Anda akan mulai dengan contoh sederhana JSON mentah dan dipetakan, lanjutkan ke JSON multibaris, lalu mengatasi skema JSON yang lebih kompleks yang berisi array dan kamus. Contohnya merinci proses penyerapan data berformat JSON menggunakan Bahasa Kueri Kusto (KQL), C#, atau Python.

Catatan

Kami tidak merekomendasikan penggunaan .ingest perintah manajemen dalam skenario produksi. Sebagai gantinya, gunakan konektor data atau serap data secara terprogram menggunakan salah satu pustaka klien Kusto.

Prasyarat

  • Akun Microsoft atau identitas pengguna Microsoft Entra. Langganan Azure tidak diperlukan.
  • Kluster dan database Azure Data Explorer. Membuat kluster dan database.

Format JSON

Azure Data Explorer mendukung dua format file JSON:

  • json: JSON yang dipisahkan garis. Setiap baris dalam data input memiliki tepat satu rekaman JSON. Format ini mendukung penguraian komentar dan properti yang dikutip tunggal. Untuk informasi selengkapnya, lihat Baris JSON.
  • multijson: JSON multibaris. Pengurai mengabaikan pemisah baris dan membaca rekaman dari posisi sebelumnya ke akhir JSON yang valid.

Catatan

Saat menyerap menggunakan wizard penyerapan, format defaultnya adalah multijson. Format ini dapat menangani rekaman JSON multibaris dan array rekaman JSON. Ketika terjadi kesalahan penguraian, seluruh file akan dibuang. Untuk mengabaikan rekaman JSON yang tidak valid, pilih opsi untuk "Abaikan kesalahan format data.", yang akan mengalihkan format ke json (Baris JSON).

Jika Anda menggunakan format Baris JSON (json), baris yang tidak mewakili rekaman JSON yang valid dilewati selama penguraian.

Menyerap dan memetakan data berformat JSON

Penyerapan data berformat JSON mengharuskan Anda menentukan format menggunakan properti penyerapan. Penyerapan data JSON memerlukan pemetaan, yang memetakan entri sumber JSON ke kolom targetnya. Saat menyerap data, gunakan IngestionMapping properti dengan ingestionMappingReference properti penyerapan (untuk pemetaan yang telah ditentukan sebelumnya) atau propertinya IngestionMappings . Artikel ini akan menggunakan ingestionMappingReference properti penyerapan, yang telah ditentukan sebelumnya pada tabel yang digunakan untuk penyerapan. Dalam contoh di bawah ini, kita akan mulai dengan menyerap rekaman JSON sebagai data mentah ke satu tabel kolom. Kemudian kita akan menggunakan pemetaan untuk menyerap setiap properti ke kolom yang dipetakan.

Contoh JSON sederhana

Contoh berikut adalah JSON sederhana, dengan struktur datar. Data memiliki informasi suhu dan kelembaban, yang dikumpulkan oleh beberapa perangkat. Setiap rekaman ditandai dengan ID dan tanda waktu.

{
    "timestamp": "2019-05-02 15:23:50.0369439",
    "deviceId": "2945c8aa-f13e-4c48-4473-b81440bb5ca2",
    "messageId": "7f316225-839a-4593-92b5-1812949279b3",
    "temperature": 31.0301639051317,
    "humidity": 62.0791099602725
}

Menyerap catatan JSON mentah

Dalam contoh ini, Anda menyerap rekaman JSON sebagai data mentah ke satu tabel kolom. Manipulasi data, menggunakan kueri, dan kebijakan pembaruan dilakukan setelah data diserap.

Gunakan Bahasa Kueri Kusto untuk menyerap data dalam format JSON mentah.

  1. Masuk ke https://dataexplorer.azure.com.

  2. Pilih Tambahkan kluster.

  3. Dalam kotak dialog Tambahkan kluster , masukkan URL kluster Anda dalam formulir https://<ClusterName>.<Region>.kusto.windows.net/, lalu pilih Tambahkan.

  4. Tempel dalam perintah berikut, dan pilih Jalankan untuk membuat tabel.

    .create table RawEvents (Event: dynamic)
    

    Kueri ini membuat tabel dengan satu Event kolom dari jenis data dinamis .

  5. Buat pemetaan JSON.

    .create table RawEvents ingestion json mapping 'RawEventMapping' '[{"column":"Event","Properties":{"path":"$"}}]'
    

    Perintah ini membuat pemetaan, dan memetakan jalur $ akar JSON ke Event kolom.

  6. Serap data ke RawEvents dalam tabel.

    .ingest into table RawEvents ('https://kustosamplefiles.blob.core.windows.net/jsonsamplefiles/simple.json') with '{"format":"json", "ingestionMappingReference":"RawEventMapping"}'
    

Menyerap rekaman JSON yang dipetakan

Dalam contoh ini, Anda menyerap data rekaman JSON. Setiap properti JSON dipetakan ke satu kolom dalam tabel.

  1. Buat tabel baru, dengan skema serupa dengan data input JSON. Kita akan menggunakan tabel ini untuk semua contoh dan perintah penyerapan berikut.

    .create table Events (Time: datetime, Device: string, MessageId: string, Temperature: double, Humidity: double)
    
  2. Buat pemetaan JSON.

    .create table Events ingestion json mapping 'FlatEventMapping' '[{"column":"Time","Properties":{"path":"$.timestamp"}},{"column":"Device","Properties":{"path":"$.deviceId"}},{"column":"MessageId","Properties":{"path":"$.messageId"}},{"column":"Temperature","Properties":{"path":"$.temperature"}},{"column":"Humidity","Properties":{"path":"$.humidity"}}]'
    

    Dalam pemetaan ini, seperti yang ditentukan oleh skema tabel, timestamp entri akan diserap ke kolom Time sebagai datetime jenis data.

  3. Serap data ke Events dalam tabel.

    .ingest into table Events ('https://kustosamplefiles.blob.core.windows.net/jsonsamplefiles/simple.json') with '{"format":"json", "ingestionMappingReference":"FlatEventMapping"}'
    

    File 'simple.json' memiliki beberapa rekaman JSON yang dipisahkan baris. Formatnya adalah json, dan pemetaan yang digunakan dalam perintah penyerapan adalah yang FlatEventMapping Anda buat.

Menyerap rekaman JSON multibaris

Dalam contoh ini, Anda menyerap rekaman JSON multibaris. Setiap properti JSON dipetakan ke satu kolom dalam tabel. File 'multilined.json' memiliki beberapa rekaman JSON yang diindentasi. Format multijson menunjukkan untuk membaca rekaman berdasarkan struktur JSON.

Serap data ke Events dalam tabel.

.ingest into table Events ('https://kustosamplefiles.blob.core.windows.net/jsonsamplefiles/multilined.json') with '{"format":"multijson", "ingestionMappingReference":"FlatEventMapping"}'

Menyerap rekaman JSON yang berisi array

Jenis data array adalah kumpulan nilai yang diurutkan. Penyerapan array JSON dilakukan oleh kebijakan pembaruan. JSON diserap apa adanya ke tabel perantara. Kebijakan pembaruan menjalankan fungsi yang telah ditentukan sebelumnya pada RawEvents tabel, menyerap kembali hasilnya ke tabel target. Kami akan menyerap data dengan struktur berikut:

{
    "records":
    [
        {
            "timestamp": "2019-05-02 15:23:50.0000000",
            "deviceId": "ddbc1bf5-096f-42c0-a771-bc3dca77ac71",
            "messageId": "7f316225-839a-4593-92b5-1812949279b3",
            "temperature": 31.0301639051317,
            "humidity": 62.0791099602725
        },
        {
            "timestamp": "2019-05-02 15:23:51.0000000",
            "deviceId": "ddbc1bf5-096f-42c0-a771-bc3dca77ac71",
            "messageId": "57de2821-7581-40e4-861e-ea3bde102364",
            "temperature": 33.7529423105311,
            "humidity": 75.4787976739364
        }
    ]
}
  1. update policy Buat fungsi yang memperluas kumpulan records sehingga setiap nilai dalam koleksi menerima baris terpisah, menggunakan mv-expand operator . Kita akan menggunakan tabel RawEvents sebagai tabel sumber dan Events sebagai tabel target.

    .create function EventRecordsExpand() {
        RawEvents
        | mv-expand records = Event.records
        | project
            Time = todatetime(records["timestamp"]),
            Device = tostring(records["deviceId"]),
            MessageId = tostring(records["messageId"]),
            Temperature = todouble(records["temperature"]),
            Humidity = todouble(records["humidity"])
    }
    
  2. Skema yang diterima oleh fungsi harus cocok dengan skema tabel target. Gunakan getschema operator untuk meninjau skema.

    EventRecordsExpand() | getschema
    
  3. Tambahkan kebijakan pembaruan ke tabel target. Kebijakan ini akan secara otomatis menjalankan kueri pada data yang baru diserap dalam RawEvents tabel perantara dan menyerap hasilnya ke Events dalam tabel. Tentukan kebijakan retensi nol untuk menghindari pertahankan tabel perantara.

    .alter table Events policy update @'[{"Source": "RawEvents", "Query": "EventRecordsExpand()", "IsEnabled": "True"}]'
    
  4. Serap data ke RawEvents dalam tabel.

    .ingest into table RawEvents ('https://kustosamplefiles.blob.core.windows.net/jsonsamplefiles/array.json') with '{"format":"multijson", "ingestionMappingReference":"RawEventMapping"}'
    
  5. Tinjau data dalam Events tabel.

    Events