Aracılığıyla paylaş


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 geçecek ve ardından dizileri ve sözlükleri 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 gerekmez.
  • Azure Veri Gezgini kümesi ve veritabanı. Küme ve veritabanı oluşturma.

JSON biçimi

Azure Veri Gezgini iki JSON dosya biçimi destekler:

  • json: Satırla 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 olan bir kaydı okur.

Not

Veri alma deneyimi kullanılarak alma işlemi yapılırken varsayılan biçim olurmultijson. Biçimi, ç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, biçimi (JSON Satırları) olarak değiştirecek json olan "Veri biçimi hatalarını yoksay" seçeneğini belirleyin.

JSON Çizgi biçimini ()json kullanıyorsanız, ayrıştırma sırasında geçerli bir JSON kaydını temsil etmeyen satırlar 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 bir 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 ve güncelleştirme ilkesi kullanılarak 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 oturumu 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ı verilerini 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. Aşağıdaki tüm örnekler ve alma komutları için bu tabloyu 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ı tarafından tanımlandığı gibi, timestamp girdiler sütuna Time veri türleri olarak datetime alını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, jsonalma komutunda kullanılan eşleme ise oluşturduğunuz biçimdir 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 , JSON yapısına göre kayıtların 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 yapılır. JSON bir ara tabloya olduğu gibi alınır. 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 koleksiyondaki records her değerin 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