Azure Stream Analytics partitionering av anpassade blobutdata
Azure Stream Analytics stöder partitionering av anpassade 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ödena för underordnad databearbetning och rapportering genom att tillåta 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 partitionsnyckel om de 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 (kompatibilitetsnivå 1.2 eller högre). DateTime-, Array- och Records-typer stöds inte, men kan användas som partitionsnycklar om de konverteras till strängar. Mer information finns i Azure Stream Analytics datatyper.
Exempel
Anta att ett jobb tar indata från liveanvä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 partitionera data client_id anger du fältet Mönster för blobsökväg så att partitionstoken {client_id} inkluderas i blobutdataegenskaperna när du skapar ett jobb. När data med client_id värden flödar genom Stream Analytics jobb sparas utdata i separata mappar baserat på ett enda client_id värde per mapp.

På samma sätt, om jobbets indata 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 partitionera varje sensordata till olika mappar.
Med hjälp REST API kan utdataavsnittet i en JSON-fil som används för begäran se ut så här:

När jobbet börjar köras kan klientcontainern se ut så här:

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 "06000000" med följande innehåll:

Observera att varje post i bloben har en client_id-kolumn som matchar mappnamnet eftersom kolumnen som användes för att partitionera utdata i utdatasökvägen client_id.
Begränsningar
Endast en anpassad partitionsnyckel tillåts i blobutdataegenskapen Sökvägsmönster. Alla följande sökvägsmönster är giltiga:
- cluster1/{date}/{aFieldInMyData}
- cluster1/{time}/{aFieldInMyData}
- cluster1/{aFieldInMyData}
- cluster1/{date}/{time}/{aFieldInMyData}
Om kunder vill använda fler än ett indatafält kan de skapa en sammansatt nyckel i fråga 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.
Partitionsnycklar är okänsliga, så partitionsnycklar som "John" och "john" är likvärdiga. Uttryck kan inte heller användas som partitionsnycklar. Till exempel fungerar inte {columnA + columnB} .
När en indataström består av poster med en partitionsnyckelkardinalitet under 8 000 läggs posterna till i befintliga blobar och endast nya blobar skapas vid behov. 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.
Om blobutdata konfigureras som oföränderligaskapar 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-strömningskonventioner, vilket ger Azure Stream Analytics möjlighet att skicka data till Azure HDInsight och Azure Databricks för underordnad bearbetning. Anpassade DateTime-sökvägsmönster implementeras enkelt med hjälp av nyckelordet i fältet Sökvägsprefix i datetime dina blobutdata, tillsammans med formatspecificeraren. Till exempel {datetime:yyyy}.
Token som stöds
Följande formatspecificeringstoken kan användas fristående eller i kombination för att uppnå anpassade DateTime-format:
| Formatspecificerare | Description | Resultat på exempeltiden 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 listrutan med inbyggda DateTime-format.

Utökningsbarhet och begränsningar
Du kan använda så många token, , som du vill i sökvägsmönstret tills du når teckengränsen {datetime:<specifier>} sökvägsprefix. Formatspecificerare kan inte kombineras inom en enda token utöver de kombinationer som redan anges av listrutan för 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-strömningskonventioner
Anpassade sökvägsmönster för bloblagring kan användas med Hive Streaming-konventionen, som förväntar sig att mappar är märkta 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 till 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, 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 även finns på GitHub.
Skapa en blobutdata mottagare med följande konfiguration:

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 som baseras på sökvägsmönstret i blobcontainern. Du kan öka detaljnivån till dagsnivå.
