在数据流中使用 `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 中的一个或多个表中读取所有数据时,我会说有两种方法。第一种是使用BigQueryIO
和from
,它读取有问题的表,第二种方法是使用fromQuery
,在其中指定一个从同一个表中读取所有数据的查询。所以我的问题是:
我在文档中没有找到任何关于此的内容,但我真的很想知道。我想read
可能更快,因为您不需要运行扫描数据的查询,这意味着它更类似于您在BigQuery
UI 中的预览功能。如果这是真的,它可能也会便宜得多,但如果它们的成本相同,那就有意义了。
所以简而言之,有什么区别:
BigQueryIO.read(...).from(tableName)
还有
BigQueryIO.read(...).fromQuery("SELECT * FROM " + tableName)
【问题讨论】:
【参考方案1】:from
比fromQuery(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` 有区别吗?的主要内容,如果未能解决你的问题,请参考以下文章
fatfs f_write 在传递指向邮件队列中数据的指针时返回 FR_DISK_ERR