Dela via


Inkrementell uppdatering i Dataflöde Gen2 (förhandsversion)

I den här artikeln introducerar vi inkrementell datauppdatering i Dataflow Gen2 för Microsoft Fabrics Data Factory. När du använder dataflöden för datainmatning och transformering finns det scenarier där du specifikt bara behöver uppdatera nya eller uppdaterade data, särskilt när dina data fortsätter att växa. Funktionen för inkrementell uppdatering åtgärdar detta behov genom att du kan minska uppdateringstiderna, förbättra tillförlitligheten genom att undvika tidskrävande åtgärder och minimera resursanvändningen.

Förutsättningar

Om du vill använda inkrementell uppdatering i Dataflow Gen2 måste du uppfylla följande krav:

  • Du måste ha en infrastrukturkapacitet.
  • Datakällan stöder vikning (rekommenderas) och måste innehålla en Date/DateTime-kolumn som kan användas för att filtrera data.
  • Du bör ha ett datamål som stöder inkrementell uppdatering. Mer information finns i Målsupport.
  • Kontrollera att du har granskat begränsningarna för inkrementell uppdatering innan du kommer igång. Mer information finns i Begränsningar.

Stöd för mål

Följande datamål stöds för inkrementell uppdatering:

  • Infrastrukturlager
  • Azure SQL Database
  • Azure Synapse Analytics

Andra mål som Lakehouse kan användas i kombination med inkrementell uppdatering med hjälp av en andra fråga som refererar till mellanlagrade data för att uppdatera datamålet. På så sätt kan du fortfarande använda inkrementell uppdatering för att minska mängden data som behöver bearbetas och hämtas från källsystemet. Men du måste göra en fullständig uppdatering från mellanlagrade data till datamålet.

Så här använder du inkrementell uppdatering

  1. Skapa ett nytt Dataflöde Gen2 eller öppna ett befintligt Dataflöde Gen2.

  2. I dataflödesredigeraren skapar du en ny fråga som hämtar de data som du vill uppdatera stegvis.

  3. Kontrollera dataförhandsgranskningen för att se till att frågan returnerar data som innehåller en DateTime-, Date- eller DateTimeZone-kolumn som du kan använda för att filtrera data.

  4. Se till att frågan helt viks, vilket innebär att frågan är helt nedtryckt till källsystemet. Om frågan inte helt viks måste du ändra frågan så att den helt viks. Du kan se till att frågan helt viks genom att kontrollera frågestegen i frågeredigeraren.

    Skärmbild av frågeredigeraren i Dataflow Gen2.

  5. Högerklicka på frågan och välj Inkrementell uppdatering.

    Skärmbild av den nedrullningsbara menyn i Dataflöde Gen2.

  6. Ange de inställningar som krävs för inkrementell uppdatering.

    Skärmbild av inkrementella uppdateringsinställningar.

    1. Välj en DateTime-kolumn att filtrera efter.
    2. Extrahera data från det förflutna.
    3. Bucketstorlek.
    4. Extrahera endast nya data när det maximala värdet i den här kolumnen ändras.
  7. Konfigurera de avancerade inställningarna om det behövs.

    1. Kräv inkrementell uppdateringsfråga för att helt vika.
  8. Spara inställningarna genom att välja OK .

  9. Om du vill kan du nu konfigurera ett datamål för frågan. Se till att du gör den här installationen före den första inkrementella uppdateringen, eftersom ditt datamål annars bara innehåller inkrementellt ändrade data sedan den senaste uppdateringen.

  10. Publicera Dataflöde Gen2.

När du har konfigurerat inkrementell uppdatering uppdaterar dataflödet automatiskt data stegvis baserat på de inställningar som du angav. Dataflödet hämtar bara de data som har ändrats sedan den senaste uppdateringen. Därför körs dataflödet snabbare och förbrukar mindre resurser.

Så här fungerar inkrementell uppdatering i bakgrunden

Inkrementell uppdatering fungerar genom att dela upp data i bucketar baserat på kolumnen DateTime. Varje bucket innehåller de data som har ändrats sedan den senaste uppdateringen. Dataflödet vet vad som har ändrats genom att kontrollera det maximala värdet i den kolumn som du har angett. Om det maximala värdet har ändrats för den bucketen hämtar dataflödet hela bucketen och ersätter data i målet. Om det maximala värdet inte ändrades hämtar dataflödet inga data. Följande avsnitt innehåller en översikt på hög nivå över hur inkrementell uppdatering fungerar steg för steg.

Första steget: Utvärdera ändringarna

När dataflödet körs utvärderas först ändringarna i datakällan. Den gör den här utvärderingen genom att jämföra det maximala värdet i kolumnen DateTime med det maximala värdet i föregående uppdatering. Om det maximala värdet har ändrats eller om det är den första uppdateringen markerar dataflödet bucketen som ändrad och visar den för bearbetning. Om det maximala värdet inte ändrades hoppar dataflödet över bucketen och bearbetar den inte.

Andra steget: Hämta data

Nu är dataflödet redo att hämta data. Den hämtar data för varje bucket som har ändrats. Dataflödet gör den här hämtningen parallellt för att förbättra prestandan. Dataflödet hämtar data från källsystemet och läser in dem i mellanlagringsområdet. Dataflödet hämtar bara de data som finns inom bucketintervallet. Med andra ord hämtar dataflödet bara de data som har ändrats sedan den senaste uppdateringen.

Sista steget: Ersätt data i datamålet

Dataflödet ersätter data i målet med nya data. Dataflödet använder replace metoden för att ersätta data i målet. Dataflödet tar först bort data i målet för bucketen och infogar sedan nya data. Dataflödet påverkar inte de data som ligger utanför bucketintervallet. Om du har data i målet som är äldre än den första bucketen påverkar den inkrementella uppdateringen inte dessa data på något sätt.

Förklaring av inkrementella uppdateringsinställningar

För att konfigurera inkrementell uppdatering måste du ange följande inställningar.

Skärmbild av inkrementella uppdateringsinställningar.

Allmänna inställningar

De allmänna inställningarna krävs och anger den grundläggande konfigurationen för inkrementell uppdatering.

Välj en DateTime-kolumn att filtrera efter

Den här inställningen krävs och anger den kolumn som dataflöden använder för att filtrera data. Den här kolumnen ska vara antingen en DateTime-, Date- eller DateTimeZone-kolumn. Dataflödet använder den här kolumnen för att filtrera data och hämtar endast de data som har ändrats sedan den senaste uppdateringen.

Extrahera data från det förflutna

Den här inställningen krävs och anger hur långt tillbaka i tiden dataflödet ska extrahera data. Den här inställningen används för att hämta den första datainläsningen. Dataflödet hämtar alla data från källsystemet som ligger inom det angivna tidsintervallet. Möjliga värden är:

  • x dagar
  • x veckor
  • x månader
  • x kvartal
  • x år

Om du till exempel anger 1 månad hämtar dataflödet alla nya data från källsystemet som finns under den senaste månaden.

Bucketstorlek

Den här inställningen krävs och anger storleken på de bucketar som dataflödet använder för att filtrera data. Dataflödet delar upp data i bucketar baserat på kolumnen DateTime. Varje bucket innehåller de data som har ändrats sedan den senaste uppdateringen. Bucketstorleken avgör hur mycket data som bearbetas i varje iteration. En mindre bucketstorlek innebär att dataflödet bearbetar mindre data i varje iteration, men det innebär också att fler iterationer krävs för att bearbeta alla data. En större bucketstorlek innebär att dataflödet bearbetar mer data i varje iteration, men det innebär också att färre iterationer krävs för att bearbeta alla data.

Extrahera endast nya data när det maximala värdet i den här kolumnen ändras

Den här inställningen krävs och anger den kolumn som dataflödet använder för att avgöra om data har ändrats. Dataflödet jämför det maximala värdet i den här kolumnen med det maximala värdet i föregående uppdatering. Om det maximala värdet ändras hämtar dataflödet de data som ändrats sedan den senaste uppdateringen. Om det maximala värdet inte ändras hämtar dataflödet inga data.

Extrahera endast data för avslutade perioder

Den här inställningen är valfri och anger om dataflödet endast ska extrahera data för avslutade perioder. Om den här inställningen är aktiverad extraherar dataflödet endast data för perioder som har avslutats. Dataflödet extraherar därför endast data för perioder som är fullständiga och inte innehåller några framtida data. Om den här inställningen är inaktiverad extraherar dataflödet data för alla perioder, inklusive perioder som inte är fullständiga och innehåller framtida data.

Om du till exempel har en DateTime-kolumn som innehåller datumet för transaktionen och du bara vill uppdatera hela månader kan du aktivera den här inställningen i kombinationer med bucketstorleken month. Därför extraherar dataflödet endast data för hela månader och extraherar inte data för ofullständiga månader.

Avancerade inställningar

Vissa inställningar anses vara avancerade och krävs inte för de flesta scenarier.

Kräv inkrementell uppdateringsfråga för att helt vika

Den här inställningen är valfri och anger om frågan som används för inkrementell uppdatering måste vikas helt. Om den här inställningen är aktiverad måste frågan som används för inkrementell uppdatering helt vikas. Med andra ord måste frågan tryckas ned helt till källsystemet. Om den här inställningen är inaktiverad behöver frågan som används för inkrementell uppdatering inte helt vikas. I det här fallet kan frågan delvis push-överföras till källsystemet. Vi rekommenderar starkt att du aktiverar den här inställningen för att förbättra prestanda för att undvika att hämta onödiga och ofiltrerade data.

Begränsningar

Endast SQL-baserade datamål stöds

För närvarande stöds endast SQL-baserade datamål för inkrementell uppdatering. Därför kan du bara använda Fabric Warehouse, Azure SQL Database eller Azure Synapse Analytics som datamål för inkrementell uppdatering. Orsaken till den här begränsningen är att dessa datamål stöder de SQL-baserade åtgärder som krävs för inkrementell uppdatering. Vi använder åtgärderna Ta bort och Infoga för att ersätta data i datamålet, vilket inte kan göras parallellt på andra datamål.

Datamålet måste vara inställt på ett fast schema

Datamålet måste vara inställt på ett fast schema, vilket innebär att schemat för tabellen i datamålet måste vara fast och inte kan ändras. Om schemat för tabellen i datamålet är inställt på dynamiskt schema måste du ändra det till ett fast schema innan du konfigurerar inkrementell uppdatering.

Den enda uppdateringsmetod som stöds i datamålet är replace

Den enda uppdateringsmetod som stöds i datamålet är replace, vilket innebär att dataflödet ersätter data för varje bucket i datamålet med nya data. Data som ligger utanför bucketintervallet påverkas dock inte. Om du har data i datamålet som är äldre än den första bucketen påverkar den inkrementella uppdateringen inte dessa data på något sätt.

Maximalt antal bucketar är 50 för en enskild fråga och 150 för hela dataflödet

Det maximala antalet bucketar per fråga som dataflödet stöder är 50. Om du har fler än 50 bucketar måste du öka bucketstorleken eller minska bucketintervallet för att minska antalet bucketar. För hela dataflödet är det maximala antalet bucketar 150. Om du har fler än 150 bucketar i dataflödet måste du minska antalet inkrementella uppdateringsfrågor eller öka bucketstorleken för att minska antalet bucketar.

Skillnader mellan inkrementell uppdatering i Dataflöde Gen1 och Dataflöde Gen2

Mellan Dataflow Gen1 och Dataflow Gen2 finns det vissa skillnader i hur inkrementell uppdatering fungerar. I följande lista förklaras de största skillnaderna mellan inkrementell uppdatering i Dataflöde Gen1 och Dataflöde Gen2.

  • Inkrementell uppdatering är nu en förstklassig funktion i Dataflow Gen2. I Dataflöde Gen1 var du tvungen att konfigurera inkrementell uppdatering när du publicerade dataflödet. I Dataflow Gen2 är inkrementell uppdatering nu en förstklassig funktion som du kan konfigurera direkt i dataflödesredigeraren. Den här funktionen gör det enklare att konfigurera inkrementell uppdatering och minskar risken för fel.
  • I Dataflöde Gen1 var du tvungen att ange det historiska dataintervallet när du konfigurerade inkrementell uppdatering. I Dataflöde Gen2 behöver du inte ange det historiska dataområdet. Dataflödet tar inte bort några data från målet som ligger utanför bucketintervallet. Om du har data i målet som är äldre än den första bucketen påverkar den inkrementella uppdateringen inte dessa data på något sätt.
  • I Dataflöde Gen1 var du tvungen att ange parametrarna för den inkrementella uppdateringen när du konfigurerade inkrementell uppdatering. I Dataflöde Gen2 behöver du inte ange parametrarna för den inkrementella uppdateringen. Dataflödet lägger automatiskt till filter och parametrar som det sista steget i frågan. Därför behöver du inte ange parametrarna för den inkrementella uppdateringen manuellt.

Vanliga frågor

Jag fick en varning om att jag använde samma kolumn för att identifiera ändringar och filtrering. Vad betyder det?

Om du får en varning om att du använde samma kolumn för att identifiera ändringar och filtrering, innebär det att kolumnen som du angav för att identifiera ändringar också används för att filtrera data. Vi rekommenderar inte den här användningen eftersom det kan leda till oväntade resultat. I stället rekommenderar vi att du använder en annan kolumn för att identifiera ändringar och filtrera data. Om data flyttas mellan bucketar kanske dataflödet inte kan identifiera ändringarna korrekt och kan skapa duplicerade data i målet. Du kan lösa den här varningen med hjälp av en annan kolumn för att identifiera ändringar och filtrera data. Eller så kan du ignorera varningen om du är säker på att data inte ändras mellan uppdateringarna för den kolumn som du har angett.

Jag vill använda inkrementell uppdatering med ett datamål som inte stöds. Vad ska jag göra?

Om du vill använda inkrementell uppdatering med ett datamål som inte stöds kan du aktivera inkrementell uppdatering av frågan och använda en andra fråga som refererar till mellanlagrade data för att uppdatera datamålet. På så sätt kan du fortfarande använda inkrementell uppdatering för att minska mängden data som behöver bearbetas och hämtas från källsystemet, men du måste göra en fullständig uppdatering från mellanlagrade data till datamålet. Se till att du konfigurerar fönstret och bucketstorleken korrekt eftersom vi inte garanterar att data i mellanlagringen behålls utanför bucketintervallet.

Hur gör jag för att veta om min fråga har inkrementell uppdatering aktiverad?

Du kan se om din fråga har inkrementell uppdatering aktiverad genom att kontrollera ikonen bredvid frågan i dataflödesredigeraren. Om ikonen innehåller en blå triangel aktiveras inkrementell uppdatering. Om ikonen inte innehåller en blå triangel aktiveras inte inkrementell uppdatering.

Min källa får för många begäranden när jag använder inkrementell uppdatering. Vad ska jag göra?

Vi har lagt till en inställning som gör att du kan ange det maximala antalet parallella frågeutvärderingar. Den här inställningen finns i de globala inställningarna för dataflödet. Genom att ange det här värdet till ett lägre tal kan du minska antalet begäranden som skickas till källsystemet. Den här inställningen kan bidra till att minska antalet samtidiga begäranden och förbättra källsystemets prestanda. Om du vill ange det maximala antalet parallella frågekörningar går du till de globala inställningarna för dataflödet, navigerar till fliken Skala och anger det maximala antalet parallella frågeutvärderingar. Vi rekommenderar att du inte aktiverar den här gränsen om du inte får problem med källsystemet.

Skärmbild av inställningarna för samtidighetskontroll för dataflöde.

Jag vill använda inkrementell uppdatering, men jag ser att dataflödet tar längre tid att uppdatera efter aktiveringen. Vad ska jag göra?

Inkrementell uppdatering, enligt beskrivningen i den här artikeln, är utformad för att minska mängden data som behöver bearbetas och hämtas från källsystemet. Men om dataflödet tar längre tid att uppdatera när du har aktiverat inkrementell uppdatering kan det bero på att den extra kostnaden för att kontrollera om data har ändrats och bearbetningen av bucketarna är högre än den tid som sparats genom bearbetning av mindre data. I det här fallet rekommenderar vi att du granskar inställningarna för inkrementell uppdatering och justerar dem så att de passar ditt scenario bättre. Du kan till exempel öka bucketstorleken för att minska antalet bucketar och kostnaderna för att bearbeta dem. Du kan också minska antalet bucketar genom att öka bucketstorleken. Om du fortfarande har låga prestanda när du har justerat inställningarna kan du inaktivera inkrementell uppdatering och använda en fullständig uppdatering i stället eftersom det kan vara mer effektivt i ditt scenario.

Nästa steg