Spojení transformace v mapování toku dat

VZTAHUJE SE NA: Azure Data Factory Azure Synapse Analytics

Tip

Data Factory v Microsoft Fabric je nová generace Azure Data Factory s jednodušší architekturou, integrovanou AI a novými funkcemi. Pokud s integrací dat začínáte, začněte Fabric Data Factory. Stávající úlohy ADF lze upgradovat na Fabric pro přístup k novým funkcím v oblastech datové vědy, analýz v reálném čase a vytváření sestav.

Toky dat jsou k dispozici v kanálech Azure Data Factory i v kanálech Azure Synapse Analytics. Tento článek se týká mapování toků dat. Pokud s transformacemi začínáte, přečtěte si úvodní článek Transformace dat pomocí mapování toků dat.

Tip

Ekvivalentní transformace (dotazy sloučení) v toku dat Gen2 najdete v průvodci tokem dat Gen2 pro mapování uživatelů toku dat.

Pomocí transformace spojení můžete zkombinovat data ze dvou zdrojů nebo datových proudů v toku dat mapování. Výstupní datový proud obsahuje všechny sloupce z obou zdrojů, které jsou propojeny na základě podmínky spojení.

Typy spojení

Mapování toků dat aktuálně podporuje pět různých typů spojení.

Vnitřní spojení

Vnitřní spojení vypíše pouze řádky, které mají odpovídající hodnoty v obou tabulkách.

Levý vnější

Levé vnější spojení vrátí všechny řádky z levého datového proudu a odpovídající záznamy z pravého datového proudu. Pokud řádek z levého datového proudu neodpovídá, výstupní sloupce z pravého datového proudu jsou nastaveny na hodnotu NULL. Výstupem jsou řádky získané vnitřním spojením a neodpovídající řádky z levého datového proudu.

Poznámka:

Modul Spark používaný toky dat občas selže kvůli možným kartézským produktům v podmínkách spojení. Pokud k tomu dojde, můžete přepnout na vlastní křížové spojení a ručně zadat podmínku spojení. Výsledkem může být pomalejší výkon toků dat, protože prováděcí modul může potřebovat vypočítat všechny řádky z obou stran relace a potom filtrovat řádky.

Pravý vnější

Pravé vnější spojení vrátí všechny řádky z pravého datového proudu a odpovídající řádky z levého datového proudu. Pokud řádek z pravého datového proudu neodpovídá, výstupní sloupce z levého datového proudu jsou nastaveny na hodnotu NULL. Výstupem jsou řádky vrácené vnitřním spojením plus neporovnané řádky z pravé zóny.

Úplná vnější

Full outer join výstupuje všechny sloupce a řádky z obou stran s hodnotami NULL pro sloupce, které nejsou spárovány.

Vlastní křížový spoj

Křížové spojení generuje kartézský součin datových proudů na základě podmínky. Pokud používáte podmínku, která není rovnost, zadejte jako podmínku křížového spojení vlastní výraz. Výstupní stream obsahuje všechny řádky, které splňují podmínku spojení.

Tento typ spojení můžete použít pro neshodné spojení a OR podmínky.

Pokud chcete explicitně vytvořit úplný kartézský součin, použijte transformaci Derived Column v každém ze dvou nezávislých datových proudů před spojením pro vytvoření syntetického klíče pro shodování. Například vytvořte nový sloupec v Odvozeném sloupci v každém datovém proudu nazvaný SyntheticKey a nastavte ho jako rovný 1. Pak použijte a.SyntheticKey == b.SyntheticKey jako vlastní výraz spojení.

Poznámka:

Ujistěte se, že do vlastního křížového spojení zahrnete alespoň jeden sloupec z každého vztahu vlevo a vpravo. Provádění křížových spojení se statickými hodnotami místo sloupců na každé straně vede k úplnému prohledávání celé datové sady, což vede k špatnému výkonu toku dat.

Přibližné spojení dat

Můžete zvolit spojení na základě logiky přibližného spojení místo přesné shody hodnot sloupců zapnutím možnosti Použít přibližné shody.

  • Kombinování textových částí: Tuto možnost použijte k vyhledání shody odebráním mezery mezi slovy. Pokud je tato možnost povolená, služba Data Factory se například shoduje s DataFactory.
  • Sloupec skóre podobnosti: Volitelně můžete zvolit, jestli chcete uložit odpovídající skóre pro každý řádek ve sloupci zadáním nového názvu sloupce, do kterého chcete tuto hodnotu uložit.
  • Prahová hodnota podobnosti: Zvolte hodnotu mezi 60 a 100 jako procentuální shodu mezi hodnotami ve vybraných sloupcích.

Přibližné spojení

Poznámka:

Přibližné porovnávání v současné době funguje pouze s typy sloupců řetězců a s vnitřními, levými vnějšími a úplnými typy vnějšího spojení. Optimalizaci vysílání musíte vypnout při použití spojení s přibližným rozpoznáváním.

Konfigurace

  1. V rozevíracím seznamu Pravého proudu vyberte, ke kterému datovému proudu se připojujete.
  2. Vyberte typ spojení.
  3. Vyberte, které klíčové sloupce chcete pro podmínku spojení sladit. Ve výchozím nastavení tok dat hledá rovnost mezi jedním sloupcem v každém datovém toku. Pokud chcete porovnat vypočítanou hodnotu, najeďte myší na rozevírací seznam sloupce a vyberte Vypočítaný sloupec.

Snímek obrazovky transformace spojení

Spojení s nerovnostními podmínkami

Pokud chcete v podmínkách spojení použít podmíněný operátor, například nerovná se (!=) nebo větší než (>), změňte rozevírací políčko s operátorem mezi oběma sloupci. Spojení na základě nerovností vyžaduje, aby byl alespoň jeden ze dvou datových proudů přenášen pomocí pevného vysílání na kartě Optimalizace.

Nerovnostní spojení

Optimalizace výkonu spojení

Na rozdíl od sloučení spojení v nástrojích, jako je SSIS, transformace spojení není povinná operace sloučení spojení. Klíče spojení nevyžadují řazení. Operace spojení se provádí na základě optimální operace spojení ve Sparku, buď širokopásmové spojení, nebo spojení na straně mapování.

Optimalizace transformace spojení

Při spojeních, vyhledáváních a transformacích existujících podmínek můžete optimalizovat výkon povolením broadcastingu, pokud se jeden nebo oba datové proudy vejdou do paměti pracovního uzlu. Ve výchozím nastavení modul Spark automaticky rozhodne, jestli má vysílat jednu stranu. Pokud chcete ručně zvolit, která strana se má vysílat, vyberte Opraveno.

Nedoporučuje se zakázat vysílání prostřednictvím možnosti Vypnuto , pokud u spojení neběží chyby časového limitu.

Vlastní spojení

Pro vlastní připojení datového proudu k sobě samému použijte aliasování existujícího proudu pomocí transformačního výběru. Novou větev vytvoříte kliknutím na ikonu plus vedle transformace a výběrem možnosti Nová větev. Přidejte výběrovou transformaci pro alias původního datového proudu. Přidejte transformaci spojení a zvolte původní datový proud jako levý datový proud a transformaci výběru jako pravý datový proud.

Samojoin

Testování podmínek spojení

Při testování transformací spojení s náhledem dat v režimu ladění použijte malou sadu známých dat. Při vzorkování řádků z velké datové sady nemůžete předpovědět, které řádky a klíče se čtou pro účely testování. Výsledek je nedeterministický, což znamená, že podmínky spojení nemusí vrátit žádnou shodu.

Skript toku dat

Syntaxe

<leftStream>, <rightStream>
    join(
        <conditionalExpression>,
        joinType: { 'inner'> | 'outer' | 'left_outer' | 'right_outer' | 'cross' }
        broadcast: { 'auto' | 'left' | 'right' | 'both' | 'off' }
    ) ~> <joinTransformationName>

Příklad vnitřního spojení

Tento příklad je transformace spojení s názvem JoinMatchedData, která přebírá levý datový proud TripData a pravý datový proud TripFare. Podmínkou spojení je výraz hack_license == { hack_license} && TripData@medallion == TripFare@medallion && vendor_id == { vendor_id} && pickup_datetime == { pickup_datetime}, který vrátí hodnotu true, pokud se sloupce hack_license, medallion, vendor_id a pickup_datetime v každém datovém proudu shodují. To joinType je 'inner'. Povolujeme vysílání pouze v levém datovém proudu, takže broadcast má hodnotu 'left'.

V uživatelském rozhraní vypadá tato transformace takto:

Snímek obrazovky znázorňující transformaci s vybranou kartou Nastavení spojení a s typem spojení Inner

Skript toku dat pro tuto transformaci je v tomto fragmentu kódu:

TripData, TripFare
    join(
        hack_license == { hack_license}
        && TripData@medallion == TripFare@medallion
        && vendor_id == { vendor_id}
        && pickup_datetime == { pickup_datetime},
        joinType:'inner',
        broadcast: 'left'
    )~> JoinMatchedData

Příklad vlastního křížového spojení

Tento příklad je transformace spojení s názvem JoiningColumns, která přebírá levý datový proud LeftStream a pravý datový proud RightStream. Tato transformace přebírá dva datové proudy a spojuje všechny řádky, ve kterých je sloupec leftstreamcolumn větší než sloupec rightstreamcolumn. To joinType je cross. Vysílání není povoleno broadcast , má hodnotu 'none'.

V uživatelském rozhraní vypadá tato transformace takto:

Snímek obrazovky znázorňující transformaci s vybranou kartou Nastavení spojení a typem spojení Vlastní (křížový).

Skript toku dat pro tuto transformaci je v fragmentu kódu:

LeftStream, RightStream
    join(
        leftstreamcolumn > rightstreamcolumn,
        joinType:'cross',
        broadcast: 'none'
    )~> JoiningColumns

Po připojení dat vytvořte odvozený sloupec a přesměrujte svá data do cílového úložiště dat.