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

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

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

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

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

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

还有

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

【问题讨论】:

    标签: google-bigquery google-cloud-dataflow dataflow


    【解决方案1】:

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

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

    【讨论】:

    • 你有什么文档可以指点我吗,或者你是怎么知道的?
    • 在 SDK 实现中。 from 对应于BigQueryTableSource,它直接启动导出。 fromQuery 对应于 BigQueryQuerySource,它在其中创建临时数据集、执行查询、导出和清理临时资源。
    • @JiayuanMa 很到位。 read() 调用将表导出到 GCS 后台(免费),而 readFromQuery() 向 BigQuery 发出实际的 SQL 查询,您需要为此付费。
    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2015-09-10
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    相关资源
    最近更新 更多