Dela via


Koppla transformering i mappning av dataflöde

GÄLLER FÖR: Azure Data Factory Azure Synapse Analytics

Dricks

Prova Data Factory i Microsoft Fabric, en allt-i-ett-analyslösning för företag. Microsoft Fabric omfattar allt från dataflytt till datavetenskap, realtidsanalys, business intelligence och rapportering. Lär dig hur du startar en ny utvärderingsversion kostnadsfritt!

Dataflöden är tillgängliga både i Azure Data Factory och Azure Synapse Pipelines. Den här artikeln gäller för mappning av dataflöden. Om du är nybörjare på transformeringar kan du läsa den inledande artikeln Transformera data med hjälp av ett mappningsdataflöde.

Använd kopplingstransformeringen för att kombinera data från två källor eller strömmar i ett mappningsdataflöde. Utdataströmmen innehåller alla kolumner från båda källorna som matchas baserat på ett kopplingsvillkor.

Kopplingstyper

Mappning av dataflöden stöder för närvarande fem olika kopplingstyper.

Inre koppling

Inre koppling matar endast ut rader som har matchande värden i båda tabellerna.

Vänster yttre

Vänster yttre koppling returnerar alla rader från den vänstra strömmen och matchade poster från den högra strömmen. Om en rad från den vänstra strömmen inte har någon matchning anges utdatakolumnerna från den högra strömmen till NULL. Utdata är de rader som returneras av en inre koppling plus de omatchade raderna från den vänstra strömmen.

Kommentar

Spark-motorn som används av dataflöden misslyckas ibland på grund av möjliga kartesiska produkter i dina kopplingsvillkor. Om detta inträffar kan du växla till en anpassad korskoppling och manuellt ange ditt kopplingsvillkor. Detta kan leda till långsammare prestanda i dina dataflöden eftersom körningsmotorn kan behöva beräkna alla rader från båda sidor av relationen och sedan filtrera rader.

Höger yttre

Höger yttre koppling returnerar alla rader från den högra strömmen och matchade poster från den vänstra strömmen. Om en rad från den högra strömmen inte har någon matchning är utdatakolumnerna från den vänstra dataströmmen inställda på NULL. Utdata blir de rader som returneras av en inre koppling plus de omatchade raderna från rätt ström.

Fullständig yttre

Fullständig yttre koppling matar ut alla kolumner och rader från båda sidor med NULL-värden för kolumner som inte matchas.

Anpassad korskoppling

Korskoppling matar ut korsprodukten av de två strömmarna baserat på ett villkor. Om du använder ett villkor som inte är likhet anger du ett anpassat uttryck som villkor för korskoppling. Utdataströmmen är alla rader som uppfyller kopplingsvillkoret.

Du kan använda den här kopplingstypen för icke-equi-kopplingar och OR villkor.

Om du uttryckligen vill skapa en fullständig kartesisk produkt använder du transformeringen Härledd kolumn i var och en av de två oberoende strömmarna före kopplingen för att skapa en syntetisk nyckel som ska matchas på. Skapa till exempel en ny kolumn i Härledd kolumn i varje ström som heter SyntheticKey och ange den som 1. Använd a.SyntheticKey == b.SyntheticKey sedan som ditt anpassade kopplingsuttryck.

Kommentar

Se till att inkludera minst en kolumn från varje sida av din vänstra och högra relation i en anpassad korskoppling. Att köra korskopplingar med statiska värden i stället för kolumner från varje sida resulterar i fullständiga genomsökningar av hela datamängden, vilket gör att dataflödet fungerar dåligt.

Fuzzy-koppling

Du kan välja att ansluta baserat på fuzzy-kopplingslogik i stället för exakt kolumnvärdesmatchning genom att aktivera kryssrutan "Använd fuzzy-matchning".

  • Kombinera textdelar: Använd det här alternativet för att hitta matchningar genom att ta bort blanksteg mellan ord. Data Factory matchas till exempel med DataFactory om det här alternativet är aktiverat.
  • Likhetspoängkolumn: Du kan välja att lagra matchande poäng för varje rad i en kolumn genom att ange ett nytt kolumnnamn här för att lagra det värdet.
  • Likhetströskel: Välj ett värde mellan 60 och 100 som en procentuell matchning mellan värden i de kolumner som du har valt.

Fuzzy-koppling

Kommentar

Fuzzy-matchning fungerar för närvarande endast med strängkolumntyper och med inre, vänster yttre och fullständiga yttre kopplingstyper. Du måste inaktivera sändningsoptimeringen när du använder fuzzing matchande kopplingar.

Konfiguration

  1. Välj vilken dataström du ansluter till i listrutan Höger ström .
  2. Välj din kopplingstyp
  3. Välj vilka nyckelkolumner du vill matcha för ditt kopplingsvillkor. Som standard söker dataflödet efter likhet mellan en kolumn i varje dataström. Om du vill jämföra via ett beräknat värde hovra över listrutan kolumn och välj Beräknad kolumn.

Skärmbild av kopplingstransformering

Icke-equi-kopplingar

Om du vill använda en villkorsstyrd operator som inte är lika med (!=) eller större än (>) i kopplingsvillkoren ändrar du listrutan operator mellan de två kolumnerna. Icke-equi-kopplingar kräver att minst en av de två strömmarna sänds med fasta sändningar på fliken Optimera.

Icke-equi-koppling

Optimera kopplingsprestanda

Till skillnad från sammanslagningskoppling i verktyg som SSIS är kopplingstransformeringen inte en obligatorisk kopplingsåtgärd. Kopplingsnycklarna kräver inte sortering. Kopplingsåtgärden sker baserat på den optimala kopplingsåtgärden i Spark, antingen broadcast- eller map-side join.

Optimering av kopplingstransformering

I kopplingar, sökningar och finns transformering, om en eller båda dataströmmarna passar in i arbetsnodminnet, kan du optimera prestanda genom att aktivera Sändning. Spark-motorn avgör som standard automatiskt om en sida ska sändas eller inte. Om du vill välja vilken sida som ska sändas manuellt väljer du Fast.

Vi rekommenderar inte att du inaktiverar sändning via alternativet Av om inte dina kopplingar får timeout-fel.

Självkoppling

Om du vill koppla en dataström själv till sig själv kan du alias en befintlig dataström med en select-transformering. Skapa en ny gren genom att klicka på plusikonen bredvid en transformering och välja Ny gren. Lägg till en select transformation för att alias den ursprungliga strömmen. Lägg till en kopplingstransformering och välj den ursprungliga strömmen som vänsterström och välj transformering som högerström.

Självkoppling

Testa kopplingsvillkor

När du testar kopplingstransformeringar med dataförhandsvisning i felsökningsläge använder du en liten uppsättning kända data. När du samplar rader från en stor datamängd kan du inte förutsäga vilka rader och nycklar som ska läsas för testning. Resultatet är icke-deterministiskt, vilket innebär att dina kopplingsvillkor kanske inte returnerar några matchningar.

Dataflödesskript

Syntax

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

Exempel på inre koppling

Exemplet nedan är en kopplingstransformering med namnet JoinMatchedData som tar vänster ström TripData och högerström TripFare. Kopplingsvillkoret är det uttryck hack_license == { hack_license} && TripData@medallion == TripFare@medallion && vendor_id == { vendor_id} && pickup_datetime == { pickup_datetime} som returnerar sant om kolumnerna hack_license, medallion, vendor_idoch pickup_datetime i varje dataström matchar. joinType är 'inner'. Vi aktiverar sändning i endast den vänstra dataströmmen så broadcast har värdet 'left'.

I användargränssnittet ser den här omvandlingen ut som bilden nedan:

Skärmbild som visar omvandlingen med fliken Kopplingsinställningar markerad och en kopplingstyp för Inre.

Dataflödesskriptet för den här omvandlingen finns i kodfragmentet nedan:

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

Exempel på anpassad korskoppling

Exemplet nedan är en kopplingstransformering med namnet JoiningColumns som tar vänster ström LeftStream och högerström RightStream. Den här omvandlingen tar in två strömmar och sammanfogar alla rader där kolumnen leftstreamcolumn är större än kolumnen rightstreamcolumn. joinType är cross. Sändning är inte aktiverat broadcast har värdet 'none'.

I användargränssnittet ser den här omvandlingen ut som bilden nedan:

Skärmbild som visar omvandlingen med fliken Kopplingsinställningar markerad och en kopplingstyp för Anpassad (kors).

Dataflödesskriptet för den här omvandlingen finns i kodfragmentet nedan:

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

När du har anslutit data skapar du en härledd kolumn och sänker dina data till ett måldatalager.