Google cloud storage 如何在数据流作业中标识已处理的文件

Google cloud storage 如何在数据流作业中标识已处理的文件,google-cloud-storage,google-cloud-dataflow,apache-beam,Google Cloud Storage,Google Cloud Dataflow,Apache Beam,如何在数据流作业中标识已处理的文件?我正在使用通配符从云存储中读取文件。但每次作业运行时,它都会重新读取所有文件 这是一个批处理作业,下面是我正在使用的读取文本的示例 PCollection<String> filePColection = pipeline.apply("Read files from Cloud Storage ", TextIO.read().from("gs://bucketName/TrafficData*.txt")); PCollection fil

如何在数据流作业中标识已处理的文件?我正在使用通配符从云存储中读取文件。但每次作业运行时,它都会重新读取所有文件

这是一个批处理作业,下面是我正在使用的读取文本的示例

PCollection<String> filePColection  = pipeline.apply("Read files from Cloud Storage ", TextIO.read().from("gs://bucketName/TrafficData*.txt"));
PCollection filepcoction=pipeline.apply(“从云存储读取文件”,TextIO.Read().from(“gs://bucketName/TrafficData*.txt”);

要查看与通配符匹配的文件列表,可以使用
gsutils
,这是云存储命令行实用程序。您将执行以下操作:

gsutils ls gs://bucketName/TrafficData*.txt

现在,当涉及到多次运行批处理作业时,管道无法知道它已经分析了哪些文件。要避免分析新文件,可以执行以下任一操作:

gsutils ls gs://bucketName/TrafficData*.txt
  • 定义流作业,并使用
    TextIO
    watchForNewFiles
    功能。只要您想继续处理文件,您就必须离开作业才能运行

  • 找到一种方法为管道提供已经分析过的文件。为此,每次运行管道时,您都可以生成要分析的文件列表,将其放入
    PCollection
    ,使用
    TextIO.readAll()
    读取每个文件,并将分析过的文件列表存储在某处。稍后,当您再次运行管道时,可以将此列表用作不需要再次运行的文件的黑名单

  • 如果您想围绕这两个选项之一制定解决方案,请在评论中告诉我