Condividi tramite


Inserire dati di esempio in formato JSON in Azure Esplora dati

Questo articolo illustra come inserire dati in formato JSON in un database Esplora dati di Azure. Si inizierà con semplici esempi di JSON non elaborati e mappati, si continuerà a json multipiaggiata e quindi si affronteranno schemi JSON più complessi contenenti matrici e dizionari. Gli esempi illustrano in dettaglio il processo di inserimento di dati in formato JSON usando Linguaggio di query Kusto (KQL), C#o Python.

Nota

Non è consigliabile usare .ingest i comandi di gestione negli scenari di produzione. Usare invece un connettore dati o inserire dati a livello di codice usando una delle librerie client Kusto.

Prerequisiti

  • Un account Microsoft o un'identità utente di Microsoft Entra. Non è necessaria una sottoscrizione di Azure.
  • Un cluster e un database di Esplora dati di Azure. Creare un cluster e un database.

Formato JSON

Azure Esplora dati supporta due formati di file JSON:

  • json: JSON separato da righe. Ogni riga nei dati di input ha esattamente un record JSON. Questo formato supporta l'analisi dei commenti e delle proprietà tra virgolette singole. Per altre informazioni, vedere Righe JSON.
  • multijson: JSON con più righe. Il parser ignora i separatori di riga e legge un record dalla posizione precedente alla fine di un json valido.

Nota

Quando si inserisce usando l'esperienza di recupero dei dati, il formato predefinito è multijson. Il formato può gestire record JSON su più righe e matrici di record JSON. Quando viene rilevato un errore di analisi, l'intero file viene rimosso. Per ignorare i record JSON non validi, selezionare l'opzione "Ignora errori di formato dati". In questo modo il formato verrà commutato su json (righe JSON).

Se si usa il formato di riga JSON (json), le righe che non rappresentano un record JSON valido vengono ignorate durante l'analisi.

Inserire ed eseguire il mapping di dati in formato JSON

L'inserimento di dati in formato JSON richiede di specificare il formato usando la proprietà di inserimento. L'inserimento di dati JSON richiede il mapping, che esegue il mapping di una voce di origine JSON alla colonna di destinazione. Quando si inseriscono dati, usare la proprietà con la IngestionMapping relativa ingestionMappingReference proprietà di inserimento (per un mapping predefinito) o la relativa IngestionMappings proprietà. Questo articolo userà la ingestionMappingReference proprietà di inserimento, definita in modo predefinito nella tabella usata per l'inserimento. Negli esempi seguenti si inizierà inserendo record JSON come dati non elaborati in una singola tabella di colonne. Si userà quindi il mapping per inserire ogni proprietà nella colonna mappata.

Esempio JSON semplice

L'esempio seguente è un codice JSON semplice, con una struttura piatta. I dati contengono informazioni sulla temperatura e sull'umidità, raccolte da diversi dispositivi. Ogni record è contrassegnato con un ID e un timestamp.

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

Inserire record JSON non elaborati

In questo esempio i record JSON vengono inseriti come dati non elaborati in una singola tabella di colonne. La manipolazione dei dati, l'uso di query e i criteri di aggiornamento vengono eseguiti dopo l'inserimento dei dati.

Usare Linguaggio di query Kusto per inserire dati in un formato JSON non elaborato.

  1. Accedere a https://dataexplorer.azure.com.

  2. Selezionare Add cluster (Aggiungi cluster).

  3. Nella finestra di dialogo Add cluster (Aggiungi cluster) immettere l'URL del cluster nel modulohttps://<ClusterName>.<Region>.kusto.windows.net/, quindi selezionare Aggiungi.

  4. Incollare il comando seguente e selezionare Esegui per creare una tabella.

    .create table RawEvents (Event: dynamic)
    

    Questa query crea una tabella con una singola Event colonna di un tipo di dati dinamico .

  5. Creare il mapping JSON.

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

    Questo comando crea un mapping ed esegue il mapping del percorso $ radice JSON alla Event colonna.

  6. Inserire i dati nella RawEvents tabella.

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

Inserire record JSON mappati

In questo esempio si inseriscono i dati dei record JSON. Ogni proprietà JSON viene mappata a una singola colonna della tabella.

  1. Creare una nuova tabella con uno schema simile ai dati di input JSON. Questa tabella verrà usata per tutti gli esempi e i comandi di inserimento seguenti.

    .create table Events (Time: datetime, Device: string, MessageId: string, Temperature: double, Humidity: double)
    
  2. Creare il mapping JSON.

    .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 questo mapping, come definito dallo schema della tabella, le timestamp voci verranno inserite nella colonna Time come datetime tipi di dati.

  3. Inserire i dati nella Events tabella.

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

    Il file 'simple.json' include alcuni record JSON separati da righe. Il formato è jsone il mapping usato nel comando di inserimento è quello FlatEventMapping creato.

Inserire record JSON con più righe

In questo esempio si inseriscono record JSON con più righe. Ogni proprietà JSON viene mappata a una singola colonna della tabella. Il file 'multilined.json' ha alcuni record JSON rientrati. Il formato multijson indica di leggere i record in base alla struttura JSON.

Inserire i dati nella Events tabella.

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

Inserire record JSON contenenti matrici

I tipi di dati matrice sono una raccolta ordinata di valori. L'inserimento di una matrice JSON viene eseguito da un criterio di aggiornamento. Il codice JSON viene inserito così come è in una tabella intermedia. Un criterio di aggiornamento esegue una funzione predefinita nella RawEvents tabella, rivalutando i risultati nella tabella di destinazione. I dati verranno inseriti con la struttura seguente:

{
    "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. Creare una update policy funzione che espande la raccolta di records in modo che ogni valore nella raccolta riceva una riga separata, usando l'operatore mv-expand . La tabella RawEvents verrà usata come tabella di origine e Events come tabella di destinazione.

    .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. Lo schema ricevuto dalla funzione deve corrispondere allo schema della tabella di destinazione. Usare l'operatore getschema per esaminare lo schema.

    EventRecordsExpand() | getschema
    
  3. Aggiungere il criterio di aggiornamento nella tabella di destinazione. Questo criterio eseguirà automaticamente la query su tutti i dati appena inseriti nella RawEvents tabella intermedia e inserisce i risultati nella Events tabella. Definire un criterio di conservazione zero per evitare di rendere persistente la tabella intermedia.

    .alter table Events policy update @'[{"Source": "RawEvents", "Query": "EventRecordsExpand()", "IsEnabled": "True"}]'
    
  4. Inserire i dati nella RawEvents tabella.

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

    Events