首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BigQueryIO.Read查询与作业:查询

BigQueryIO.Read查询与作业:查询
EN

Stack Overflow用户
提问于 2016-01-03 02:34:53
回答 1查看 643关注 0票数 0

我使用数据流/ bigquery已经有一段时间了,但是我仍然无法理解一些基本的事情,即什么时候使用某种类型的方法来查询表。

使用BigQueryIO.Read的单行查询选项是:

  • 又短又简单
  • 适用于在PCollection中返回的大型结果,
  • 但不返回结果的新表架构, 这使得导出到(1) .csv文件的难度-表头,字段!!和(2) bigquery表-没有模式!每次我们想将查询结果保存到bigquery或.csv文件时,我们都需要手动定义表模式或字段-csv头。

查询的另一个选项是使用作业:查询

这又有其优点和缺点:

  • 返回查询结果的表架构。
  • 需要身份验证,最后会有更多的代码用于精确的简单查询 ->异步同步模式;
  • 不适合大的结果, 除了在带有选项allowLargeResults的异步模式下,这会导致背景中的多个查询,需要组合这些查询才能获得检索到的行的完整列表(?)
  • 结果可以保存到表中,但只有异步查询才能将结果保存在永久表中(而不仅仅是临时的)。

问题仍然存在:

(1)哪种方法更好,什么时候更好?

(2)如果我们查询的表中有大量的数据,并且得到了非常大的结果,那么首选哪种查询方法?

(3)在处理非常大的结果(表还是.csv文件)时,哪个导出是首选的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-04 18:54:59

请注意,BigQueryIO.Read读取表,而不执行查询。helper .fromQuery()允许源执行一个查询,然后读取将查询结果写入的目标表。将查询执行与表读取分离可能很有用。

我们可以将BigQueryIO.Read看作是运行jobs.insert()到Google的导出操作,然后处理来自GCS的数据。

查看https://cloud.google.com/bigquery/exporting-data-from-bigquery#exportingmultiple上的“多个通配符Uris”,以便高效地并行处理导出到GCS的数据:您可以在导出数据时使用(小的)导出数据碎片,因此不必阻止并行读取操作的处理以完成整个BigQuery导出作业。多个通配符允许您预先确定工作人员的并行性,BigQuery将按顺序编写数据,以便每个工作人员能够独立地处理他们的碎片,并识别他们的数据子集何时被完全处理过。

云数据流支持自定义源(https://cloud.google.com/dataflow/model/custom-io#creating-sources),因此您可以使用一个版本复制BigQueryIO.Read,该版本为您正在操作的表的模式提供了一个侧通道。

(*)我不是云数据流专家,所以我不知道如何构建这个侧通道。也许从这个自定义源导出的模式是表的模式和blob,您可以将该源包装为一个ParDo,它接受该模式并将blob转换为该模式?此时,您的代码将看到每一行的架构和数据。这似乎不是解决问题的最有效的方法,但它可能对你有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34572777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档