Google cloud dataflow 当早期触发发生时,BigQueryIO不会将行卸载到GCS

Google cloud dataflow 当早期触发发生时,BigQueryIO不会将行卸载到GCS,google-cloud-dataflow,Google Cloud Dataflow,我在玩BigQueryIO,使用加载编写。我的加载触发器设置为18小时。我从卡夫卡那里接收数据,每天都有固定的窗口 基于这一点,预期的行为似乎是在窗格中至少有500k条记录时将行卸载到文件系统 我设法制作了约60万条记录,并等待了大约2个小时,看看这些行是否上传到了地面军事系统,但什么都没有。我注意到“BatchLoads”中的“GroupByDestination”步骤在“Output collections”大小下显示0 当我使用较小的负载触发器时,一切看起来都很好。不应该至少触发After

我在玩BigQueryIO,使用加载编写。我的加载触发器设置为18小时。我从卡夫卡那里接收数据,每天都有固定的窗口

基于这一点,预期的行为似乎是在窗格中至少有500k条记录时将行卸载到文件系统

我设法制作了约60万条记录,并等待了大约2个小时,看看这些行是否上传到了地面军事系统,但什么都没有。我注意到“BatchLoads”中的“GroupByDestination”步骤在“Output collections”大小下显示0

当我使用较小的负载触发器时,一切看起来都很好。不应该至少触发
AfterPane.elementcount(文件\触发\记录\计数))

下面是编写BigQuery的代码

  BigQueryIO
  .writeTableRows()
  .to(new SerializableFunction[ValueInSingleWindow[TableRow], TableDestination]() {
    override def apply(input: ValueInSingleWindow[TableRow]): TableDestination = {
      val startWindow = input.getWindow.asInstanceOf[IntervalWindow].start()
      val dayPartition = DateTimeFormat.forPattern("yyyyMMdd").withZone(DateTimeZone.UTC).print(startWindow)
      new TableDestination("myproject_id:mydataset_id.table$" + dayPartition, null)
    }
  })
  .withMethod(Method.FILE_LOADS)
  .withCreateDisposition(CreateDisposition.CREATE_NEVER)
  .withWriteDisposition(WriteDisposition.WRITE_APPEND)
  .withSchema(BigQueryUtils.schemaOf[MySchema])
  .withTriggeringFrequency(Duration.standardHours(18))
  .withNumFileShards(10)

工作id为2018-02-16_14_34_54-7547662103968451637。提前感谢。

窗格是每个窗口的每个键,而具有动态目标的BigQueryIO.write()将目标用作引擎盖下的键,因此“窗格中的500k元素”功能适用于每个窗口的每个目标。

您是否可以包括管道代码中调用BigQueryIO.write()的部分,它提供给它的所有配置?我特别感兴趣的是你是在写一个表还是在使用动态目的地。您好,我已经更新了帖子,加入了BigQueryIO设置。就这样。使用固定的目的地是可行的。谢谢您可能很高兴知道您正在做的事情(加载时间分区数据)现在可以更快、更便宜地完成。在BigQueryIO中支持此功能的PR正在审核中,不久将合并到master