我一直在玩数据流/大查询,但我仍然无法理解一些基本的东西,即何时使用某种类型的方法来查询表。
单行查询选项BigQueryIO.Read
是:
+ 短而简单,
+ 适用于大型结果,在 PCollection 中返回,
- 但不为结果返回新的表模式,
因此更难将两者都导出到 (1) 。 csv 文件 - 表头、字段!!和 (2) bigquery 表 - 没有模式!每次要将查询结果保存到 bigquery 表或 .csv 文件时,我们都需要手动定义表模式或字段-csv 标头。
---> 有没有一种自动的方式可以优雅地完成?
查询的另一个选项是使用Jobs: Query。
这也有优点和缺点:
+ 返回查询结果的表模式
- 需要身份验证,最后对于精确的简单查询有更多的编码
-> 异步和同步模式;
- 不适合大型结果,
除非在带有选项的异步模式下allowLargeResults
,这会导致后台执行多个查询,需要组合这些查询以获得检索到的行的完整列表 (??)
- 结果可以保存到表中,但只有异步查询可以将结果保存在永久表中(而不仅仅是临时表)。
问题仍然存在:
(1)哪种方法更好,什么时候更好?
(2)如果我们查询的表中数据量非常大,得到的结果非常大,那么首选哪种查询方式?
(3) 在处理非常大的结果(表格或 .csv 文件)时,首选哪种导出方式?