Partitionering av anpassade blobutdata i Azure Stream Analytics

Azure Stream Analytics stöder anpassad partitionering av blobutdata med anpassade fält eller attribut och anpassade DateTime-sökvägsmönster.

Anpassat fält eller attribut

Anpassade fält- eller indataattribut förbättrar arbetsflöden för nedströms databearbetning och rapportering genom att ge mer kontroll över utdata.

Alternativ för partitionsnyckel

Partitionsnyckeln, eller kolumnnamnet, som används för att partitionera indata kan innehålla alla tecken som accepteras för blobnamn. Det går inte att använda kapslade fält som en partitionsnyckel om det inte används tillsammans med alias, men du kan använda vissa tecken för att skapa en hierarki med filer. Du kan till exempel använda följande fråga för att skapa en kolumn som kombinerar data från två andra kolumner för att skapa en unik partitionsnyckel.

SELECT name, id, CONCAT(name, "/", id) AS nameid

Partitionsnyckeln måste vara NVARCHAR(MAX), BIGINT, FLOAT eller BIT (1.2-kompatibilitetsnivå eller högre). Typerna DateTime, Array och Records stöds inte, men kan användas som partitionsnycklar om de konverteras till Strängar. Mer information finns i Datatyper för Azure Stream Analytics.

Exempel

Anta att ett jobb tar indata från live-användarsessioner som är anslutna till en extern videospeltjänst där inmatade data innehåller en kolumn client_id för att identifiera sessionerna. Om du vill partitioneras data efter client_id anger du fältet Mönster för blobsökväg så att det innehåller en partitionstoken {client_id} i blobutdataegenskaperna när du skapar ett jobb. När data med olika client_id värden flödar genom Stream Analytics-jobbet sparas utdata i separata mappar baserat på ett enda client_id värde per mapp.

Sökvägsmönster med klient-ID

På samma sätt, om jobbindata var sensordata från miljontals sensorer där varje sensor hade en sensor_id, skulle sökvägsmönstret vara {sensor_id} för att partitioneras varje sensordata till olika mappar.

När du använder REST-API:et kan utdataavsnittet i en JSON-fil som används för den begäran se ut som i följande bild:

REST API-utdata

När jobbet börjar köras kan containern clients se ut som följande bild:

Klientcontainer

Varje mapp kan innehålla flera blobar där varje blob innehåller en eller flera poster. I exemplet ovan finns det en enda blob i en mapp med etiketten "060000000" med följande innehåll:

Blobinnehåll

Observera att varje post i bloben har en client_id kolumn som matchar mappnamnet eftersom kolumnen som används för att partitionera utdata i utdatasökvägen client_id.

Begränsningar

  1. Endast en anpassad partitionsnyckel tillåts i utdataegenskapen Sökvägsmönster för blob. Alla följande sökvägsmönster är giltiga:

    • cluster1/{date}/{aFieldInMyData}
    • cluster1/{time}/{aFieldInMyData}
    • cluster1/{aFieldInMyData}
    • cluster1/{date}/{time}/{aFieldInMyData}
  2. Om kunderna vill använda fler än ett indatafält kan de skapa en sammansatt nyckel i frågan för anpassad sökvägspartition i blobutdata med hjälp av CONCAT. Till exempel: välj concat (col1, col2) som compositeColumn i blobOutput från indata. Sedan kan de ange compositeColumn som den anpassade sökvägen i Blob Storage.

  3. Partitionsnycklar är skiftlägesokänsliga, så partitionsnycklar som John och john är likvärdiga. Uttryck kan inte heller användas som partitionsnycklar. { columnA + columnB} fungerar till exempel inte.

  4. När en indataström består av poster med en kardinalitet för partitionsnycklar under 8 000 läggs posterna till i befintliga blobar och skapar bara nya blobar när det behövs. Om kardinaliteten är över 8 000 finns det ingen garanti för att befintliga blobar skrivs till och nya blobar skapas inte för ett godtyckligt antal poster med samma partitionsnyckel.

  5. Om blobutdata konfigureras som oföränderliga skapar Stream Analytics en ny blob varje gång data skickas.

Anpassade DateTime-sökvägsmönster

Med anpassade DateTime-sökvägsmönster kan du ange ett utdataformat som överensstämmer med Hive Streaming-konventioner, vilket ger Azure Stream Analytics möjlighet att skicka data till Azure HDInsight och Azure Databricks för nedströmsbearbetning. Anpassade DateTime-sökvägsmönster implementeras enkelt med nyckelordet datetime i fältet Sökvägsprefix i blobutdata, tillsammans med formatspecificeraren. Till exempel {datetime:yyyy}.

Token som stöds

Följande formatspecificeraretoken kan användas ensam eller i kombination för att uppnå anpassade DateTime-format:

Formatspecificerare Description Resultat på exempeltid 2018-01-02T10:06:08
{datetime:yyyy} Året som ett fyrsiffrigt tal 2018
{datetime:MM} Månad från 01 till 12 01
{datetime:M} Månad från 1 till 12 1
{datetime:dd} Dag från 01 till 31 02
{datetime:d} Dag från 1 till 31 2
{datetime:HH} Timme med 24-timmarsformat, från 00 till 23 10
{datetime:mm} Minuter från 00 till 60 06
{datetime:m} Minuter från 0 till 60 6
{datetime:ss} Sekunder från 00 till 60 08

Om du inte vill använda anpassade DateTime-mönster kan du lägga till token {date} och/eller {time} i sökvägsprefixet för att generera en listruta med inbyggda DateTime-format.

Stream Analytics gamla DateTime-format

Utökningsbarhet och begränsningar

Du kan använda så många token som {datetime:<specifier>}du vill i sökvägsmönstret tills du når teckengränsen Sökvägsprefix. Formatspecificerare kan inte kombineras inom en enda token utöver de kombinationer som redan anges i listrutorna datum och tid.

För en sökvägspartition av logs/MM/dd:

Giltigt uttryck Ogiltigt uttryck
logs/{datetime:MM}/{datetime:dd} logs/{datetime:MM/dd}

Du kan använda samma formatspecificerare flera gånger i sökvägsprefixet. Token måste upprepas varje gång.

Hive Streaming-konventioner

Anpassade sökvägsmönster för bloblagring kan användas med Hive Streaming-konventionen, som förväntar sig att mappar ska märkas med column= i mappnamnet.

Till exempel year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}/hour={datetime:HH}.

Anpassade utdata eliminerar besväret med att ändra tabeller och manuellt lägga till partitioner i portdata mellan Azure Stream Analytics och Hive. I stället kan många mappar läggas till automatiskt med hjälp av:

MSCK REPAIR TABLE while hive.exec.dynamic.partition true

Exempel

Skapa ett lagringskonto, en resursgrupp, ett Stream Analytics-jobb och en indatakälla enligt snabbstartsguiden för Azure Stream Analytics Azure Portal. Använd samma exempeldata som används i snabbstartsguiden, som också är tillgängliga på GitHub.

Skapa en blobutdatamottagare med följande konfiguration:

Stream Analytics skapar blobutdatamottagare

Det fullständiga sökvägsmönstret är följande:

year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}

När du startar jobbet skapas en mappstruktur baserat på sökvägsmönstret i blobcontainern. Du kan öka detaljnivån till dagsnivån.

Stream Analytics-blobutdata med anpassat sökvägsmönster

Nästa steg