JSON biçimli örnek verileri Azure Veri Gezgini alma

Bu makalede JSON biçimli verileri Azure Veri Gezgini veritabanına nasıl alabileceğiniz gösterilmektedir. Basit ham ve eşlenmiş JSON örnekleriyle başlayacak, çok satırlı JSON'a devam edip diziler ve sözlükler içeren daha karmaşık JSON şemalarını ele alacağız. Örneklerde Kusto Sorgu Dili (KQL), C# veya Python kullanarak JSON biçimli verileri alma işlemi ayrıntılı olarak açıklanmaktadır.

Not

Üretim senaryolarında yönetim komutlarının kullanılmasını .ingest önermiyoruz. Bunun yerine bir veri bağlayıcısı kullanın veya Kusto istemci kitaplıklarından birini kullanarak program aracılığıyla veri alın.

Önkoşullar

  • Microsoft hesabı veya Microsoft Entra kullanıcı kimliği. Azure aboneliği gerekli değildir.
  • Azure Veri Gezgini kümesi ve veritabanı. Küme ve veritabanı oluşturma.

JSON biçimi

Azure Veri Gezgini iki JSON dosya biçimlerini destekler:

  • json: Satır ayrılmış JSON. Giriş verilerindeki her satırın tam olarak bir JSON kaydı vardır. Bu biçim açıklamaların ve tek tırnaklı özelliklerin ayrıştırılması destekler. Daha fazla bilgi için bkz. JSON Satırları.
  • multijson: Çok satırlı JSON. Ayrıştırıcı, satır ayırıcılarını yoksayar ve önceki konumdan geçerli bir JSON'un sonuna kadar bir kaydı okur.

Not

Alma sihirbazı kullanılarak alma işlemi yapılırken varsayılan biçim şeklindedir multijson. Biçim, çok satırlı JSON kayıtlarını ve JSON kayıtlarının dizilerini işleyebilir. Ayrıştırma hatasıyla karşılaşıldığında dosyanın tamamı atılır. Geçersiz JSON kayıtlarını yoksaymak için "Veri biçimi hatalarını yoksay" seçeneğini belirleyin. Bu seçenek biçimi json (JSON Satırları) olarak değiştirir.

JSON Çizgi biçimini ()json kullanıyorsanız, geçerli bir JSON kaydını temsil etmeyen satırlar ayrıştırma sırasında atlanır.

JSON biçimli verileri alma ve eşleme

JSON biçimli verilerin alımı, alma özelliğini kullanarak biçimi belirtmenizi gerektirir. JSON verilerinin alımı, JSON kaynak girişini hedef sütununa eşleyen eşleme gerektirir. Veri alırken özelliğini (önceden tanımlanmış eşleme için) alma özelliğiyle veya IngestionMappings özelliğiyle ingestionMappingReference kullanınIngestionMapping. Bu makalede ingestionMappingReference , alma için kullanılan tabloda önceden tanımlanmış olan alma özelliği kullanılır. Aşağıdaki örneklerde, JSON kayıtlarını ham veri olarak tek bir sütun tablosuna alarak başlayacağız. Ardından eşlemeyi kullanarak her özelliği eşlenen sütununa alacağız.

Basit JSON örneği

Aşağıdaki örnek düz yapıya sahip basit bir JSON'dır. Veriler, çeşitli cihazlar tarafından toplanan sıcaklık ve nem bilgilerine sahiptir. Her kayıt bir kimlik ve zaman damgası ile işaretlenir.

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

Ham JSON kayıtlarını alma

Bu örnekte, JSON kayıtlarını ham veri olarak tek bir sütun tablosuna alırsınız. Veri işleme, sorguları kullanma ve güncelleştirme ilkesi, veriler alındıktan sonra gerçekleştirilir.

Verileri ham JSON biçiminde almak için Kusto Sorgu Dili kullanın.

  1. https://dataexplorer.azure.com adresinde oturum açın.

  2. Küme ekle'yi seçin.

  3. Küme ekle iletişim kutusunda, biçiminde https://<ClusterName>.<Region>.kusto.windows.net/küme URL'nizi girin ve Ekle'yi seçin.

  4. Aşağıdaki komutu yapıştırın ve çalıştır'ı seçerek tabloyu oluşturun.

    .create table RawEvents (Event: dynamic)
    

    Bu sorgu, dinamik veri türünde tek Event bir sütuna sahip bir tablo oluşturur.

  5. JSON eşlemesini oluşturun.

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

    Bu komut bir eşleme oluşturur ve JSON kök yolunu $ sütuna eşler Event .

  6. Verileri tabloya RawEvents alın.

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

Eşlenen JSON kayıtlarını alma

Bu örnekte JSON kayıtlarını alırsınız. Her JSON özelliği tablodaki tek bir sütuna eşlenir.

  1. JSON giriş verilerine benzer bir şemayla yeni bir tablo oluşturun. Bu tabloyu aşağıdaki tüm örnekler ve alma komutları için kullanacağız.

    .create table Events (Time: datetime, Device: string, MessageId: string, Temperature: double, Humidity: double)
    
  2. JSON eşlemesini oluşturun.

    .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"}}]'
    

    Bu eşlemede, tablo şeması timestamp tarafından tanımlandığı gibi girdiler sütuna Time veri türleri olarak datetime alınacaktır.

  3. Verileri tabloya Events alın.

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

    'simple.json' dosyasında birkaç satırla ayrılmış JSON kaydı var. biçimi şeklindedir jsonve alma komutunda kullanılan eşleme oluşturduğunuz komuttur FlatEventMapping .

Çok satırlı JSON kayıtlarını alma

Bu örnekte, çok satırlı JSON kayıtlarını alırsınız. Her JSON özelliği tablodaki tek bir sütuna eşlenir. 'multilined.json' dosyasında birkaç girintili JSON kaydı var. Biçimi multijson , kayıtlarıN JSON yapısına göre okunmasını belirtir.

Verileri tabloya Events alın.

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

Diziler içeren JSON kayıtlarını alma

Dizi veri türleri, sıralı bir değer koleksiyonudur. JSON dizisinin alımı bir güncelleştirme ilkesi tarafından gerçekleştirilir. JSON, olduğu gibi bir ara tabloya alınmıştı. Güncelleştirme ilkesi tabloda önceden tanımlanmış bir işlev RawEvents çalıştırarak sonuçları hedef tabloya yeniden kaydeder. Aşağıdaki yapıya sahip verileri alacağız:

{
    "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 koleksiyonundaki her değerin records işlecini kullanarak mv-expand ayrı bir satır alması için koleksiyonunu genişleten bir işlev oluşturun. Tabloyu kaynak tablo RawEvents ve Events hedef tablo olarak kullanacağız.

    .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. İşlev tarafından alınan şema, hedef tablonun şemasıyla eşleşmelidir. Şemayı gözden geçirmek için işlecini kullanın getschema .

    EventRecordsExpand() | getschema
    
  3. Güncelleştirme ilkesini hedef tabloya ekleyin. Bu ilke, ara tablodaki yeni alınan veriler RawEvents üzerinde sorguyu otomatik olarak çalıştırır ve sonuçları tabloya Events alır. Ara tablonun kalıcı olmasını önlemek için sıfır bekletme ilkesi tanımlayın.

    .alter table Events policy update @'[{"Source": "RawEvents", "Query": "EventRecordsExpand()", "IsEnabled": "True"}]'
    
  4. Verileri tabloya RawEvents alın.

    .ingest into table RawEvents ('https://kustosamplefiles.blob.core.windows.net/jsonsamplefiles/array.json') with '{"format":"multijson", "ingestionMappingReference":"RawEventMapping"}'
    
  5. Tablodaki Events verileri gözden geçirin.

    Events