Bisakah TextIO menulis ke awalan yang berasal dari jendela maxTimestamp?

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?


person Dave Jack    schedule 04.11.2015    source sumber


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.

person jkff    schedule 12.07.2017

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.

person Nick    schedule 09.11.2015

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.

person Dan Halperin    schedule 10.11.2015
comment
Dan, mengapa ini tidak bisa dilakukan dengan TextIO.Write.Bound.withSuffix ? kenapa streamingnya berbeda? lagi pula, streaming dapat dilihat sebagai pekerjaan berulang dan setiap pekerjaan dapat ditulis di akhir setiap pekerjaan - person Zig Mandel; 13.11.2015
comment
String yang diteruskan ke .withSuffix() adalah konstanta waktu kompilasi. Selain itu, TextIO.Write saat ini tidak dapat digunakan dengan streaming runner. - person Dan Halperin; 17.11.2015
comment
maaf ketidaktahuanku. lalu apa gunanya memiliki sufiks hardcover pada waktu kompilasi? (mengingat saya juga dapat menggabungkannya pada waktu kompilasi tanpa withSuffix?) tampaknya jika setiap jendela dapat memiliki nama file yang berbeda, tidak akan menjadi masalah penulisan pekerjaan secara bersamaan - person Zig Mandel; 17.11.2015
comment
Perintah 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

person    schedule
comment
ini sepertinya tidak menjawab pertanyaan itu. dia sudah tahu cara menulis ke GCS. dia bertanya tentang mengubah nama file keluaran. - person Zig Mandel; 07.11.2015