Zum Hauptinhalt springen
Weil einfach - produktiver ist

Der Daten Spezialist

Konvertieren Sie die Daten mühelos zwischen verschiedenen Formaten ohne Programmierkenntnisse dank Visual Designer. Effizient und super einfach.
Flowheater Chart

Parameterdatei speichern mit mehreren Feldern

Mehr
7 Jahre 4 Monate her #3253 von Matthias Peter
Parameterdatei speichern mit mehreren Feldern wurde erstellt von Matthias Peter
Hallo Robert,
ich benötige die Möglichkeit, bei div. Tabellen mit einem zusammengesetzten Primary Key, nur die geänderten Datensätze zu übermitteln.
d.h. es müssten die Primary Key Information der letzten Übertragung gespeichert werden, so dass beim nächsten Nachtlauf diese gespeicherte Information verglichen werden können. In der gleichen Abfrage sollen die übertragen werden mit dem Änderungsdatum >=getdate()-5.

Gruß Matthias Peter
purSoftware GmbH

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
7 Jahre 4 Monate her - 7 Jahre 4 Monate her #3254 von FlowHeater-Team
FlowHeater-Team antwortete auf Parameterdatei speichern mit mehreren Feldern
Hallo Matthias,

wenn deine Datenbasis einen Auto Inkrement Zähler oder aber eine Datumsfeld mit dem Erzeugungsdatum des Datensatzes hat ist das relativ einfach über FlowHeater Parameter und einem dynamischen SQL Statement auf der READ Seite umzusetzen.

z.B. SELECT * FROM tabellen_name WHERE ID > $LASTID$

so werden nur die seit der letzten Ausführung hinzugekommen Datensätze exportiert und verarbeitet.

So wie ich deine Frage verstehe ist bei Dir das aber nicht der Fall. Das unterstützt der FlowHeater noch nicht direkt, hierzu müsste ein kleines Skript für den .NET Script Heater verwendete werden.

Das Skript merkt sich die bereits verarbeiteten Datensätze anhand der dem Heater übergeben Eingangswerte. Diese Werte werden als Primary Key interpretiert und für die weitere Verwendung in einer separaten Textdatei (=Name = Name der Definition + Dateiendung .key) permanent gespeichert.
Wird die Definition ausgeführt liest das Skript diese Datei in eine interne HashTable ein um die bereits verarbeiteten Primary Key Werte zu erhalten. Pro Datensatz prüft dann das Skript ob dieser Schlüssel bereits verarbeitet wurde. Falls ja wird der Datensatz mittels des Filter Heater gefiltert, falls nein wird der Schlüssel in die Key/Schlüsseldatei für die weitere Verwendung weggeschrieben und der Datensatz wird anschließend ganz normal verarbeitet (nicht gefiltert).

Hinweis: Über diesen Mechanismus werden/müssen immer aller Daten der READ Seite verarbeitet werden. Besser bzw. performanter wäre es die Datenmenge bereits am SQL Server einzuschränken. Das ist natürlich nicht immer möglich!

Getestet wurde das Skript mit 1.000.000 Datensätzen auf der READ Seite. Die initiale Verarbeitung aller 1.000.000 Datensätze dauerte ca. eine Stunde. Ein anschließendes hinzufügen lediglich eines Datensatzes lief dann innerhalb einer Minute durch!

Im Anhang findest du eine kleines Beispiel, hier allerdings nicht SQL-Server bezogen sondern mit einfachen CSV Textdateien realisiert.

C# Skript um nur neue hinzugekommene Datensätze zu verarbeiten
Code:
string keyfile = String.Empty; Hashtable keys = new Hashtable(); public object DoWork() { if (keyfile.Length == 0) { // KeyFile anlegen, gleicher Dateiname wie Definition, Dateiendung = .key keyfile = Path.GetFileNameWithoutExtension(AdapterRead.Definition.Flow.FileName) + ".key"; // bereits vorhandene Schlüssel einlesen if (File.Exists(keyfile)) { StringReader reader = new StringReader(File.ReadAllText(keyfile)); while(true) { string line = reader.ReadLine(); if (line == null) break; keys.Add(line, null); } } } // Key/Schlüssel zusammenbauen string key = String.Empty; for (int i = 0; i < InValues.Length; i++) { if (key.Length != 0) key += " | "; if (InValues[i].GetValue() == null || InValues[i].GetValue() == DBNull.Value) key += "-null-"; else key += (string)InValues[i].GetString(); } // Prüfen ob Key/Schlüssel bereits verarbeitet wurde if (!keys.ContainsKey(key)) { // Key/Schlüssel noch nicht vorhanden, in Keyliste aufnehmen keys.Add(key, null); // nicht im Testmodus an Datei anfügen! if (!TestMode) File.AppendAllText(keyfile, key + Environment.NewLine); // noch nicht vorhanden, dieser Datensatz muss verarbeitet werden return false; } // Diesen Datensatz filtern return true; }

Dateianhang:

Dateiname: nur-neue-d...iten.zip
Dateigröße:3 KB

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Letzte Änderung: 7 Jahre 4 Monate her von FlowHeater-Team.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Ladezeit der Seite: 0.261 Sekunden
FlowHeater Logo

FlowHeater - Der Daten Spezialist

Effiziente Datenintegration und Transformation mit FlowHeater - Ihre Lösung für nahtlosen Datentransfer.

Rechtliches

Support & Kontakt

Kontaktinformation

Telefon:
0951 / 99339792

E-Mail:
Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.


Copyright © 2009-2024 by FlowHeater GmbH. Alle Rechte vorbehalten.