2017-07-11 2 views
1

Ich verwende Data Factory, um unseren Staging-Bereich zu erstellen. Das Problem tritt auf, wenn Quelldaten geändert werden. Wir fügen Staging-Tabellen eine neue Zeile hinzu.Behalten Sie nur die letzte Datenzeile in der Datenfactory

Zum Beispiel übernehmen wir folgende Daten:

ID   Fields    created    edited 
100  ----------  '2017-07-01'   '2017-07-05' 

dies wird in unserer Staging-Tabellen wie folgt gespeichert werden:

ID   Fields    created    edited 
    100  ----------  '2017-07-01'   null 
    100  ----------  '2017-07-01'   '2017-07-05' 

Auswahl der letzten Zeile ist teuer und wir don‘ Ich will das. Wie können Sie vermeiden, doppelte IDs im Staging zu speichern?

Ich nehme an, beim Erstellen der Pipelines sollte es eine Möglichkeit geben, die Daten zu aktualisieren, wenn die ID bereits im Staging vorhanden ist.
das Abfrage-Format in Daten Werk ist wie folgt:

$$Text.Format('select * from <<table>> where <<column>> >= \'{0:yyyy-MM-dd HH:mm}\' AND <<column>> < \'{1:yyyy-MM-dd HH:mm}\'', WindowStart, WindowEnd) 
+1

Sie könnten ein 'MERGE' machen etwas wie [dies] (https://docs.microsoft.com/en-us/azure/data-factory/data-factory-invoke-stored-procedure-from-copy- Aktivität)? – wBob

+0

Wenn vorhanden (wählen Sie 1 aus der Tabelle, wo ID = @ ID) update-Anweisung wo ID = @ id sonst Anweisung einfügen – JayaPrakash

Antwort

0

Ich habe eine Lösung für mein Problem gefunden. Es geht so:

Ich habe eine temporäre Tabelle in unser Data Warehouse hinzugefügt, bevor Daten in Staging eingefügt werden, erste Daten in diese temporären Tabellen kommen, ich entferne diejenigen, die bereits in Staging-Tabellen vorhanden sind, dann eine neue einfügen. Auf diese Weise werde ich immer die neuesten Daten im Staging-Bereich behalten, und ich werde nicht row_number() -Funktionen verwenden müssen, wenn ich Staging-Tabellen verbinde, um DW zu erstellen.

Ich bin mir nicht sicher, ob es der beste Ansatz ist, aber es funktioniert für mich.

0

Hier Ich denke, letzter Eintrag, der von bearbeiteten Spalt betrachtet wird, versuchen Sie dies unter Code

;WITH CTE (ID,Fields,created,edited) 
AS 
(
SELECT 100,'------------' ,'2017-07-01', null  UNION ALL 
SELECT 100,'------------ ','2017-07-01','2017-07-05' 
) 
SELECT ID,Fields,created,edited FROM 
(
SELECT *, ROW_NUMBER()OVER(Partition by ID ORDER BY edited DESC) RecentRecord FROM CTE 
)DT 
WHERE DT.RecentRecord=1 

Ergebnis

ID Fields   created  edited 
------------------------------------------ 
100 ------------ 2017-07-01 2017-07-05 
+0

Vielen Dank für Ihre Antwort, aber das ist nicht meine Frage. Hast du die Datenfabrik benutzt? – Ariox66

Verwandte Themen