JSON formátumú mintaadatok betöltése az Azure Data Explorer

Ez a cikk bemutatja, hogyan lehet JSON formátumú adatokat beolvasni egy Azure Data Explorer-adatbázisba. Első lépésként egyszerű példákat fog találni a nyers és leképezett JSON-ra, továbblép a többsoros JSON-ra, majd összetettebb, tömböket és szótárakat tartalmazó JSON-sémákkal foglalkozik. A példák részletesen ismertetik a JSON formátumú adatok Kusto lekérdezésnyelv (KQL), C# vagy Python használatával történő betöltésének folyamatát.

Megjegyzés

Éles forgatókönyvekben nem javasoljuk a felügyeleti parancsok használatát .ingest . Ehelyett használjon adatösszekötőt , vagy programozott módon betöltse az adatokat a Kusto-ügyfélkódtárak egyikével.

Előfeltételek

A JSON formátum

Az Azure Data Explorer két JSON-fájlformátumot támogat:

  • json: Vonallal elválasztott JSON. A bemeneti adatok minden sora pontosan egy JSON-rekorddal rendelkezik. Ez a formátum támogatja a megjegyzések és az egy idézőjeles tulajdonságok elemzését. További információ: JSON Lines.
  • multijson: Többsoros JSON. Az elemző figyelmen kívül hagyja a sorelválasztókat, és beolvas egy rekordot az előző pozíciótól az érvényes JSON végéig.

Megjegyzés

A betöltési varázslóval történő betöltéskor az alapértelmezett formátum a multijson. A formátum képes többsoros JSON-rekordok és JSON-rekordok tömbjeinek kezelésére. Elemzési hiba esetén a teljes fájl el lesz vetve. Az érvénytelen JSON-rekordok figyelmen kívül hagyásához válassza az "Adatformátum-hibák figyelmen kívül hagyása" lehetőséget, amely a formátumot (JSON-sorok) értékre json váltja.

Ha JSON-sorformátumot (json) használ, az elemzés során a nem érvényes JSON-rekordokat nem képviselő vonalak kimaradnak.

JSON formátumú adatok betöltése és leképezése

A JSON formátumú adatok betöltéséhez meg kell adnia a formátumot a betöltési tulajdonság használatával. A JSON-adatok betöltéséhez leképezésre van szükség, amely leképez egy JSON-forrásbejegyzést a céloszlopra. Adatok betöltésekor használja a tulajdonságot annak IngestionMappingingestionMappingReference (előre meghatározott leképezéshez) betöltési tulajdonságával vagy tulajdonságával IngestionMappings . Ez a cikk a ingestionMappingReference betöltéshez használt táblában előre definiált betöltési tulajdonságot fogja használni. Az alábbi példákban a JSON-rekordok nyers adatként való betöltésével kezdjük egy oszloptáblába. Ezután a leképezés használatával betöltjük az egyes tulajdonságokat a leképezett oszlopba.

Egyszerű JSON-példa

Az alábbi példa egy egyszerű JSON, lapos szerkezettel. Az adatok hőmérsékletre és páratartalomra vonatkozó információkat tartalmaznak, amelyeket több eszköz gyűjtött össze. Minden rekord azonosítóval és időbélyeggel van megjelölve.

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

Nyers JSON-rekordok betöltése

Ebben a példában a JSON-rekordokat nyers adatként kell feldolgozni egyetlen oszloptáblába. Az adatok kezelése, a lekérdezések használata és a frissítési szabályzat az adatok betöltése után történik.

A Kusto lekérdezésnyelv használatával nyers JSON formátumban betölthet adatokat.

  1. Jelentkezzen be itt: https://dataexplorer.azure.com.

  2. Válassza a Fürt hozzáadása lehetőséget.

  3. A Fürt hozzáadása párbeszédpanelen adja meg a fürt URL-címét az űrlapon https://<ClusterName>.<Region>.kusto.windows.net/, majd válassza a Hozzáadás lehetőséget.

  4. Illessze be a következő parancsot, és válassza a Futtatás lehetőséget a tábla létrehozásához.

    .create table RawEvents (Event: dynamic)
    

    Ez a lekérdezés egy dinamikus adattípusú Event egyetlen oszloppal rendelkező táblát hoz létre.

  5. Hozza létre a JSON-megfeleltetést.

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

    Ez a parancs létrehoz egy leképezést, és leképezi a JSON gyökérútvonalát $ az Event oszlopra.

  6. Adatok betöltése a RawEvents táblába.

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

Leképezett JSON-rekordok betöltése

Ebben a példában a JSON-rekordok adatait fogja betöltésre. Minden JSON-tulajdonság a tábla egyetlen oszlopára van leképezve.

  1. Hozzon létre egy új táblát a JSON bemeneti adataihoz hasonló sémával. Ezt a táblázatot az alábbi példákhoz és betöltési parancsokhoz fogjuk használni.

    .create table Events (Time: datetime, Device: string, MessageId: string, Temperature: double, Humidity: double)
    
  2. Hozza létre a JSON-megfeleltetést.

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

    Ebben a leképezésben a táblaséma által meghatározott módon a timestamp bejegyzések adattípusként datetime lesznek betöltve az oszlopbaTime.

  3. Adatok betöltése a Events táblába.

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

    A "simple.json" fájl néhány sorra tagolt JSON-rekordot használ. A formátum a , jsonés a betöltési parancsban használt leképezés az FlatEventMapping Ön által létrehozott.

Többsoros JSON-rekordok betöltése

Ebben a példában többsoros JSON-rekordokat fog beszedni. Minden JSON-tulajdonság a tábla egyetlen oszlopára van leképezve. A multilined.json fájlban néhány behúzott JSON-rekord található. A formátum multijson azt jelzi, hogy a rekordok JSON-struktúra szerint vannak beolvasva.

Adatok betöltése a Events táblába.

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

Tömböket tartalmazó JSON-rekordok betöltése

A tömb adattípusok értékek rendezett gyűjteményei. A JSON-tömbök betöltése frissítési szabályzattal történik. A JSON egy köztes táblába van betöltve. A frissítési szabályzat egy előre definiált függvényt futtat a RawEvents táblán, és az eredményeket a céltáblába betölti. Az adatokat a következő struktúrával fogjuk betölteni:

{
    "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. Hozzon létre egy függvényt update policy , amely kibontja a gyűjteményét records , hogy a gyűjtemény minden értéke külön sort kapjon az mv-expand operátor használatával. A táblát RawEvents forrástáblaként és Events céltáblaként fogjuk használni.

    .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. A függvény által fogadott sémának meg kell egyeznie a céltábla sémájának. A séma áttekintéséhez használja getschema az operátort.

    EventRecordsExpand() | getschema
    
  3. Adja hozzá a frissítési szabályzatot a céltáblához. Ez a szabályzat automatikusan futtatja a lekérdezést a köztes táblában RawEvents újonnan betöltött adatokon, és betölti az eredményeket a Events táblába. Adjon meg egy zéró adatmegőrzési szabályzatot a köztes tábla megőrzésének elkerülése érdekében.

    .alter table Events policy update @'[{"Source": "RawEvents", "Query": "EventRecordsExpand()", "IsEnabled": "True"}]'
    
  4. Adatok betöltése a RawEvents táblába.

    .ingest into table RawEvents ('https://kustosamplefiles.blob.core.windows.net/jsonsamplefiles/array.json') with '{"format":"multijson", "ingestionMappingReference":"RawEventMapping"}'
    
  5. Tekintse át a Events táblázatban szereplő adatokat.

    Events