Sdílet prostřednictvím


Výstup služby Blob Storage a Azure Data Lake Gen2 z Azure Stream Analytics

Data Lake Storage Gen2 představuje Azure Storage základ pro vytváření podnikových datových jezer v Azure. Data Lake Storage Gen2 umožňuje snadnou správu obrovských objemů dat od začátku až po obsluhu několika petabajtů informací a současně udržovat stovky gigabitů propustnosti. Základní součástí Služby Data Lake Storage Gen2 je přidání hierarchického oboru názvů do úložiště objektů blob.

Azure Blob Storage nabízí nákladově efektivní a škálovatelné řešení pro ukládání velkých objemů nestrukturovaných dat v cloudu. Úvod k úložišti objektů blob a jeho využití najdete v tématu Nahrání, stažení a výpis objektů blob pomocí webu Azure Portal.

Poznámka:

Podrobnosti o chování specifických pro formáty AVRO a Parquet najdete v souvisejících částech v přehledu.

Konfigurace výstupu

Následující tabulka uvádí názvy vlastností a jejich popisy pro vytvoření výstupu objektu blob nebo Azure Data Lake Storage Gen2.

Název vlastnosti Popis
Alias pro výstup Popisný název použitý v dotazech k nasměrování výstupu dotazu do tohoto úložiště objektů blob.
Účet úložiště Název účtu úložiště, do kterého odesíláte výstup.
Klíč účtu úložiště Tajný klíč přidružený k účtu úložiště.
Kontejner Logické seskupení objektů blob uložených ve službě Azure Blob Service Když nahrajete objekt blob do služby Blob Service, musíte pro tento objekt blob zadat kontejner.

Název dynamického kontejneru je volitelný. Podporuje jeden a pouze jeden dynamický {field} název kontejneru. Pole musí existovat ve výstupních datech a postupovat podle zásad názvu kontejneru.

Datový typ pole musí být string. Pokud chcete použít více dynamických polí nebo kombinovat statický text spolu s dynamickým polem, můžete ho definovat v dotazu pomocí předdefinovaných řetězcových funkcí, jako je CONCAT, LTRIM atd.
Formát serializace události Formát serializace pro výstupní data. Podporují se JSON, CSV, Avro a Parquet. Delta Lake je tady uvedená jako možnost. Data jsou ve formátu Parquet, pokud je vybrána možnost Delta Lake. Další informace o Delta Lake
Název cesty Delta Vyžaduje se, pokud je formát serializace událostí Delta Lake. Cesta, která se používá k zápisu tabulky Delta Lake v zadaném kontejneru. Obsahuje název tabulky. Další podrobnosti a příklady
Režim zápisu Režim zápisu řídí způsob, jakým Azure Stream Analytics zapisuje do výstupního souboru. Přesně jednou se doručení provede jenom v případě, že je režim zápisu jednou. Další informace najdete v další části.
Sloupec oddílu Nepovinné. Název {field} z výstupních dat do oddílu. Podporuje se pouze jeden sloupec oddílu.
Vzor cesty Vyžaduje se, pokud je formát serializace událostí Delta Lake. Vzor cesty k souboru, který se používá k zápisu objektů blob v zadaném kontejneru.

Ve vzoru cesty můžete použít jednu nebo více instancí proměnných data a času k určení frekvence zápisu objektů blob: {date}, {time}.

Pokud je režim zápisu jednou, musíte použít {date} i {time}.

Vlastní dělení objektů blob můžete použít k zadání jednoho vlastního názvu {field} z dat události do objektů blob oddílů. Název pole je alfanumerický a může obsahovat mezery, pomlčky a podtržítka. Omezení vlastních polí zahrnují následující:
  • Pokud je váš režim zápisu jednou, není povolen žádný dynamický vlastní název {field}.
  • V názvech polí se nerozlišuje malá a velká písmena. Služba například nemůže rozlišovat mezi sloupcem ID a sloupcem id."
  • Vnořená pole nejsou povolená. Místo toho použijte alias v dotazu úlohy k "zploštění" pole.
  • Výrazy nelze použít jako název pole.

Tato funkce umožňuje v cestě používat vlastní konfigurace specifikátoru formátu data a času. Vlastní formáty data a času musí být zadány po jednom, uzavřeny klíčovým slovem {datetime:<specifier>}. Přípustné vstupy pro <specifikátor> jsou yyyy, MM, M, dd, d, d, HH, H, H, mm, m, ss nebo s. Klíčové slovo {datetime:<specifier>} lze použít vícekrát v cestě k vytvoření vlastních konfigurací data a času.

Příklady:
  • Příklad 1: cluster1/logs/{date}/{time}
  • Příklad 2: cluster1/logs/{date}
  • Příklad 3: cluster1/{client_id}/{date}/{time}
  • Příklad 4: cluster1/{datetime:ss}/{myField} kde dotaz je: SELECT data.myField AS myField FROM Input;
  • Příklad 5: cluster1/year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}

Časové razítko vytvořené struktury složek se řídí časem UTC, nikoli místním časem. System.Timestamp je čas používaný pro veškeré dělení na základě času.

Pojmenování souborů používá následující konvenci:

{Vzor předpony cesty}/schemaHashcode_Guid_Number.extension

Zde guid představuje jedinečný identifikátor přiřazený internímu zapisovači, který se vytvoří pro zápis do souboru objektu blob. Číslo představuje index bloku objektu blob.

Ukázkové výstupní soubory:
  • Myoutput/20170901/00/45434_gguid_1.csv
  • Myoutput/20170901/01/45434_gguid_1.csv

Další informace o této funkci najdete v tématu Dělení výstupu vlastního objektu blob služby Azure Stream Analytics.
Formát data Vyžaduje se, pokud je formát serializace událostí Delta Lake. Pokud se token data používá v cestě předpony, můžete vybrat formát data, ve kterém jsou soubory uspořádané. Příklad: YYYY/MM/DD
Formát času Vyžaduje se, pokud je formát serializace událostí Delta Lake. Pokud se časový token používá v cestě předpony, zadejte formát času, ve kterém jsou soubory uspořádány.
Minimální počet řádků Počet minimálních řádků na dávku. Pro Parquet vytvoří každá dávka nový soubor. Aktuální výchozí hodnota je 2 000 řádků a povolené maximum je 10 000 řádků.
Maximální doba Maximální doba čekání na dávku. Po této době se dávka zapíše do výstupu, i když není splněn minimální požadavek na řádky. Aktuální výchozí hodnota je 1 minuta a povolené maximum je 2 hodiny. Pokud má výstup objektu blob frekvenci cest, doba čekání nemůže být vyšší než časový rozsah oddílů.
Kódování Pokud používáte formát CSV nebo JSON, musí být zadáno kódování. UTF-8 je v tuto chvíli jediným podporovaným formátem kódování.
Delimiter Platí pouze pro serializaci CSV. Stream Analytics podporuje mnoho běžných oddělovačů pro serializaci dat CSV. Podporované hodnoty jsou čárka, středník, mezera, tabulátor a svislý pruh.
Formát Platí pouze pro serializaci JSON. Řádek oddělený určuje, že výstup je formátován tak, že každý objekt JSON oddělený novým řádkem. Pokud vyberete Řádek oddělený, json se načte jeden objekt najednou. Celý samotný obsah by nebyl platným json. Pole určuje, že výstup je formátován jako pole objektů JSON. Toto pole se zavře pouze v případě, že se úloha zastaví nebo se Stream Analytics přesune do dalšího časového intervalu. Obecně platí, že je vhodnější použít json oddělený řádkem, protože nevyžaduje žádné zvláštní zpracování, zatímco výstupní soubor se stále zapisuje.

Právě po doručení (Public Preview)

Kompletní doručení přesně jednou při čtení jakéhokoli vstupu streamování znamená, že zpracovávaná data se zapíšou do výstupu Azure Data Lake Storage Gen2 jednou bez duplicit. Pokud je tato funkce povolená, vaše úloha Stream Analytics zaručuje, že nedojde ke ztrátě dat a nevygenerují se žádné duplicity jako výstup v rámci restartování iniciovaného uživatelem od posledního výstupu. Výrazně zjednodušuje kanál streamování tím, že nemusíte implementovat a řešit potíže s logikou odstranění duplicitních dat.

Režim zápisu

Stream Analytics zapisuje do vašeho účtu Blob Storage nebo ADLS Gen2 dvěma způsoby. Jedním z nich je připojení výsledků buď do stejného souboru, nebo do posloupnosti souborů, ve které se výsledky blíží. Druhý je zápis po všech výsledcích pro časový oddíl, pokud jsou k dispozici všechna data pro časový oddíl. Právě po povolení doručení je režim zápisu jednou.

Pro Delta Lake neexistuje žádná možnost režimu zápisu. Výstup Delta Lake ale také poskytuje přesně jednou záruky pomocí rozdílového protokolu. Nevyžaduje časový oddíl a zapisuje výsledky nepřetržitě na základě parametrů dávkování definovaných uživatelem.

Poznámka:

Pokud nechcete používat funkci Preview pro přesně jednou doručení, vyberte připojit jako výsledek.

Konfigurace

Pokud chcete pro účet Blob Storage nebo ADLS Gen2 dostávat přesně jedno doručení, musíte nakonfigurovat následující nastavení:

  • Po výběru všech výsledků časového oddílu je pro váš režim zápisu k dispozici jedenkrát.
  • Zadejte vzor cesty se zadaným datem {date} i {time}.
  • Zadejte formát data a čas.

Omezení

  • Dílčí stream se nepodporuje.
  • Vzor cesty se stane požadovanou vlastností a musí obsahovat {date} i {time}. Není povolen žádný dynamický vlastní název {field}. Přečtěte si další informace o vlastním vzoru cesty.
  • Pokud je úloha spuštěna ve vlastním čase před nebo po posledním výstupu, existuje riziko přepsání souboru. Pokud je například formát času HH, soubor se vygeneruje každou hodinu. Pokud úlohu zastavíte v 8:15 a restartujete úlohu v 8:30, soubor vygenerovaný od 8 do 9:00 pokrývá pouze data od 8:30 do 9.00. Data od 8:15 do 8:15 se ztratí, protože jsou přepsána.

Výstupní soubory objektu blob

Při použití úložiště objektů blob jako výstupu se v objektu blob vytvoří nový soubor v následujících případech:

  • Soubor překračuje maximální počet povolených bloků (aktuálně 50 000). Můžete dosáhnout maximálního povoleného počtu bloků bez dosažení maximální povolené velikosti objektu blob. Pokud je například rychlost výstupu vysoká, můžete zobrazit více bajtů na jeden blok a velikost souboru je větší. Pokud je výstupní rychlost nízká, každý blok má méně dat a velikost souboru je menší.
  • Ve výstupu došlo ke změně schématu a výstupní formát vyžaduje pevné schéma (CSV, Avro, Parquet).
  • Úloha se restartuje, a to buď externě tím, že ji uživatel zastaví a spustí, nebo interně kvůli údržbě systému nebo obnovení chyb.
  • Dotaz je plně rozdělený a pro každý výstupní oddíl se vytvoří nový soubor. Pochází z použití PARTITION BY nebo nativní paralelizace zavedená v úrovni kompatibility 1.2
  • Uživatel odstraní soubor nebo kontejner účtu úložiště.
  • Výstup je čas rozdělený pomocí vzoru předpony cesty a nový objekt blob se použije, když se dotaz přesune na další hodinu.
  • Výstup je rozdělený podle vlastního pole a nový objekt blob se vytvoří pro klíč oddílu, pokud neexistuje.
  • Výstup je rozdělený podle vlastního pole, kde kardinalita klíče oddílu přesahuje 8 000 a vytvoří se nový objekt blob pro klíč oddílu.

dělení na části

Pro klíč oddílu použijte tokeny {date} a {time} z polí událostí ve vzoru cesty. Zvolte formát data, například RRRR/MM/DD, DD/MM/RRRR nebo MM-DD-RRRR. HH se používá pro formát času. Výstup objektu blob je možné rozdělit podle jednoho atributu vlastní události {fieldname} nebo {datetime:<specifier>}. Počet výstupních zapisovačů se řídí vstupním dělením pro plně paralelizovatelné dotazy.

Velikost dávky výstupu

Maximální velikost zprávy najdete v tématu Omezení služby Azure Storage. Maximální velikost bloku objektu blob je 4 MB a maximální počet bock objektů blob je 50 000.

Omezení

  • Pokud se v vzoru cesty použije symbol / lomítka (např. /folder2/folder3), vytvoří se prázdné složky a v Průzkumník služby Storage
  • Azure Stream Analytics se připojí ke stejnému souboru v případech, kdy není potřeba nový soubor objektu blob. Pokud jsou služby Azure, jako je Event Grid, nakonfigurované tak, aby se aktivovaly při aktualizaci souboru objektu blob, mohlo dojít k vygenerování dalších triggerů.
  • Azure Stream Analytics ve výchozím nastavení připojí k objektu blob. Pokud je výstupním formátem pole Json, dokončí se soubor při vypnutí nebo když se výstup přesune do dalšího oddílu pro čas dělené výstupy. V některých případech, jako je nečistý restart, je možné, že chybí závěr "]" pro pole JSON.

Další kroky