Google bigquery 在数据流中读取BigQuery时设置maximumBillingTier

Google bigquery 在数据流中读取BigQuery时设置maximumBillingTier,google-bigquery,google-cloud-platform,google-cloud-dataflow,Google Bigquery,Google Cloud Platform,Google Cloud Dataflow,当我从BigQuery读取数据作为查询结果时,我正在运行GCP数据流作业。我正在使用google cloud dataflow java sdk所有版本1.9.0。设置管道的代码片段如下所示: PCollection<TableRow> myRows = pipeline.apply(BigQueryIO.Read .fromQuery(query) .usingStandardSql() .withoutRes

当我从BigQuery读取数据作为查询结果时,我正在运行GCP数据流作业。我正在使用google cloud dataflow java sdk所有版本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——我希望它会出现在使用StandardSQL和其他类似工具的旁边,但显然它不存在 JobConfigurationQuery-该类具有所有很酷的设置,但在设置管道时似乎根本不使用它
有没有办法从Dataflow作业中传递此设置?

也许谷歌会纠正我,但看起来你是对的。我也看不到这个参数被公开。我检查了和API

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

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


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

谢谢!这正是我们选择的解决方法。太好了!在这种情况下,你能投票/接受我的回答吗@TomazLecki。这就是堆栈溢出的工作原理-我已经投票了,但由于我没有足够的声誉,投票被注意到了,但其他人看不到,我希望我理解这一点。我想给它多一点时间,但如果我没有从谷歌或其他人那里得到任何更好的解决方案的答案,那么我会将你的答案标记为被接受,因为这似乎是最好的解决方法-简单且无需额外费用。酷。这是有道理的。