Sdílet prostřednictvím


Ingestování ukázkových dat ve formátu JSON do Azure Data Exploreru

V tomto článku se dozvíte, jak ingestovat data ve formátu JSON do databáze Azure Data Exploreru. Začnete jednoduchými příklady nezpracovaného a mapovaného JSON, pokračujete ve víceřádkovém formátu JSON a pak budete řešit složitější schémata JSON obsahující pole a slovníky. Příklady podrobně uvádějí proces ingestování dat ve formátu JSON pomocí dotazovací jazyk Kusto (KQL), C# nebo Pythonu.

Poznámka:

V produkčních scénářích nedoporučujeme používat .ingest příkazy pro správu. Místo toho použijte datový konektor nebo programově ingestujte data pomocí jedné z klientských knihoven Kusto.

Požadavky

  • Účet Microsoft nebo identita uživatele Microsoft Entra. Předplatné Azure není povinné.
  • Cluster a databáze Azure Data Exploreru. Vytvořte cluster a databázi.

Formát JSON

Azure Data Explorer podporuje dva formáty souborů JSON:

  • json: Oddělený řádek JSON. Každý řádek ve vstupních datech má přesně jeden záznam JSON. Tento formát podporuje analýzu komentářů a vlastností s jedním uvozvozováním. Další informace najdete v tématu Řádky JSON.
  • multijson: Json s více řádky. Analyzátor ignoruje oddělovače řádků a přečte záznam z předchozí pozice na konec platného formátu JSON.

Poznámka:

Při ingestování pomocí prostředí získat data je výchozí formát multijson. Formát může zpracovávat víceřádkové záznamy JSON a pole záznamů JSON. Pokud dojde k chybě analýzy, celý soubor se zahodí. Pokud chcete ignorovat neplatné záznamy JSON, vyberte možnost Ignorovat chyby formátu dat. Tím se přepne formát na json (řádky JSON).

Pokud používáte formát řádku JSON (json), řádky, které nepředstavují platné záznamy JSON, se během analýzy přeskočí.

Ingestování a mapování dat ve formátu JSON

Příjem dat ve formátu JSON vyžaduje, abyste pomocí vlastnosti příjmu dat zadali formát. Příjem dat JSON vyžaduje mapování, které mapuje zdrojovou položku JSON na cílový sloupec. Při ingestování dat použijte IngestionMapping vlastnost s vlastností ingestionMappingReference příjmu dat (pro předdefinované mapování) nebo její IngestionMappings vlastnost. Tento článek použije vlastnost příjmu ingestionMappingReference dat, která je předem definovaná v tabulce používané k příjmu dat. V následujících příkladech začneme ingestováním záznamů JSON jako nezpracovaných dat do tabulky s jedním sloupcem. Pak použijeme mapování k ingestování jednotlivých vlastností do jeho namapovaného sloupce.

Jednoduchý příklad JSON

Následující příklad je jednoduchý JSON s plochou strukturou. Data mají informace o teplotě a vlhkosti, které shromažďuje několik zařízení. Každý záznam je označený ID a časovým razítkem.

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

Ingestování nezpracovaných záznamů JSON

V tomto příkladu ingestujete záznamy JSON jako nezpracovaná data do tabulky s jedním sloupcem. Manipulace s daty, používání dotazů a zásady aktualizace se provádí po ingestování dat.

Pomocí dotazovací jazyk Kusto ingestovat data v nezpracovaný formát JSON.

  1. Přihlaste se na https://dataexplorer.azure.com.

  2. Vyberte Přidat cluster.

  3. V dialogovém okně Přidat cluster zadejte adresu URL clusteru ve formuláři https://<ClusterName>.<Region>.kusto.windows.net/a pak vyberte Přidat.

  4. Vložte následující příkaz a výběrem příkazu Spustit vytvořte tabulku.

    .create table RawEvents (Event: dynamic)
    

    Tento dotaz vytvoří tabulku s jedním Event sloupcem dynamického datového typu.

  5. Vytvořte mapování JSON.

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

    Tento příkaz vytvoří mapování a namapuje kořenovou cestu $ JSON na Event sloupec.

  6. Ingestování dat do RawEvents tabulky

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

Ingestování mapovaných záznamů JSON

V tomto příkladu ingestujete data záznamů JSON. Každá vlastnost JSON se mapuje na jeden sloupec v tabulce.

  1. Vytvořte novou tabulku s podobným schématem jako vstupní data JSON. Tuto tabulku použijeme pro všechny následující příklady a příkazy ingestování.

    .create table Events (Time: datetime, Device: string, MessageId: string, Temperature: double, Humidity: double)
    
  2. Vytvořte mapování 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"}}]'
    

    V tomto mapování, jak je definováno schématem tabulky, timestamp budou položky ingestovány do sloupce Time jako datetime datové typy.

  3. Ingestování dat do Events tabulky

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

    Soubor simple.json obsahuje několik záznamů JSON oddělených řádky. Formát je jsona mapování použité v příkazu ingestování je FlatEventMapping vámi vytvořený.

Ingestování víceřádkových záznamů JSON

V tomto příkladu ingestujete víceřádkové záznamy JSON. Každá vlastnost JSON se mapuje na jeden sloupec v tabulce. Soubor multilined.json obsahuje několik odsazených záznamů JSON. multijson Formát označuje čtení záznamů podle struktury JSON.

Ingestování dat do Events tabulky

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

Ingestování záznamů JSON obsahujících pole

Datové typy pole jsou seřazenou kolekcí hodnot. Příjem dat pole JSON provádí zásady aktualizace. JSON se ingestuje jako do zprostředkující tabulky. Zásady aktualizace spouští předdefinované funkce v RawEvents tabulce, která znovu ingestuje výsledky cílové tabulce. Data budeme ingestovat s následující strukturou:

{
    "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. Vytvořte update policy funkci, která rozšiřuje kolekci records tak, aby každá hodnota v kolekci obdržela samostatný řádek pomocí operátoru mv-expand . Tabulku RawEvents použijeme jako zdrojovou tabulku a Events jako cílovou tabulku.

    .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. Schéma přijaté funkcí musí odpovídat schématu cílové tabulky. Pomocí getschema operátoru zkontrolujte schéma.

    EventRecordsExpand() | getschema
    
  3. Přidejte zásadu aktualizace do cílové tabulky. Tato zásada automaticky spustí dotaz na všechna nově přijatá data v RawEvents zprostředkující tabulce a ingestuje výsledky do Events tabulky. Definujte zásady nulového uchovávání informací, abyste zabránili zachování zprostředkující tabulky.

    .alter table Events policy update @'[{"Source": "RawEvents", "Query": "EventRecordsExpand()", "IsEnabled": "True"}]'
    
  4. Ingestování dat do RawEvents tabulky

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

    Events