在数据流中从 BigQuery 读取时设置最大计费层



当我从 BigQuery 读取数据作为查询结果时,我正在运行 GCP 数据流作业。我正在使用google-cloud-dataflow-java-sdk-all版本1.9.0。设置管道的代码片段如下所示:

PCollection<TableRow> myRows = pipeline.apply(BigQueryIO.Read
.fromQuery(query)
.usingStandardSql()
.withoutResultFlattening()
.named("Input " + tableId)
);

查询非常复杂,导致错误消息:

查询超出了第 1 层的资源限制。需要第 8 层或更高级别。,错误:查询超出了第 1 层的资源限制。需要 8 级或更高级别。

我想设置maximumBillingTier,因为它是在 Web UI 或 bq 脚本中完成的。除了为整个项目设置默认值之外,我找不到任何方法,不幸的是这不是一个选项。

我试图通过这些来设置它,但没有成功:

  • DataflowPipelineOptions - 这个接口和它扩展的任何接口似乎都没有该设置
  • BigQueryIO.Read.Bound - 我希望它就在usingStandardSql和其他类似的旁边,但显然它不存在
  • JobConfigurationQuery - 这个类有所有很酷的设置,但在设置管道时似乎根本没有使用它

有没有办法从数据流作业中传递此设置?

也许谷歌员工会纠正我,但看起来你是对的。我也无法看到此参数暴露。我检查了数据流和Beam API。

在后台,Dataflow 使用的是来自 BigQuery API 的JobConfigurationQuery,但它根本不会通过自己的 API 公开该参数。

我看到的一种解决方法是首先直接使用 BigQuery API 运行复杂查询 - 然后再放入管道。这样,您可以通过JobConfigurationQuery类设置最大计费层。将该查询的结果写入 BigQuery 中的另一个表。

最后,在管道中,只需读取从复杂查询创建的表。

最新更新