忽略/跳过不存在GCS输入文件(Ignore/skip GCS input files that d

2019-10-23 02:51发布

我们的要求是处理过去24小时内,谷歌DFP直接写入到我们的GCS斗的广告投放日志。

目前,我们通过使用展平,并在所有的文件名经过了过去24小时内实现这一目标。 该文件名是yyyyMMdd_hh格式。

但是,我们已经确定,有时DFP不能写一些小时文件(S)。 我们提出这个问题的DFP家伙。

然而,有没有配置我们的数据流的工作,忽略任何丢失GCS文件,而在这种情况下不失败的方法吗? 如果不存在一个或多个文件目前,它失败。

Answer 1:

使用数据流API,如TextIO.ReadAvroIO.Read从一个不存在的文件阅读,当然,抛出一个错误,导致管道失败。 这是工作的打算,我不能想到一个解决办法的。

现在,从像filepattern阅读yyyyMMdd_*可以解决你的问题,至少部分。 数据流将扩大filepattern到一组文件,并处理它们。 只要至少一个文件存在,所提供的模式相匹配,管道应继续进行。

每个文件具有一个源的方法通常是一个反模式 - 它是不太有效和更优雅,但功能上是相同的。 尽管如此,你仍然可以通过构建你的数据流的管道,确认每个文件的存在之前,使用谷歌云存储API解决它。 如果输入文件不存在,你可以直接跳过产生的根源之一。

无论哪种方式,请记住由提供的最终一致性保证GCS list API 。 这意味着,扩大文件模式可能不会立即产生,否则将读取的所有文件。 该反模式可能是这种情况下,一个好的工作环境,但是。



Answer 2:

也许不是最好的答案,但你可以随时使用

GcsUtilFactory.create(options).expand(...)

抓住其中存在的所有文件。 然后你就可以创建相应的拼合。

等待更专业的解答。



文章来源: Ignore/skip GCS input files that don't exist