【问题标题】:BigQuery very slow on (seemingly) a very simple queryBigQuery 在(看似)非常简单的查询上非常慢
【发布时间】:2020-03-26 17:26:51
【问题描述】:

我们使用 GCP 日志,这些日志通过日志接收器导出到 BigQuery。 我们没有大量的日志,但每条记录似乎都相当大。

使用 BigQuery 运行一个简单的查询似乎需要很多时间。我们想知道这是正常的还是我们做错了什么...我们可以做些什么来使它更实际地分析...

例如查询

SELECT 
        FORMAT_DATETIME("%Y-%m-%d  %H:%M:%S", DATETIME(timestamp, "Australia/Melbourne")) as Melb_time, 
        jsonPayload.lg.a, 
        jsonPayload.lg.p
FROM `XXX.webapp_usg_logs.webapp_*`
ORDER BY timestamp DESC
LIMIT 100

需要

Query complete (44.2 sec elapsed, 35.2 MB processed)

谢谢!

【问题讨论】:

  • 在其他支持索引的数据库上,将索引添加到timestamp 列将有助于查询。
  • 谢谢!但 BigQuery 似乎没有使用索引...
  • 像这样查询通配符表会影响性能。这是因为在执行查询之前需要读取它在 glob (*) 中匹配的每个表的元数据。尝试减少扫描的表或在WHERE 子句中使用_TABLE_SUFFIX。见:cloud.google.com/bigquery/docs/…
  • 好的,谢谢!当我手动指定日期时,它的工作速度要快得多。您知道是否有办法将元数据缓存一次,以便以后每次都可以使用它?

标签: google-cloud-platform google-bigquery google-cloud-logging


【解决方案1】:

尝试将此添加到您的查询中:

WHERE _TABLE_SUFFIX > FORMAT_DATE('%Y%m%d',  DATE_SUB(CURRENT_DATE(), INTERVAL 3 DAY))

它将过滤以仅从过去 3 天内获取带有 TABLE_SUFFIX 的表 - 而不是让 BigQuery 从可能多年的历史中查看每个表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2021-03-01
    • 2020-01-10
    相关资源
    最近更新 更多