当我从 BigQuery 读取数据作为查询结果时,我正在运行 GCP Dataflow 作业。我正在使用 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 - 这个类具有所有很酷的设置,但似乎在设置管道时根本没有使用它
有什么方法可以从数据流作业中传递此设置吗?
也许谷歌员工会纠正我,但看起来你是对的。我也看不到这个参数暴露。我检查了Dataflow https://github.com/GoogleCloudPlatform/DataflowJavaSDK和Beam https://github.com/apache/beam/tree/master/sdks/java APIs.
在幕后,Dataflow 正在使用JobConfigurationQuery
来自 BigQuery API,但它根本不通过自己的 API 公开该参数。
我看到的一种解决方法是首先直接使用 BigQuery API 运行复杂查询,然后再放入管道中。这样您就可以通过以下方式设置最大计费等级JobConfigurationQuery
班级。将该查询的结果写入 BigQuery 中的另一个表。
最后,在您的管道中,只需读入从复杂查询创建的表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)