Vlastní dělení blobového výstupu v Azure Stream Analytics

Azure Stream Analytics podporuje dělení výstupu objektu blob podle vlastních pravidel s vlastními poli nebo atributy a uživatelskými vzory cest DateTime.

Vlastní pole nebo atributy

Vlastní atributy pole nebo vstupu zlepšují následné pracovní postupy zpracování a generování sestav tím, že umožňují větší kontrolu nad výstupem.

Možnosti klíče oddílu

Klíč oddílu nebo název sloupce, který se používá k dělení vstupních dat, může obsahovat libovolný znak, který je pro blob názvy akceptován. Vnořená pole není možné použít jako klíč oddílu, pokud se nepoužívají společně s aliasy. K vytvoření hierarchie souborů však můžete použít určité znaky. Pokud například chcete vytvořit sloupec, který kombinuje data ze dvou dalších sloupců, abyste vytvořili jedinečný klíč oddílu, můžete použít následující dotaz:

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

Klíč oddílu musí být NVARCHAR(MAX), BIGINT, FLOATnebo BIT (1.2 úroveň kompatibility nebo vyšší). Typy DateTime, Array a Records nejsou podporovány, ale dají se použít jako klíče oddílu, pokud jsou převedeny na řetězce. Další informace najdete v tématu Datové typy Azure Stream Analytics.

Příklad

Předpokládejme, že úloha přebírá vstupní data z živých uživatelských relací připojených k externí službě videohry, kde ingestované data obsahují sloupec client_id pro identifikaci relací. Pokud chcete data rozdělit podle client_id, nastavte pole vzoru cesty objektu blob tak, aby při vytváření úlohy zahrnovalo partiční token {client_id} ve výstupních vlastnostech objektu blob. Data s různými client_id hodnotami, která procházejí úlohou Stream Analytics, se ukládají do samostatných složek na základě jedinečné client_id hodnoty pro každou složku.

Snímek obrazovky znázorňující vzor cesty s ID klienta

Podobně, pokud by vstupem úlohy byla data ze senzorů milionů snímačů, kde každý senzor měl sensor_id, vzor cesty by byl {sensor_id} pro rozdělení dat z každého snímače do různých složek.

Když použijete rozhraní REST API, může výstupní část souboru JSON použitého pro tento požadavek vypadat jako na následujícím obrázku:

Snímek obrazovky znázorňující výstup rozhraní REST API

Po spuštění clients úlohy může kontejner vypadat jako na následujícím obrázku:

Snímek obrazovky znázorňující kontejner klientů

Každá složka může obsahovat více objektů blob, kde každý objekt blob obsahuje jeden nebo více záznamů. V předchozím příkladu je ve složce "06000000" označený jeden objekt blob s následujícím obsahem:

Snímek obrazovky znázorňující obsah objektu blob

Všimněte si, že každý záznam v objektu blob má client_id sloupec odpovídající názvu složky, protože sloupec použitý k rozdělení výstupu do výstupní cesty byl client_id.

Omezení

  1. Ve výstupní vlastnosti objektu blob vzoru cesty je povolen pouze jeden vlastní klíč oddílu. Všechny následující vzory cest jsou platné:

    • cluster1/{date}/{aFieldInMyData}
    • cluster1/{time}/{aFieldInMyData}
    • cluster1/{aFieldInMyData}
    • cluster1/{date}/{time}/{aFieldInMyData}
  2. Pokud zákazníci chtějí použít více než jedno vstupní pole, můžou vytvořit složený klíč v dotazu pro vlastní oddíl cesty ve výstupu objektu blob pomocí CONCAT. Příklad: select concat (col1, col2) as compositeColumn into blobOutput from input. Pak můžou jako vlastní cestu zadat compositeColumn ve službě Azure Blob Storage.

  3. Klíče oddílů nerozlišují psaní malými a velkými písmeny, takže klíče oddílů jako John a john jsou ekvivalentní. Výrazy se také nedají použít jako klíče oddílu. Například {columnA + columnB} nefunguje.

  4. Pokud se vstupní datový proud skládá ze záznamů s kardinalitou klíče rozdělení pod 8 000, záznamy se připojí k existujícím blobům. V případě potřeby vytvoří pouze nové blob. Pokud je kardinalita vyšší než 8 000, neexistuje žádná záruka, že se existující blob zapisují. Nové objekty blob se nebudou vytvářet pro libovolný počet záznamů se stejným klíčem oddílu.

  5. Pokud je výstup objektu blob nakonfigurovaný jako neměnný, Stream Analytics při každém odeslání dat vytvoří nový objekt blob.

Vlastní vzory cesty DateTime

Vlastní DateTime vzory cest umožňují zadat výstupní formát, který je v souladu s konvencemi streamování Hive, což Stream Analytics umožňuje odesílání dat do Azure HDInsight a Azure Databricks pro následné zpracování. Vlastní DateTime vzory cest se snadno implementují pomocí klíčového slova datetime v poli Předpona cesty výstupu typu blob spolu se specifikátorem formátu. Příklad: {datetime:yyyy}.

Podporované tokeny

Následující specifikační tokeny formátu lze použít samostatně nebo v kombinaci k dosažení vlastních DateTime formátů.

Specifikátor formátu Popis Výsledky v příkladovém čase 2018-01-02T10:06:08
{datetime:yyyy} Rok jako čtyřmístné číslo 2018
{datetime:MM} Měsíc od 01 do 12 01
{datetime:M} Měsíc od 1 do 12 1
{datetime:dd} Den od 01 do 31 02
{datetime:d} Den od 1 do 31 2
{datetime:HH} Hodina ve 24hodinovém formátu, od 00 do 23 10
{datetime:mm} Minuty od 00 do 60 06
{datetime:m} Minuty od 0 do 60 6
{datetime:ss} Sekundy od 00 do 60 08

Pokud nechcete používat vlastní DateTime vzory, můžete přidat {date} a/nebo {time} token do pole Předpona cesty a vygenerovat rozevírací seznam s předdefinovanými DateTime formáty.

Snímek obrazovky, který znázorňuje staré formáty DateTime ve Stream Analytics

Rozšiřitelnost a omezení

Ve vzoru cesty můžete použít libovolný počet tokenů ({datetime:<specifier>}), dokud nedosáhnete limitu znaků předpony cesty. Specifikátory formátu se nedají kombinovat v rámci jednoho tokenu nad rámec kombinací, které už jsou uvedené v rozevíracích náznacích data a času.

Pro rozdělení cesty logs/MM/dd:

Platný výraz Neplatný výraz
logs/{datetime:MM}/{datetime:dd} logs/{datetime:MM/dd}

V předponě cesty můžete stejný specifikátor formátu použít vícekrát. Token se musí opakovat pokaždé.

Konvence streamování Hive

Vlastní vzory cest pro Blob Storage je možné použít s konvencí streamování Hive, která očekává, že složky budou označeny column= v názvu složky.

Příklad: year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}/hour={datetime:HH}.

Vlastní výstup eliminuje nesnáze se změnami tabulek a ručním přidáváním oddílů pro přenos dat mezi Stream Analytics a Hive. Místo toho je možné automaticky přidat mnoho složek pomocí:

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

Příklad

Vytvořte účet úložiště, skupinu prostředků, úlohu Stream Analytics a vstupní zdroj podle rychlého startu v Azure portálu Stream Analytics. Použijte stejná ukázková data použitá v rychlém startu. Ukázková data jsou k dispozici také na GitHubu.

Vytvořte výstupní jímku objektu blob s následující konfigurací:

Snímek obrazovky, který zobrazuje vytvoření výstupního blob úložiště ve Stream Analytics.

Vzor úplné cesty je:

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

Při spuštění úlohy se v kontejneru objektů blob vytvoří struktura složek založená na vzoru cesty. Můžete přejít k podrobnostem na úrovni dne.

Snímek obrazovky znázorňující výstup objektu blob Stream Analytics s vlastním vzorem cesty