【问题标题】:How to fix slow _TABLE_SUFFIX queries in BigQuery?如何修复 BigQuery 中缓慢的 _TABLE_SUFFIX 查询?
【发布时间】:2019-07-15 15:42:27
【问题描述】:

这个 _TABLE_SUFFIX 查询耗时 2.5 秒

SELECT COUNT(1)
FROM `projectid.datasetid.hospital_*` 

如果我们添加这个 WHERE 语句:

WHERE _TABLE_SUFFIX LIKE '_2_' OR _TABLE_SUFFIX LIKE '_1_' 

...查询需要 8 分 19 秒

第一个查询匹配的只有三个表。这很令人担忧,因为我们正在研究针对数千个表的查询和过滤。

为什么 _TABLE_SUFFIX 查询如此缓慢,如何才能更快地执行它们,尤其是使用 REGEX 类型的操作?

【问题讨论】:

  • 如果使用 BETWEEN 或 IN 会怎样?你看到同样的表现吗?
  • 发生了一次还是多次?无法重现。请针对此类问题发布工作 ID。

标签: google-bigquery


【解决方案1】:

如果'_1_'/'_2_' 中的下划线只能是数字,我只能建议尝试这样的事情:

select sum(cnt) from (

SELECT COUNT(*) as cnt
FROM `projectid.datasetid.hospital_0*`
WHERE _TABLE_SUFFIX between '10' and '29'
union all
SELECT COUNT(*)
FROM `projectid.datasetid.hospital_1*`
WHERE _TABLE_SUFFIX between '10' and '29'
union all
SELECT COUNT(*)
FROM `projectid.datasetid.hospital_2*`
WHERE _TABLE_SUFFIX between '10' and '29'
union all
SELECT COUNT(*)
FROM `projectid.datasetid.hospital_3*`
WHERE _TABLE_SUFFIX between '10' and '29'
union all
SELECT COUNT(*)
FROM `projectid.datasetid.hospital_4*`
WHERE _TABLE_SUFFIX between '10' and '29'
union all
SELECT COUNT(*)
FROM `projectid.datasetid.hospital_5*`
WHERE _TABLE_SUFFIX between '10' and '29'
union all
SELECT COUNT(*)
FROM `projectid.datasetid.hospital_6*`
WHERE _TABLE_SUFFIX between '10' and '29'
union all
SELECT COUNT(*)
FROM `projectid.datasetid.hospital_7*`
WHERE _TABLE_SUFFIX between '10' and '29'
union all
SELECT COUNT(*)
FROM `projectid.datasetid.hospital_8*`
WHERE _TABLE_SUFFIX between '10' and '29'
union all
SELECT COUNT(*)
FROM `projectid.datasetid.hospital_9*`
WHERE _TABLE_SUFFIX between '10' and '29'

)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    相关资源
    最近更新 更多