ETL Tool

Testa2014

Lieutenant
Registriert
Dez. 2014
Beiträge
1.019
Moin zusammen,

ich brauch mal wieder eure Schwarmintelligenz.

Ich suche ein Tool, welches folgende Funktionen mitbringen soll/muss.
  • Daten
    • Transformieren
    • Mappen, auf Basis von regeln
    • Konvertieren
    • Die Strukturen können tief und verschachtelt sein. Es wird also etwas ähnliches wie xPath benötigt.
  • Einlesen aus
    • REST API
    • XML
    • JSON
  • schieben nach oData API
  • Keine Cloudlösung
  • Bibliothek (Node) oder Tool ist erstmal egal. Es sollte allerdings in einem Container auf dem Hyperscaler laufen können, für die Dauer der Extraction und Transformation. Demzufolge muss die konfig zum Start mitgegeben werden.
  • Irgendwas Richtung Open Source mit einer halbwegs aktiven Community. Es handelt sich um ein privates Projekt, demzufolge sind die Preise der großen und mächtigen Tools jenseits von gut und böse. Supportvertrags oä wird demzufolge nicht benötigt.
  • Ich stelle es mir so vor, ich gebe dem eine Ressource mit konfig. Die arbeitet er ab und schiebt es in ein Zwischenstand. Sobald er alle Daten verarbeitet hat, fängt der zweite Schritt an, der die Daten für das Ziel aufbereitet. Ich möchte für zukünftige Anpassungen möglichst flexibel sein. Deshalb passt mir dieses Load von den meisten Tools nicht ins Bild. Das wären dann je nach Anzahl der Quellen, auch eine entsprechende Anzahl von Anpassungen.
  • Der Container würde von extern getriggert werden, mit der konfig.
Auf meiner Recherche bin ich auf viele Tools gestoßen, entweder sind die utopisch kostenintensiv, haben Leistungen die ich gar nicht benötige, verwaiste Projekte oder lassen sich nicht mit meinem Ansatz umsetzen.

Habt Ihr Ideen oder Erfahrungen dazu?

Vielen Dank :)
 
Hast du mal Excel geprüft? Das hat eine sehr umfassende ETL Funktionalität mit PowerQuery und Co. Ansonsten würde man sich vermutlich einfach was eigenes bauen mit Ruby oder Python. Bei xPath klingelt was, das will man soweit ich mich entsinne eher vermeiden, jedenfalls gab es bei Ruby bessere parser.
 
BeBur schrieb:
Bei xPath klingelt was, das will man soweit ich mich entsinne eher vermeiden, jedenfalls gab es bei Ruby bessere parser.
was genau meinst du damit? XPath ist kein Parser fuer XML, was genau macht Ruby dann besser?
 
abcddcba schrieb:
was genau meinst du damit?
Ich hab noch nicht damit gearbeitet, beim zugehörigen Ruby gem 'nokogiri' war das eine Option mit xpath zu arbeiten, von der aber abgeraten wurde. Warum genau müsste ich nachschauen, ist schon eine Weile her.
 
Moin zusammen,

ich habe mir biml mal angeschaut, aber so richtig sehe ich da irgendwie kein Land. Das ich VS benötige ist eine weitere Hürde. Auch wenn C# Kenntnisse vorhanden sind, sehe ich es problematisch an, momentan ist alles darauf ausgelegt, rein mit jeder beliebigen IDE und dem Browser bearbeitbar zu sein. Man könnte das auch im Container kompilieren, wäre halt um einiges schwerer zu analysieren.

Excel, ich wüsste spontan nicht wie ich Excel in einen Container packen kann und dort laufen lass. Zumindest lizenzrechtlich ist Office-Lizenz und Cloud Teufelszeug.

Ja, ich glaube ich muss mein eigenes Skript doch erweitern (JS) oder auf Python ausweichen. Da gibts Bonbon oder so ähnlich, was ganz gut sein soll. Ich wollte das ganze nur möglichst schlank halten … geht wohl nicht.
 
Deine Eingangsbeschreibung ist sehr vage.
„Daten transformieren & mappen“

Hört sich für mich an, als ob man immer relativ Daten und Usecase spezifisch Anpassungen am Code und Config benötigt.
Würde daher generell mit Python arbeiten, weil wahrsch Performance „egal“ und Support von vielen Formaten benötigt?

Cloud usw geht ja dann easy mit Script im Docker
 
  • Gefällt mir
Reaktionen: BeBur
Testa2014 schrieb:
in einen Container packen
Wieso denn ein Container und Hyperscaler? Von wie vielen Daten sprechen wir hier?
Der normale Weg besteht darin, ein bisschen zu Coden in irgendeiner beliebigen Programmiersprache. Das nimmt dir ein Tool sowieso nur sehr begrenzt ab, du musst schließlich auch einem Tool ganz konkret sagen, was passieren soll.
So richtig passt das alles nicht zusammen was du schreibst, am besten du benennst mal konkret deinen Anwendungsfall.
 
  • Gefällt mir
Reaktionen: kuddlmuddl
Ja, es sind unterschiedliche XML Dateien und API's (JSON) die regelmäßig angesprochen werden um Daten zu extrahieren. Die auseinandergepflückt und in das richtige Format transferiert werden sollen. Am Ende soll es an eine API gesandt werden. Die Regeln sind teilweise Schnittstellenübergreifend. Um was es genau geht ist nebensächlich, es geht um die Aufgabe/Anforderung/Tipps (nicht falsch verstehen).

Laufzeit ist mir wirklich egal, ob er das nu jetzt oder in 10Min fertig hat ... das Ergebnis zählt.

Warum Container? Ich habe jeden Monat x Tage Kontingent auf einem Hyperscaler die ich dafür nutzen kann. Der würde den Container starten, abarbeiten und auf Wiedersehn sagen. Aus diesem Grund fallen Tools zur lokalen Installation etc. raus, auch in Anbetracht dessen das ich momentan dabei bin den Homeserver abzuschaffen und auf das wesentliche zu beschränken (wenns nicht ums Datengrab/Backup geht).

Von Arbeit kenne ich Tools (die ein halbes Vermögen kosten) in der die Mapping Regeln definiert werden und anschließend zugeordnet wird, alternativ mit Coding, externen Service etc ...
Ich möchte es nicht ganz so kompliziert haben. Einfach Daten aus XML Dateien und JSON API Lesen. Für die Felder ein Mapping definieren. Und ab an die API. Das Tool sollte die oben genannten Anforderungen erfüllen.

Der momentane Flow ist, ich habe eine JS Datei die ich aus der Entwicklungsumgebung starte. Diese zieht sich die Daten, mappt diese und schiebt sie in die API. Klar kann ich das jetzt für alle Schnittstellen und Dateien so anpassen. Meine Sorge ist nur, das mit der Zeit der Aufwand zu hoch wird. Ein Tool/Framework könnte da Abhilfe schaffen. Genau an diesem Punkt stehe ich eben, ich habe Stand jetzt eine API und auf dem Plan stehen 2 XML Dateien sowie eine weitere API.

Datenmenge, die eine API bei Initiallauf zirka eine Million Datensätze, anschließend je nach Lauf mal mehr oder weniger von Hundert in einer Woche. Die anderen momentanen Quellen haben sehr viel weniger. Ich will es dennoch so planen das es unabhängig läuft und jeder mit wenig Einarbeitung das ganze noch handeln kann. Heißt ja nicht das ich an dem Projekt in 2 Jahren noch arbeite. Da wäre ein Tool mit guter Doku und Community halt Gold wert.

Aber gut, ich seh schon. Ich muss mein Programm erweitern und dynamischer gestalten. Habe die Hoffnung auf was einheitliches mit einer gewissen Community gehabt. Wobei ich mir Bonobo nochmal genauer anschauen werde.
 
Testa2014 schrieb:
Um was es genau geht ist nebensächlich, es geht um die Aufgabe/Anforderung/Tipps (nicht falsch verstehen).
Bleiben halt viele Fragen offen. Z.B. wieso zum Teufel Hyperscaler?? Nimm dir einen RPI und lass das da drauf laufen. Oder lass es auf deinem heimischen Rechner laufen. Du schreibst du willst was simples, aber suchst gleichzeitig irgendwelche Tools und willst die dann in einem Container laufen lassen um die auf einem Hyperscaler laufen zu lassen den du aber gar nicht zum skalieren benutzen willst.
 
BeBur schrieb:
Bleiben halt viele Fragen offen. Z.B. wieso zum Teufel Hyperscaler?? Nimm dir einen RPI und lass das da drauf laufen. Oder lass es auf deinem heimischen Rechner laufen.
Habe ich oben geschrieben, aufgrund von Veränderungen in meinem Umfeld versuche ich alles auszulagern. Ich habe A momentan (und auf absehbare Zeit) nicht die Möglichkeit einen Server bei mir unterzubringen und B ist das Internet das nächste Problem. Deshalb auslagern und eine Abhängigkeit weniger schaffen. Die Container rennen, einmal gebaut, überall und das ist einer der größten Vorteile.
Wenn ich ein gewisses Kontingent bekomme, kann ich es auch dafür nutzen. Warum also die Leistung verschenken? Das Kontingent steht mir Stand jetzt, mindestens 3 Jahre zu.

Ich weiß das die Anwendung nicht skaliert. Mir geht es an dieser Stelle nur um das Image, das bereitgestellt, mit Parametern befüllt wird und seine Arbeit vollrichtet. Skalieren brauch da gar nichts (auch wenn es in diesem Kontext immer mit den HS in Kontext gesetzt wird). Es gibt auch Jobs die auf HS laufen, die nur irgendeine Aufgabe machen und dann sind die fertig. Nimm genau die Leistung die du in genau diesem Moment benötigst... und dafür sind HS super geeignet. Z.B. würde ich ein Kompilierungscontainer nicht 24h laufen lassen, nur dann wenn er wirklich was machen muss.

Das geht aber alles von der Fragestellung weg, da diese explizit um Tools/Frameworks ging, dich ich in einem Container laufen lassen kann.
 
Testa2014 schrieb:
Ich habe A momentan (und auf absehbare Zeit) nicht die Möglichkeit einen Server bei mir unterzubringen und B ist das Internet das nächste Problem.
Ein RPI ist kaum größer als ein Smartphone und der rennt auch ohne Probleme, genau wie ein Container. Du hast doch offensichtlich Internet, also passt das doch.
Testa2014 schrieb:
Deshalb auslagern und eine Abhängigkeit weniger schaffen.
Wenn du eine Applikation in einen Container packst auf einem Host wo nichts anderen drauf läuft, dann erhöhst du die Abhängigkeiten und verringerst sie nicht.

Testa2014 schrieb:
Warum also die Leistung verschenken?
Warum die Zeit verschenken, wo du die Leistung doch gar nicht abrufen wirst?

Testa2014 schrieb:
Nimm genau die Leistung die du in genau diesem Moment benötigst... und dafür sind HS super geeignet.
Die Leistung die du brauchst ist die eines RPI bzw. weniger, für "von 0 auf 0,1" ist das ziemlich sinnfrei.

Testa2014 schrieb:
Das geht aber alles von der Fragestellung weg, da diese explizit um Tools/Frameworks ging, dich ich in einem Container laufen lassen kann.
Bonobo ist auch nur ein Layer auf Python oben drauf. Kann man nutzen, kann man weglassen. Da du damit kein Problem lösen willst ist weglassen die sinnvolle Variante, denn ETL geht mit jeder verbreiteten Sprache out of the box.
 
BeBur schrieb:
Ein RPI ist kaum größer als ein Smartphone und der rennt auch ohne Probleme, genau wie ein Container. Du hast doch offensichtlich Internet, also passt das doch.
Ich weiß nicht warum ich das irgendjemand erzählen muss, aber ich bin die nächste Zeit im Ausland. Erstens habe ich nur mobiles Internet und zweitens werde ich sicherlich keinen Pi mit mir rumschleppen. Aber Danke, das wir auf die Frage näher eingehen.
BeBur schrieb:
Wenn du eine Applikation in einen Container packst auf einem Host wo nichts anderen drauf läuft, dann erhöhst du die Abhängigkeiten und verringerst sie nicht.
Da haben wir ein sehr unterschiedliches Bild von Abhängigkeit. Die einzigen Abhängigkeiten die ich Stand jetzt hätte, wäre meine Quelle, Ziel, und das Tool. Alles andere ist äußerst flexibel und austauschbar. Ich bin nicht an einen Dienst gebunden, Anbieterunabhängig, ...
BeBur schrieb:
Die Leistung die du brauchst ist die eines RPI bzw. weniger, für "von 0 auf 0,1" ist das ziemlich sinnfrei.
Ist mir egal, da ich das Kontingent nu mal habe, es würde sowieso nur der kleinste Typ zum Einsatz kommen, was in einen Kern + 1/2 GB RAM resultieren würde. Und wenn der in einer Minute statt 3 fertig ist, passt doch.
BeBur schrieb:
Bonobo ist auch nur ein Layer auf Python oben drauf.
Klar ist das was on the top, wie alles. wenn es aber Struktur, Einheitlichkeit, Funktionalität und Dokumentation mitbringt, passt das. Steht übrigens noch immer auf meiner Liste.
 
Zurück
Oben