在数据流中使用 `fromTable` 与 `fromQuery("SELECT * ...")` 时,`BigQueryIO` 有区别吗?

Posted

技术标签:

【中文标题】在数据流中使用 `fromTable` 与 `fromQuery("SELECT * ...")` 时,`BigQueryIO` 有区别吗?【英文标题】:Is there a difference in `BigQueryIO` when you use `fromTable` vs `fromQuery("SELECT * ...")` in dataflow? 【发布时间】:2018-07-07 06:25:32 【问题描述】:

当您需要在数据流作业中从 bigquery 中的一个或多个表中读取所有数据时,我会说有两种方法。第一种是使用BigQueryIOfrom,它读取有问题的表,第二种方法是使用fromQuery,在其中指定一个从同一个表中读取所有数据的查询。所以我的问题是:

使用其中一种是否有任何成本或性能优势?

我在文档中没有找到任何关于此的内容,但我真的很想知道。我想read 可能更快,因为您不需要运行扫描数据的查询,这意味着它更类似于您在BigQuery UI 中的预览功能。如果这是真的,它可能也会便宜得多,但如果它们的成本相同,那就有意义了。

所以简而言之,有什么区别:

BigQueryIO.read(...).from(tableName)

还有

BigQueryIO.read(...).fromQuery("SELECT * FROM " + tableName)

【问题讨论】:

【参考方案1】:

fromfromQuery(SELECT * FROM ...) 既便宜又快。

from 直接导出表,BigQuery 导出数据为free。 fromQuery(SELECT * FROM ...) 将首先扫描整个表($5/TB)并导出结果。

【讨论】:

你有什么文档可以指点我吗,或者你是怎么知道的? 在 SDK 实现中。 from 对应于BigQueryTableSource,它直接启动导出。 fromQuery 对应于 BigQueryQuerySource,它在其中创建临时数据集、执行查询、导出和清理临时资源。 @JiayuanMa 很到位。 read() 调用将表导出到 GCS 后台(免费),而 readFromQuery() 向 BigQuery 发出实际的 SQL 查询,您需要为此付费。

以上是关于在数据流中使用 `fromTable` 与 `fromQuery("SELECT * ...")` 时,`BigQueryIO` 有区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server - 在子查询中使用列别名

fatfs f_write 在传递指向邮件队列中数据的指针时返回 FR_DISK_ERR

django中怎么使用两个限定条件在mysql数据库中进行查询

5G标准:5G频率范围与频段-FR1FR2Sub-6毫米波

选择表中的列与另一个表中的列不同的数据

sql——函数