TextIO。将GCS文件夹放入管道中,过去30天的日期为名称

时间:2017-09-12 03:24:40

标签: java google-cloud-platform google-cloud-dataflow

我想阅读过去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展平为一个,这会导致管道中的热分片。

2 个答案:

答案 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