Dela via


Mata in JSON-formaterade exempeldata i Azure Data Explorer

Den här artikeln visar hur du matar in JSON-formaterade data i en Azure Data Explorer-databas. Du börjar med enkla exempel på rå och mappad JSON, fortsätter till flerkantade JSON och tar sedan itu med mer komplexa JSON-scheman som innehåller matriser och ordlistor. Exemplen beskriver processen för att mata in JSON-formaterade data med hjälp av Kusto-frågespråk (KQL), C#eller Python.

Anteckning

Vi rekommenderar inte att du använder .ingest hanteringskommandon i produktionsscenarier. Använd i stället en dataanslutningsapp eller programmatiskt mata in data med något av Kusto-klientbiblioteken.

Förutsättningar

  • Ett Microsoft-konto eller en Microsoft Entra användaridentitet. En Azure-prenumeration krävs inte.
  • Ett Azure Data Explorer-kluster och en databas. Skapa ett kluster och en databas.

JSON-formatet

Azure Data Explorer stöder två JSON-filformat:

  • json: Radavgränsad JSON. Varje rad i indata har exakt en JSON-post. Det här formatet stöder parsning av kommentarer och egenskaper med enkla citattecken. Mer information finns i JSON-rader.
  • multijson: Flerfodrad JSON. Parsern ignorerar radavgränsarna och läser en post från den tidigare positionen till slutet av en giltig JSON.

Anteckning

När du matar in med hjälp av inmatningsguiden är multijsonstandardformatet . Formatet kan hantera flerrads-JSON-poster och matriser med JSON-poster. När ett parsningsfel påträffas ignoreras hela filen. Om du vill ignorera ogiltiga JSON-poster väljer du alternativet "Ignorera dataformatfel.", som växlar formatet till json (JSON-rader).

Om du använder JSON Line-formatet (json) hoppas rader som inte representerar giltiga JSON-poster över under parsningen.

Mata in och mappa JSON-formaterade data

Inmatning av JSON-formaterade data kräver att du anger formatet med hjälp av inmatningsegenskapen. Inmatning av JSON-data kräver mappning, som mappar en JSON-källpost till målkolumnen. När du matar in data använder du IngestionMapping egenskapen med dess ingestionMappingReference (för en fördefinierad mappning) inmatningsegenskap eller dess IngestionMappings egenskap. Den här artikeln använder inmatningsegenskapen ingestionMappingReference , som är fördefinierad i tabellen som används för inmatning. I exemplen nedan börjar vi med att mata in JSON-poster som rådata till en tabell med en kolumn. Sedan använder vi mappningen för att mata in varje egenskap till den mappade kolumnen.

Enkelt JSON-exempel

Följande exempel är en enkel JSON med en platt struktur. Data har information om temperatur och luftfuktighet som samlas in av flera enheter. Varje post markeras med ett ID och en tidsstämpel.

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

Mata in råa JSON-poster

I det här exemplet matar du in JSON-poster som rådata till en tabell med en kolumn. Datamanipuleringen, med hjälp av frågor och uppdateringsprincipen görs när data har matats in.

Använd Kusto-frågespråk för att mata in data i ett rå-JSON-format.

  1. Logga in på https://dataexplorer.azure.com.

  2. Välj Lägg till kluster.

  3. I dialogrutan Lägg till kluster anger du kluster-URL:en i formuläret https://<ClusterName>.<Region>.kusto.windows.net/och väljer sedan Lägg till.

  4. Klistra in följande kommando och välj Kör för att skapa tabellen.

    .create table RawEvents (Event: dynamic)
    

    Den här frågan skapar en tabell med en enda Event kolumn av dynamisk datatyp.

  5. Skapa JSON-mappningen.

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

    Det här kommandot skapar en mappning och mappar JSON-rotsökvägen $ till Event kolumnen.

  6. Mata in data i tabellen RawEvents .

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

Mata in mappade JSON-poster

I det här exemplet matar du in JSON-postdata. Varje JSON-egenskap mappas till en enda kolumn i tabellen.

  1. Skapa en ny tabell med ett liknande schema som JSON-indata. Vi använder den här tabellen för alla följande exempel och inmatningskommandon.

    .create table Events (Time: datetime, Device: string, MessageId: string, Temperature: double, Humidity: double)
    
  2. Skapa JSON-mappningen.

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

    I den här mappningen, som definieras av tabellschemat, matas posterna timestamp in i kolumnen Time som datetime datatyper.

  3. Mata in data i tabellen Events .

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

    Filen "simple.json" har några radavgränsade JSON-poster. Formatet är json, och mappningen som används i inmatningskommandot är den FlatEventMapping du skapade.

Mata in flerkantade JSON-poster

I det här exemplet matar du in flerfodrade JSON-poster. Varje JSON-egenskap mappas till en enda kolumn i tabellen. Filen "multilined.json" har några indragna JSON-poster. Formatet multijson anger att poster ska läsas av JSON-strukturen.

Mata in data i tabellen Events .

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

Mata in JSON-poster som innehåller matriser

Matrisdatatyper är en ordnad samling värden. Inmatningen av en JSON-matris görs av en uppdateringsprincip. JSON matas in som den är till en mellanliggande tabell. En uppdateringsprincip kör en fördefinierad funktion i RawEvents tabellen och återesterar resultatet till måltabellen. Vi matar in data med följande struktur:

{
    "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. Skapa en update policy funktion som expanderar samlingen av records så att varje värde i samlingen får en separat rad med operatorn mv-expand . Vi använder tabellen RawEvents som en källtabell och Events som en måltabell.

    .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. Schemat som tas emot av funktionen måste matcha schemat för måltabellen. Använd getschema operatorn för att granska schemat.

    EventRecordsExpand() | getschema
    
  3. Lägg till uppdateringsprincipen i måltabellen. Den här principen kör automatiskt frågan på nyligen inmatade data i den RawEvents mellanliggande tabellen och matar in resultatet i Events tabellen. Definiera en nollkvarhållningsprincip för att undvika att den mellanliggande tabellen bevaras.

    .alter table Events policy update @'[{"Source": "RawEvents", "Query": "EventRecordsExpand()", "IsEnabled": "True"}]'
    
  4. Mata in data i tabellen RawEvents .

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

    Events