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?
Ich glaube nicht, dass ich etwas über die Partitionierung der Ausgabe hier sehe, fehlt mir etwas? – Narek
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
Das Problem ist, dass TextIO.Write nimmt nur eine PCollection und innerhalb einer PCollection, habe ich Zeilen, die Hunderte von Partitionen entsprechen. – Narek