BigQuery-减少查询执行时间

时间:2019-06-25 07:23:41

标签: google-bigquery

我的bigquery表具有以下结构:

source | feature |  value |
---------------------------
s1     |    f1   |  HIGH  |
---------------------------
s2     |    f1   |  LOW   |
---------------------------
s2     |    f2   | MEDIUM |
.
.
.
---------------------------
s7000 |   f1000 |  HIGH   |

我想计算特征和值的所有排列出现了多少个来源。结果集示例:

feature  |  feature  | value  | value  |  count
-----------------------------------------------
    f1   |    f2     |  HIGH  | HIGH   |   7
-----------------------------------------------
    f1   |    f2     |  LOW   | HIGH   |  211
.
.
.
-----------------------------------------------
  f7000  |  f1000    |  HIGH  |MEDIUM |  123  

这是我的SQL查询:

select     m1.feature as f1, m2.feature as f2, m1.value as v1, m2.value as v2, count(*)
from       matrix  m1 inner join matrix m2 on m1.source=m2.source
group by   m1.feature, m2.feature, m1.value, m2.value

在这种情况下,问题是bigquery的性能非常差。矩阵表不是很大,大约有7,000,000条记录。 7分钟后我停止了查询的执行...

您能帮我提高查询性能吗?

1 个答案:

答案 0 :(得分:3)

很少建议:

  • 您最可能不想使用对称对-因此应添加类似内容
    WHERE m1.feature < m2.feature
  • 如果初始矩阵中有重复项,则希望先进行预聚合(在自动加入之前)
  • 将大量时间花费在将查询结果带到UI上,所以您可以使用CREATE TABLE ASINSERT INTO来抑制将结果加载到UI并将其放入表中,然后就可以使用/随便查询