Erfassen von Beispieldaten im JSON-Format in Azure Data Explorer

In diesem Artikel wird das Erfassen von Daten im JSON-Format in einer Azure Data Explorer-Datenbank veranschaulicht. Sie beginnen mit einfachen Beispielen für unformatierten und zugeordneten JSON-Code, fahren dann mit mehrzeiligem JSON-Code fort und beschäftigen sich schließlich mit komplexeren JSON-Schemas, die Arrays und Wörterbücher enthalten. Die Beispiele beschreiben den Prozess der Erfassung von JSON-formatierten Daten mithilfe von Kusto-Abfragesprache (KQL), C# oder Python.

Hinweis

Die Verwendung von .ingest Verwaltungsbefehlen in Produktionsszenarien wird nicht empfohlen. Verwenden Sie stattdessen einen Datenconnector , oder erfassen Sie Daten programmgesteuert mithilfe einer der Kusto-Clientbibliotheken.

Voraussetzungen

  • Ein Microsoft-Konto oder eine Microsoft Entra Benutzeridentität. Ein Azure-Abonnement ist nicht erforderlich.
  • Schnellstart: Erstellen eines Azure Data Explorer-Clusters und einer Datenbank. Erstellen eines Clusters und einer Datenbank

JSON-Format

Azure Data Explorer unterstützt zwei JSON-Dateiformate:

  • json: JSON-Code mit Trennung nach Zeilen. Jede Zeile in den Eingabedaten enthält exakt einen JSON-Datensatz. Dieses Format unterstützt die Analyse von Kommentaren und Eigenschaften mit einzeler Anführungszeichen. Weitere Informationen finden Sie unter JSON Lines.
  • multijson: Mehrzeiliger JSON-Code. Der Parser ignoriert die Zeilentrennungen und liest einen Datensatz von der vorherigen Position bis zum Ende eines gültigen JSON-Codes.

Hinweis

Bei der Erfassung mithilfe des Erfassungs-Assistenten ist multijsondas Standardformat . Das Format kann mehrlineige JSON-Datensätze und Arrays von JSON-Datensätzen verarbeiten. Wenn ein Analysefehler auftritt, wird die gesamte Datei verworfen. Um ungültige JSON-Einträge zu ignorieren, wählen Sie die Option "Datenformatfehler ignorieren" aus, wodurch das Format in json (JSON-Zeilen) geändert wird.

Wenn Sie das JSON-Zeilenformat (json) verwenden, werden Zeilen, die keine gültigen JSON-Einträge darstellen, während der Analyse übersprungen.

Erfassen und Zuordnen von Daten im JSON-Format

Für die Erfassung von Daten im JSON-Format müssen Sie das Format angeben, indem Sie die Erfassungseigenschaft verwenden. Für die Erfassung von JSON-Daten ist eine Zuordnung erforderlich, bei der ein JSON-Quelleintrag der Zielspalte zugeordnet wird. Verwenden Sie bei der Datenerfassung die Eigenschaft IngestionMapping mit der Erfassungseigenschaft ingestionMappingReference (für eine vordefinierte Zuordnung) oder mit der Eigenschaft IngestionMappings. In diesem Artikel wird die ingestionMappingReference-Erfassungseigenschaft verwendet, die in der für die Erfassung verwendeten Tabelle vordefiniert ist. In den folgenden Beispielen erfassen wir zunächst JSON-Datensätze als Rohdaten in einer einzelnen Tabellenspalte. Anschließend verwenden wir die Zuordnung, um jede Eigenschaft in ihrer zugeordneten Spalte zu erfassen.

Einfaches JSON-Beispiel

Das folgende Beispiel zeigt einfachen JSON-Code mit einer flachen Struktur. Die Daten enthalten Informationen zur Temperatur und Luftfeuchtigkeit, die von mehreren Geräten gesammelt werden. Jeder Datensatz ist mit einer ID und einem Zeitstempel gekennzeichnet.

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

Erfassen von unformatierten JSON-Datensätzen

In diesem Beispiel erfassen Sie JSON-Datensätze als Rohdaten in einer Tabelle mit nur einer Spalte. Vorgänge wie die Datenbearbeitung, Verwendung von Abfragen und Aktualisierung von Richtlinien werden nach dem Erfassen der Daten durchgeführt.

Verwenden Sie Kusto-Abfragesprache, um Daten in einem unformatierten JSON-Format zu erfassen.

  1. Melden Sie sich bei https://dataexplorer.azure.com an.

  2. Wählen Sie Cluster hinzufügen aus.

  3. Geben Sie im Dialogfeld Add cluster (Cluster hinzufügen) Ihre Cluster-URL im Format https://<ClusterName>.<Region>.kusto.windows.net/ ein, und wählen Sie dann Hinzufügen aus.

  4. Fügen Sie den folgenden Befehl ein, und wählen Sie Ausführen aus, um die Tabelle zu erstellen.

    .create table RawEvents (Event: dynamic)
    

    Mit dieser Abfrage wird eine Tabelle mit nur einer Event-Spalte und dem Datentyp Dynamisch erstellt.

  5. Erstellen Sie die JSON-Zuordnung.

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

    Mit diesem Befehl wird eine Zuordnung erstellt und der JSON-Stammpfad $ der Spalte Event zugeordnet.

  6. Erfassen Sie Daten in der Tabelle RawEvents.

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

Erfassen von zugeordneten JSON-Datensätzen

In diesem Beispiel erfassen Sie die Daten von JSON-Datensätzen. Jede JSON-Eigenschaft wird einer Spalte der Tabelle zugeordnet.

  1. Erstellen Sie eine neue Tabelle mit einem ähnlichen Schema wie für die JSON-Eingabedaten. Wir verwenden diese Tabelle für alle folgenden Beispiele und Erfassungsbefehle.

    .create table Events (Time: datetime, Device: string, MessageId: string, Temperature: double, Humidity: double)
    
  2. Erstellen Sie die JSON-Zuordnung.

    .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 dieser Zuordnung werden die timestamp-Einträge – wie im Tabellenschema definiert – in der Spalte Time mit dem Datentyp datetime erfasst.

  3. Erfassen Sie Daten in der Tabelle Events.

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

    Die Datei „simple.json“ enthält einige JSON-Datensätze, die nach Zeilen getrennt sind. Das Format lautet json, und im Erfassungsbefehl wird das von Ihnen erstellte FlatEventMapping-Element für die Zuordnung genutzt.

Erfassen von mehrzeiligen JSON-Datensätzen

In diesem Beispiel erfassen Sie mehrzeilige JSON-Datensätze. Jede JSON-Eigenschaft wird einer Spalte der Tabelle zugeordnet. Die Datei „multilined.json“ enthält einige eingezogene JSON-Datensätze. Das Format multijson gibt an, Datensätze nach der JSON-Struktur zu lesen.

Erfassen Sie Daten in der Tabelle Events.

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

Erfassen von JSON-Datensätzen mit Arrays

Arraydatentypen sind eine geordnete Sammlung von Werten. Die Erfassung eines JSON-Arrays erfolgt über eine Updaterichtlinie. Der JSON-Code wird ohne Änderungen in einer Zwischentabelle erfasst. Bei allen Updaterichtlinien wird für die Tabelle RawEvents eine vordefinierte Funktion ausgeführt, und die Ergebnisse werden wieder in der Zieltabelle erfasst. Wir erfassen Daten mit der folgenden 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. Erstellen Sie eine update policy-Funktion, mit der die Sammlung von records so erweitert wird, dass jeder Wert der Sammlung über den Operator mv-expand in einer separaten Zeile angeordnet wird. Wir nutzen die Tabelle RawEvents als Quelltabelle und Events als Zieltabelle.

    .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. Das von der Funktion empfangene Schema muss mit dem Schema der Zieltabelle übereinstimmen. Verwenden Sie den Operator getschema, um das Schema zu überprüfen.

    EventRecordsExpand() | getschema
    
  3. Fügen Sie die Updaterichtlinie der Zieltabelle hinzu. Diese Richtlinie führt die Abfrage automatisch für alle neu erfassten Daten in der Zwischentabelle RawEvents aus und erfasst die Ergebnisse in der Tabelle Events. Definieren Sie eine Richtlinie mit einem Aufbewahrungszeitraum von Null, um das beständige Speichern der Zwischentabelle zu vermeiden.

    .alter table Events policy update @'[{"Source": "RawEvents", "Query": "EventRecordsExpand()", "IsEnabled": "True"}]'
    
  4. Erfassen Sie Daten in der Tabelle RawEvents.

    .ingest into table RawEvents ('https://kustosamplefiles.blob.core.windows.net/jsonsamplefiles/array.json') with '{"format":"multijson", "ingestionMappingReference":"RawEventMapping"}'
    
  5. Sehen Sie sich die Daten in der Tabelle Events an.

    Events