Wie kann ich Dataflow so konfigurieren, dass die BigQuery-Tabellenpartition dynamisch festgelegt wird - basierend auf den eingehenden Daten?Datenfluss zum Festlegen der BigQuery-Partition basierend auf den Daten
0
A
Antwort
1
Der Ansatz, den ich nahm folgt:
- Stellen Sie das Fenster für den eingehenden Datensatz
Konvertieren das Fenster in den Tabellennamen
p.apply(PubsubIO.Read .subscription(subscription) .withCoder(TableRowJsonCoder.of()) ) .apply(Window.into(new TablePartitionWindowFn())) .apply(BigQueryIO.Write .to(new DayPartitionFunc(dataset, table)) .withSchema(schema) .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND) );
das Fenster Einstellung basierend auf Bei den eingehenden Daten kann das Ende Instant ignoriert werden, da der Startwert zum Festlegen der Partition verwendet wird:
public class TablePartitionWindowFn extends NonMergingWindowFn<Object, IntervalWindow> {
private IntervalWindow assignWindow(AssignContext context) {
TableRow source = (TableRow) context.element();
String dttm_str = (String) source.get("DTTM");
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd").withZoneUTC();
Instant start_point = Instant.parse(dttm_str,formatter);
Instant end_point = start_point.withDurationAdded(1000, 1);
return new IntervalWindow(start_point, end_point);
};
Einstellen der Tabellenpartition dynamisch:
public class DayPartitionFunc implements SerializableFunction<BoundedWindow, String> {
String destination = "";
public DayPartitionFunc(String dataset, String table) {
this.destination = dataset + "." + table+ "$";
}
@Override
public String apply(BoundedWindow boundedWindow) {
// The cast below is safe because CalendarWindows.days(1) produces IntervalWindows.
String dayString = DateTimeFormat.forPattern("yyyyMMdd")
.withZone(DateTimeZone.UTC)
.print(((IntervalWindow) boundedWindow).start());
return destination + dayString;
}}
Lassen Sie mich wissen, ob es einen besseren Weg, um das gleiche Ergebnis zu erzielen.
Verwandte Themen
- 1. QComboBox - Ausgewähltes Element basierend auf den Daten des Elements festlegen
- 2. Festlegen des Zeitlimits basierend auf der Abfrage
- 3. Alles zum Festlegen der Standardpapiergröße basierend auf dem Gebietsschema?
- 4. Finde den Feldtyp basierend auf den Daten
- 5. UITableView: Festlegen der Höhe der Tabellenkopfansicht basierend auf der Bildschirmgröße
- 6. Festlegen der expliziten modalen Breite basierend auf der Inhaltslänge
- 7. Anzeigen von Daten basierend auf den Bedingungen
- 8. Wie kann ich den Datenfluss mit Daten verfolgen?
- 9. Festlegen der Eigenschaft basierend auf der Systemarchitektur in Burn
- 10. Festlegen der Standardrolle mit Enum basierend auf der Projekterstellung
- 11. Festlegen von VS DefaultLocation basierend auf Erstellungskonfiguration
- 12. Festlegen des Standardbildtitels basierend auf dem Beitragstitel
- 13. Registertitel auf Javascript festlegen window.open zum Anzeigen der PDF-Datei
- 14. Vertex-Pufferdaten zum Array-Vertex-Datenfluss
- 15. Excel: Kann ich den Etikettenabstand auf der X-Achse basierend auf seiner Etikettennummer festlegen?
- 16. Festlegen der href-Eigenschaft dynamisch basierend auf einer Teilseite
- 17. SSIS-Fehler für den einfachen CSV-Datenfluss
- 18. Festlegen der Hintergrundfarbe basierend auf Bool-Eigenschaft in WPF
- 19. Entwurfsmusterempfehlung für den unten genannten ssis-Datenfluss
- 20. Aggregatdaten basierend auf Daten
- 21. Horizontal Barplot zum Vergleich zwei Daten - basierend auf Verhältnis
- 22. WPF-Datentrigger Festlegen von Objekteigenschaften basierend auf Ereignissen
- 23. Dynamische Legende basierend auf Daten
- 24. Welche Anfrage wird zum Abrufen von Daten aus der Datenbank basierend auf einigen gesendeten Daten verwendet?
- 25. Pivot basierend auf Daten
- 26. WHERE zum Filtern von Daten basierend auf mehreren Bedingungen
- 27. Die Recyclerview-Daten basierend auf der Daten-ID abrufen
- 28. Anzeigen der Population basierend auf den Bedingungen zwischen den Zeilen
- 29. Tabellenentwurf zum Speichern von Daten basierend auf Benutzerauswahl
- 30. Powershell-Befehl zum Festlegen der IIS-Protokollierungseinstellungen