我想阅读过去30天的滚动窗口进入我的管道,例如2017年1月15日,我想阅读:
> gs://bucket/20170115/*
> gs://bucket/20170114/*
>.
>.
>.
> gs://bucket/20161216/*
This说(" *","?"," [..]")支持glob模式
Similar question, but with no good example
我试图避免做30 Text.IO.Read步骤然后将所有Pcollections展平为一个,这会导致管道中的热分片。
答案 0 :(得分:1)
从GCS读取文件时,TextIO支持与GCS相同的通配符模式,如下所述:Wildcard Names。
在question you linked的答案中,子弹#2建议形成一小部分球来代表你的全范围:
例如两个字符范围" 23到67"是
2[3-]
加[3-5][0-9]
加6[0-7]
TextIO
还有一个新的API readAll()
,它允许您将输入文件动态指定为数据。这允许您传递所需的确切文件名集:
private static List<String> generate30DayFileGlobs(DateTime now) {
// ..
}
public static void main() {
Pipeline p = // ..
p.apply(Create.<String>of(generate30DayFileGlobs(DateTime.now())));
.apply(TextIO.readAll());
// ..
}
新的TextIO.readAll()
API尚未发布,但您可以通过指定Beam工件版本2.2.0-SNAPSHOT
从master构建。 2.2.0版本is in progress应该会在九月份的某个时候发布。
答案 1 :(得分:0)
一个Glob模式生成函数here