Delen via


Voorbeeldgegevens in JSON-indeling opnemen in Azure Data Explorer

In dit artikel wordt beschreven hoe u met JSON opgemaakte gegevens opneemt in een Azure Data Explorer-database. U begint met eenvoudige voorbeelden van onbewerkte en toegewezen JSON, gaat verder met JSON met meerdere lijnen en pakt vervolgens complexere JSON-schema's met matrices en woordenlijsten aan. De voorbeelden beschrijven het proces van het opnemen van met JSON opgemaakte gegevens met behulp van Kusto-querytaal (KQL), C# of Python.

Notitie

Het wordt afgeraden beheeropdrachten te gebruiken .ingest in productiescenario's. Gebruik in plaats daarvan een gegevensconnector of neem gegevens programmatisch op met behulp van een van de Kusto-clientbibliotheken.

Vereisten

  • Een Microsoft-account of een Microsoft Entra gebruikersidentiteit. Een Azure-abonnement is niet vereist.
  • Een Azure Data Explorer-cluster en -database. Maak een cluster en database.

De JSON-indeling

Azure Data Explorer ondersteunt twee JSON-bestandsindelingen:

  • json: regel gescheiden JSON. Elke regel in de invoergegevens heeft precies één JSON-record. Deze indeling ondersteunt het parseren van opmerkingen en eigenschappen met één aanhalingsteken. Zie JSON-lijnen voor meer informatie.
  • multijson: Multi-lined JSON. De parser negeert de regelscheidingstekens en leest een record van de vorige positie tot het einde van een geldige JSON.

Notitie

Bij opname met behulp van de wizard Voor opnemen is multijsonde standaardindeling . De indeling kan JSON-records met meerdere regels en matrices van JSON-records verwerken. Wanneer er een parseerfout optreedt, wordt het hele bestand verwijderd. Als u ongeldige JSON-records wilt negeren, selecteert u de optie 'Fouten in gegevensindeling negeren', waarmee de indeling wordt overgeschakeld naar json (JSON-regels).

Als u de JSON Line-indeling () gebruikt,json worden regels die geen geldige JSON-records vertegenwoordigen, overgeslagen tijdens het parseren.

Met JSON opgemaakte gegevens opnemen en toewijzen

Voor opname van gegevens in JSON-indeling moet u de indeling opgeven met behulp van de eigenschap Opname. Voor opname van JSON-gegevens is toewijzing vereist, waardoor een JSON-bronvermelding wordt toegewezen aan de doelkolom. Gebruik bij het opnemen van gegevens de eigenschap met ingestionMappingReference de IngestionMapping bijbehorende opnameeigenschap (voor een vooraf gedefinieerde toewijzing) of de bijbehorende IngestionMappings eigenschap. In dit artikel wordt gebruikgemaakt van de ingestionMappingReference opnameeigenschap, die vooraf is gedefinieerd voor de tabel die wordt gebruikt voor opname. In de onderstaande voorbeelden beginnen we met het opnemen van JSON-records als onbewerkte gegevens in een tabel met één kolom. Vervolgens gebruiken we de toewijzing om elke eigenschap op te nemen in de toegewezen kolom.

Eenvoudig JSON-voorbeeld

Het volgende voorbeeld is een eenvoudige JSON met een platte structuur. De gegevens bevatten informatie over temperatuur en vochtigheid, verzameld door verschillende apparaten. Elke record is gemarkeerd met een id en tijdstempel.

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

Onbewerkte JSON-records opnemen

In dit voorbeeld neemt u JSON-records als onbewerkte gegevens op in een tabel met één kolom. Het bewerken van gegevens, het gebruik van query's en het updatebeleid wordt uitgevoerd nadat de gegevens zijn opgenomen.

Gebruik Kusto-querytaal om gegevens op te nemen in een onbewerkte JSON-indeling.

  1. Meld u aan bij https://dataexplorer.azure.com.

  2. Selecteer Add Cluster.

  3. Voer in het dialoogvenster Cluster toevoegen de URL van uw cluster in de vorm https://<ClusterName>.<Region>.kusto.windows.net/in en selecteer vervolgens Toevoegen.

  4. Plak de volgende opdracht en selecteer Uitvoeren om de tabel te maken.

    .create table RawEvents (Event: dynamic)
    

    Met deze query maakt u een tabel met één Event kolom van een dynamisch gegevenstype.

  5. Maak de JSON-toewijzing.

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

    Met deze opdracht maakt u een toewijzing en wijst u het JSON-hoofdpad $ toe aan de Event kolom.

  6. Gegevens opnemen in de RawEvents tabel.

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

Toegewezen JSON-records opnemen

In dit voorbeeld neemt u JSON-recordgegevens op. Elke JSON-eigenschap wordt toegewezen aan één kolom in de tabel.

  1. Maak een nieuwe tabel met een schema dat vergelijkbaar is met de JSON-invoergegevens. We gebruiken deze tabel voor alle volgende voorbeelden en opnemen van opdrachten.

    .create table Events (Time: datetime, Device: string, MessageId: string, Temperature: double, Humidity: double)
    
  2. Maak de JSON-toewijzing.

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

    In deze toewijzing, zoals gedefinieerd door het tabelschema, worden de timestamp vermeldingen opgenomen in de kolom Time als datetime gegevenstypen.

  3. Gegevens opnemen in de Events tabel.

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

    Het bestand 'simple.json' heeft enkele regel gescheiden JSON-records. De indeling is json, en de toewijzing die wordt gebruikt in de opdracht opnemen is de FlatEventMapping die u hebt gemaakt.

Multi-lined JSON-records opnemen

In dit voorbeeld neemt u JSON-records met meerdere regels op. Elke JSON-eigenschap wordt toegewezen aan één kolom in de tabel. Het bestand 'multilined.json' heeft enkele ingesprongen JSON-records. De indeling multijson geeft aan dat records moeten worden gelezen door de JSON-structuur.

Gegevens opnemen in de Events tabel.

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

JSON-records met matrices opnemen

Matrixgegevenstypen zijn een geordende verzameling waarden. Opname van een JSON-matrix wordt uitgevoerd door een updatebeleid. De JSON wordt als zodanig opgenomen in een tussenliggende tabel. Een updatebeleid voert een vooraf gedefinieerde functie uit op de RawEvents tabel, waarbij de resultaten opnieuw worden opgenomen in de doeltabel. We nemen gegevens op met de volgende structuur:

{
    "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. Maak een update policy functie waarmee de verzameling van records wordt uitgebreid, zodat elke waarde in de verzameling een afzonderlijke rij ontvangt met behulp van de mv-expand operator. We gebruiken de tabel RawEvents als brontabel en Events als doeltabel.

    .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. Het schema dat door de functie wordt ontvangen, moet overeenkomen met het schema van de doeltabel. Gebruik getschema de operator om het schema te controleren.

    EventRecordsExpand() | getschema
    
  3. Voeg het updatebeleid toe aan de doeltabel. Met dit beleid wordt de query automatisch uitgevoerd op alle nieuw opgenomen gegevens in de RawEvents tussenliggende tabel en worden de resultaten opgenomen in de Events tabel. Definieer een nulretentiebeleid om te voorkomen dat de tussenliggende tabel behouden blijft.

    .alter table Events policy update @'[{"Source": "RawEvents", "Query": "EventRecordsExpand()", "IsEnabled": "True"}]'
    
  4. Gegevens opnemen in de RawEvents tabel.

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

    Events