gpt4 book ai didi

java - BigQueryIO.Read 查询与作业 : Query

转载 作者:行者123 更新时间:2023-12-01 10:37:46 25 4
gpt4 key购买 nike

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

BigQueryIO.Read 的单行查询选项是:
+ 简短,
+ 适合大型结果,在 PCollection 中返回,
- 但不返回结果的新表模式,
使得将两者导出到 (1) .csv 文件 - 表头变得更加困难, 田野!! (2) bigquery 表 - 无模式! 每次我们想要将查询结果保存到bigquery表或.csv文件时,我们都需要手动定义表模式或fields-csv header。
---> 是否有一种自动方式可以优雅地完成此操作?

另一个查询选项是使用 Jobs : Query
这又具有优点和缺点:
+ 返回查询结果的表模式
- 需要身份验证,最后对于精确的简单查询有更多的编码
-> 异步和同步模式;
- 不适合大型结果,
除非在带有选项allowLargeResults的异步模式下,这会导致在后台产生多个查询,需要组合这些查询才能获取检索到的行的完整列表(? ?)
- 结果可以保存到表中,但只有异步查询才能将结果保存到永久表中(而不仅仅是临时表)。

问题仍然存在:

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

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

(3) 处理非常大的结果时,首选哪种导出方式 - 表格还是 .csv 文件?

最佳答案

请注意,BigQueryIO.Read 读取表,但不执行查询。帮助器 .fromQuery() 让源执行查询,然后读取查询结果写入的目标表。将查询执行与表读取分开可能很有用。

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

查看“多个通配符 URI”:https://cloud.google.com/bigquery/exporting-data-from-bigquery#exportingmultiple对于导出到 GCS 的数据进行高效并行处理:您可以在导出数据时使用导出数据的(小)分片,因此您不必阻止并行读取操作的处理来完成整个 BigQuery 导出作业。多个通配符可让您预先确定工作线程的并行性,BigQuery 将按顺序写入数据,以便每个工作线程可以独立处理其分片,并确定其数据子集何时已完全处理。

Cloud Dataflow 支持自定义源 ( https://cloud.google.com/dataflow/model/custom-io#creating-sources ),因此您可以使用具有用于您正在操作的表架构的侧 channel (*) 的版本来复制 BigQueryIO.Read。

(*) 我不是 Cloud Dataflow 专家,因此我不确定如何构建此侧 channel 。也许从此自定义源导出的模式是表的模式和 blob,您可以将源包装为采用该模式并将 blob 转换为该模式的 ParDo 吗?此时您的代码将看到每行的架构和数据。这似乎不是解决问题的最有效方法,但它可能对您有用。

关于java - BigQueryIO.Read 查询与作业 : Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34572777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com