2016-01-14 5 views
7

Wir haben eine einzige Streaming-Ereignisquelle mit Tausenden von Ereignissen pro Sekunde. Diese Ereignisse sind alle mit einer ID gekennzeichnet, zu welcher unserer zehntausenden Kunden das Ereignis gehört. Wir möchten diese Ereignisquelle verwenden, um ein Data Warehouse zu füllen (im Streaming-Modus). Allerdings ist unsere Ereignisquelle nicht persistent. Daher möchten wir auch die Rohdaten in GCS archivieren, damit wir sie durch unsere Daten wiedergeben können Warehouse-Pipeline, wenn wir eine Änderung vornehmen, die es erfordert. Aufgrund der Anforderungen zur Datenaufbewahrung müssen alle Rohdaten, die wir beibehalten, vom Kunden partitioniert werden, damit wir sie problemlos löschen können.Schreiben der Ausgabe einer Dataflow-Pipeline in ein partitioniertes Ziel

Was wäre der einfachste Weg, dies in Dataflow zu lösen? Derzeit erstellen wir einen Datenfluss-Job mit einer benutzerdefinierten Senke, die die Daten pro Kunde in GCS/BigQuery in Dateien schreibt. Ist das sinnvoll?

Antwort

1

Um den Dateinamen und Pfad anzugeben, siehe TextIO documentation. Sie würden dem Ausgabeschreiber den Dateinamen/Pfad usw. zur Verfügung stellen.

Für Ihren Anwendungsfall mehrerer Ausgabedateien können Sie die Partition-Funktion verwenden, um mehrere PCollections aus einer einzigen Quelle PCollection zu erstellen.

+0

Ich glaube nicht, dass ich etwas über die Partitionierung der Ausgabe hier sehe, fehlt mir etwas? – Narek

+0

Sie können Strings für den Dateinamen/Pfad mit den verfügbaren Daten konstruieren. Es kommt darauf an, die Pipeline ordnungsgemäß zu erstellen, damit die Daten verfügbar sind, wenn Sie das Ausgabeverzeichnis/den Dateinamen erstellen möchten. – Nick

+0

Das Problem ist, dass TextIO.Write nimmt nur eine PCollection und innerhalb einer PCollection, habe ich Zeilen, die Hunderte von Partitionen entsprechen. – Narek

Verwandte Themen