Spojení transformace při mapování toku dat

PLATÍ PRO: analýza Azure Data Factory Azure Synapse

Toky dat jsou dostupné jak v Azure Data Factory, tak v Azure Synapse Pipelines. Tento článek se týká mapování toků dat. Pokud s transformacemi začínáte, projděte si úvodní článek Transformace dat pomocí mapování toku dat.

Transformace spojení slouží ke kombinování dat ze dvou zdrojů nebo datových proudů v toku dat mapování. Výstupní datový proud bude obsahovat všechny sloupce z obou zdrojů, které odpovídají závislosti na podmínce spojení.

Typy spojení

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

Vnitřní spojení

Vnitřní spojení pouze vypíše řá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 nemá žádnou shodu, jsou výstupní sloupce z pravého datového proudu nastaveny na hodnotu NULL. Výstupem budou řádky vrácené vnitřním spojením a nepřipojenými řá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í. To může vést k pomalejšímu výkonu toků dat, protože spouště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í záznamy z levého streamu. Pokud řádek z pravého datového proudu nemá žádnou shodu, výstupní sloupce z levého datového proudu se nastaví na HODNOTU NULL. Výstupem budou řádky vrácené vnitřním spojením a nepřipojenými řádky z pravého datového proudu.

Úplná vnější

Úplné vnější spojení vypíše všechny sloupce a řádky z obou stran s hodnotami NULL pro sloupce, které se neshodují.

Vlastní křížové spojení

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

Tento typ spojení můžete použít pro spojení OR a podmínky nesouvisejí s koňmi.

Pokud chcete explicitně vytvořit úplný kartézský produkt, použijte transformaci odvozeného sloupce v každém ze dvou nezávislých datových proudů před spojením a vytvořte syntetický klíč, který se má shodovat. Vytvořte například nový sloupec v odvozeném sloupci v každém datovém proudu volaný SyntheticKey a nastavte ho na rovna 1. Pak použijte a.SyntheticKey == b.SyntheticKey jako vlastní výraz spojení.

Poznámka

Nezapomeňte do vlastního křížového spojení zahrnout alespoň jeden sloupec z každé strany levé a pravé relace. Provádění křížových spojení se statickými hodnotami místo sloupců z každé strany vede k úplnému prohledávání celé datové sady, což způsobuje, že tok dat bude fungovat špatně.

Fuzzy join

Můžete se rozhodnout, že se připojíte na základě logiky přibližného spojení místo přesné hodnoty sloupce tak, že zapnete možnost Použít přibližné porovnávání.

  • Kombinování textových částí: Pomocí této možnosti můžete najít shody odebráním mezer mezi slovy. Data Factory se například shoduje s DataFactory, pokud je tato možnost povolená.
  • Sloupec skóre podobnosti: Můžete volitelně zvolit, jestli chcete uložit odpovídající skóre pro každý řádek ve sloupci zadáním nového názvu sloupce, který tuto hodnotu uloží.
  • Prahová hodnota podobnosti: Vyberte hodnotu mezi 60 a 100 jako procentuální shodu mezi hodnotami ve sloupcích, které jste vybrali.

Fuzzy join

Poznámka

Přibližné porovnávání aktuálně 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í je nutné vypnout při použití přibližných shodných spojení.

Konfigurace

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

Screenshot of join Transformation

Spojení non-equi

Pokud chcete použít podmíněný operátor, například nerovná se (!=) nebo větší než (>) v podmínkách spojení, změňte rozevírací seznam operátoru mezi dvěma sloupci. Spojení bez equi vyžadují vysílání alespoň jednoho ze dvou datových proudů pomocí pevného vysílání na kartě Optimalizace .

Non-equi join

Optimalizace výkonu spojení

Na rozdíl od slučovacího spojení v nástrojích, jako je SSIS, transformace spojení není povinná operace sloučení spojení. Klíče spojení nevyžadují řazení. Operace spojení probíhá na základě optimální operace spojení ve Sparku, a to buď vysíláním, nebo spojením na straně mapy.

Join Transformation optimize

Ve spojeních vyhledávání a transformace existuje, pokud jeden nebo oba datové proudy odpovídají paměti pracovního uzlu, můžete optimalizovat výkon povolením vysílání. Ve výchozím nastavení se modul sparku automaticky rozhodne, jestli se má vysílat jedna strana. 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 vaše spojení neběží do chyb časového limitu.

Self-Join

Pokud chcete datový proud připojit sám o sobě, alias existující datový proud s vybraným transformací. Vytvořte novou větev kliknutím na ikonu plus vedle transformace a výběrem nové větve. Přidejte transformaci výběru pro alias původního datového proudu. Přidejte transformaci spojení a jako levý datový proud zvolte původní datový proud a jako pravý datový proud vyberte transformaci.

Self-join

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 budou číst pro testování. Výsledek není deterministický, což znamená, že podmínky spojení nemusí vracet žádné shody.

Skript toku dat

Syntax

<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í

Následující příklad je transformace spojení s názvem JoinMatchedData , která přebírá levý stream TripData a pravý stream TripFare. Podmínka 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 hack_licensehodnota , medallion, vendor_ida pickup_datetime sloupce v jednotlivých datových proudech shodují. 'inner'Je to joinType . Povolujeme vysílání pouze v levém streamu, takže broadcast má hodnotu 'left'.

V uživatelském rozhraní vypadá tato transformace jako na následujícím obrázku:

Screenshot shows the transformation with the Join Settings tab selected and a Join type of Inner.

Skript toku dat pro tuto transformaci je v následujícím 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í

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

V uživatelském rozhraní vypadá tato transformace jako na následujícím obrázku:

Screenshot shows the transformation with the Join Settings tab selected and a Join type of Custom (cross).

Skript toku dat pro tuto transformaci je v následujícím fragmentu kódu:

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

Další kroky

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