Saya sedang memproses aliran pesan PubSub berjendela dan saya ingin mengarsipkannya ke GCS. Saya ingin file yang diarsipkan memiliki awalan yang berasal dari stempel waktu jendela (seperti gs://bucket/messages/2015/01/messages-2015-01-01.json). Apakah ini mungkin dengan TextIO.Write, atau apakah saya perlu mengimplementasikan FileBasedSink saya sendiri?
Bisakah TextIO menulis ke awalan yang berasal dari jendela maxTimestamp?
Jawaban (4)
Hal ini dapat dilakukan dengan fitur yang baru ditambahkan untuk penulisan berjendela di TextIO
. Silakan lihat dokumentasi untuk TextIO, khususnya lihat withWindowedWrites
dan to(FilenamePolicy)
. Fitur ini juga hadir di AvroIO
.
Apakah Anda hanya mencari fungsi TextIO.Write.Bound<String>.withSuffix()
atau TextIO.Write.Bound<String>.to()
? Tampaknya ini memungkinkan Anda memberikan akhiran atau awalan untuk nama file keluaran.
Saat ini, TextIO.Write tidak mendukung pengoperasian dalam mode streaming – menulis ke GCS cukup rumit, misalnya karena Anda tidak dapat menulis ke file secara bersamaan dari beberapa pekerja dan Anda tidak dapat menambahkan ke file setelah ditutup. Kami memiliki rencana untuk menambahkan dukungan streaming ke TextIO.
Anda akan mendapatkan dukungan terbaik untuk hal ini hari ini menggunakan BigQuery, bukan GCS – karena kami sudah mendukung penulisan BigQuery selama streaming, dan Anda memilih tabel tempat Anda menulis berdasarkan nama jendela, dan BigQuery mendukung penulisan dari banyak pekerja berbeda sekaligus.
withSuffix
digunakan untuk menentukan pola file. TextIO
menghasilkan banyak file dalam bentuk awalan-00000-dari-00010akhiran. Jadi Anda mungkin harus withSuffix(".json")
agar semua file memiliki ekstensi .json
. Lihat: cloud.google.com/dataflow/java-sdk/JavaDoc/com/google/cloud/ atau cloud.google.com/dataflow/model/avro-io#writing sebagai contoh.
- person Dan Halperin; 17.11.2015