【问题标题】:Querying in Google bigQuery work slow在 Google bigQuery 中查询工作缓慢
【发布时间】:2016-09-30 05:19:15
【问题描述】:

我有一个包含近一百万行的表。在其中搜索单个值需要 5 秒,在 15 秒内搜索大约 500 个值。这是相当长的一段时间。请告诉我如何优化查询?

我的查询是:

select a,b,c,d from table where a in ('a1','a2')

工作 ID:stable-apogee-119006:job_ClLDIUSdDLYA6tC2jfC5GxBXmv0

【问题讨论】:

  • 为什么它被否决了?关于如何优化的任何答案?
  • 请阅读:stackoverflow.com/help/mcve。通过提供您尝试运行的查询来帮助他人帮助您。对于 BigQuery 工程师,拥有一些过去查询的作业 ID 也可能会有所帮助。
  • 感谢您添加作业 ID。除非有人抢先我,否则我明天早上(太平洋时间)去看看。
  • 您在查询中使用了什么 billingTier?您使用的是旧版 SQL 还是标准 SQL?你的表分区了吗? Bigquery 是用于 TB 级规模的大数据工具,所以不要指望小于 3 秒的答案,即使是小数据也不会有。但对于海量数据,它会非常快。
  • 旧版 sql。根据时间或任何其他字段进行表分区?不,我们只有 1 个 10 lac 行的表。

标签: database search google-bigquery


【解决方案1】:

我不确定您所说的“500 需要 15 秒”是什么意思,但我对我们的数据库进行了一些测试,试图模拟您正在运行的内容,我得到了一些与您类似的结果

(我的查询比你的要慢,因为它有一个join 操作,但我们还在继续):

SELECT
  a.fv fv,
  a.v v,
  a.sku sku,
  a.pp pp from(
  SELECT
    fullvisitorid fv,
    visitid v,
    hits.product.productsku sku,
    hits.page.pagepath pp
  FROM (TABLE_DATE_RANGE([40663402.ga_sessions_], DATE_ADD(CURRENT_DATE(), -3, 'day'), DATE_ADD(CURRENT_DATE(), -3, 'day')))
  WHERE
    1 = 1 ) a
JOIN EACH (
  SELECT
    fullvisitorid fv,
  FROM (TABLE_DATE_RANGE([40663402.ga_sessions_], DATE_ADD(CURRENT_DATE(), -3, 'day'), DATE_ADD(CURRENT_DATE(), -3, 'day')))
  GROUP EACH BY
    fv
  LIMIT
    1 ) b
ON
  a.fv = b.fv

仅查询 1 天并仅带来一位 fullvisitor 需要 BQ 大约 5 秒来处理 1.7 GB。

当我在上个月运行相同的查询并删除 limit 运算符时,需要大约 10 秒来处理大约 56GB 的数据(大约 3300 万行):

这速度非常快。

因此,您可能需要评估您的项目规格。如果 5 秒对您来说仍然太多,那么您可能需要在架构中找到最适合您的其他策略。

BigQuery 确实需要几秒钟来处理其需求,但它也准备好在几秒钟内处理数百个 Gigas。

如果您的项目数据消耗预计会增长并且您将开始处理数百万行,那么您可能会评估在您的应用程序中等待几秒钟是否仍然可以接受。

除此之外,就您的查询而言,我认为没有太多优化可以提高其性能。

ps:我决定运行 100 天,它在 14 秒内处理了大约 100 GB。

【讨论】:

    猜你喜欢
    • 2012-11-24
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2017-03-03
    • 1970-01-01
    相关资源
    最近更新 更多