我正在尝试使用Flink流传输来消耗Kafka主题消息并创建(定期)镶木地板文件,该文件将保存在s3上。
当使用批量格式的流文件接收器来更改创建的零件文件名(或添加后缀/前缀)使其比part-0-0或part-1-3更具唯一性时,是否有办法?
StreamingFileSink<> sink = StreamingFileSink.forBulkFormat(new Path("s3://test-bucket/"), ParquetAvroFactory.getParquetWriter(schema, CompressionCodec.UNCOMPRESSED.name()))
.withBucketAssigner(new PartitionBucketAssigner(partitionColumns))
.build();
答案 0 :(得分:0)
您可以在BucketAssigner上覆盖getBucketId方法(请参见https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/streaming/api/functions/sink/filesystem/BucketAssigner.html),这将影响路径,但显然不会影响零件文件名(请参见下面的注释)。
零件文件名在SELECT IF( EXISTS(SELECT name FROM users WHERE name='${data.name}'), (SELECT password FROM users WHERE name='${data.name}') , NULL)
的这段代码中建立:
org.apache.flink.streaming.api.functions.sink.filesystem.Bucket
似乎并非旨在进行自定义。