【问题标题】:Set maximumBillingTier when reading from BigQuery in Dataflow从 Dataflow 中的 BigQuery 读取时设置 maximumBillingTier
【发布时间】:2017-08-14 21:52:15
【问题描述】:

当我从 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 作业中传递此设置?

【问题讨论】:

    标签: google-bigquery google-cloud-platform google-cloud-dataflow


    【解决方案1】:

    也许 Google 员工会纠正我,但看起来您是对的。我也看不到这个参数暴露。我检查了DataflowBeam API。

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

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

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

    【讨论】:

    • 谢谢!这正是我们选择的解决方法。
    • 太棒了!在这种情况下,您能否投票/接受我的回答,请@TomazLecki。这就是 Stack Overflow 的工作原理 ;-)
    • 我已经得到了它的支持,但由于我没有足够的声誉,所以投票被注意到但其他人看不到它(我希望我理解正确)。我想再给它一点时间,但如果我没有从谷歌或其他人那里得到任何更好的解决方案的答案,那么我会将你的答案标记为已接受,因为它似乎是最好的解决方法 - 简单且无需额外费用。跨度>
    • 酷。这是有道理的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 2019-04-30
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多