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

V tomto článku se dozvíte, jak ingestovat data ve formátu JSON do databáze Azure Data Explorer. Začnete jednoduchými příklady nezpracovaného a mapovaného kódu JSON, budete pokračovat víceřádkovým kódem JSON a pak se seznámíte se složitějšími schématy JSON obsahujícími 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í některé z klientských knihoven Kusto.

Požadavky

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

Formát JSON

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

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

Poznámka

Při příjmu dat pomocí průvodce příjmem dat je multijsonvýchozí formát . Formát může zpracovávat víceřádkové záznamy JSON a pole záznamů JSON. Když 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 formát přepne na json (Řádky JSON).

Pokud používáte formát čáry JSON (json), čáry, 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 zadali formát pomocí vlastnosti příjmu dat. 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 vlastnost s vlastností ingestionMappingReference příjmu IngestionMapping dat (pro předdefinované mapování) nebo její IngestionMappings vlastností. V tomto článku se 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 příjmem záznamů JSON jako nezpracovaných dat do tabulky s jedním sloupcem. Pak pomocí mapování ingestujeme každou vlastnost do namapovaného sloupce.

Příklad jednoduchého formátu 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 aktualizace zásad se provádí po ingestování dat.

K ingestování dat v nezpracované podobě JSON použijte dotazovací jazyk Kusto.

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

  2. Vyberte Přidat cluster.

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

  4. Vložte následující příkaz a výběrem možnosti 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 ke sloupci Event .

  6. Ingestujte data 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í definovaném schématem timestamp tabulky se položky ingestují do sloupce Time jako datetime datové typy.

  3. Ingestujte data 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 ingest je to, co FlatEventMapping jste vytvořili.

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. Formát multijson indikuje, že se mají záznamy číst podle struktury JSON.

Příjem 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 uspořádanou kolekcí hodnot. Příjem dat pole JSON se provádí pomocí zásad aktualizace. Json se ingestuje tak, jak je, do zprostředkující tabulky. Zásady aktualizace spustí v tabulce předdefinované funkce RawEvents a výsledky znovu ingestují do cílové tabulky. Ingestujeme data 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á rozbalí kolekci records tak, aby každá hodnota v kolekci obdržela samostatný řádek pomocí operátoru mv-expand . Tabulku RawEvents použijeme jako zdrojovou 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. Příjem 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 tabulce Events .

    Events