按列返回给定值的第一行-BigQuery

时间:2018-08-02 17:37:57

标签: google-bigquery

我有一个很大的表,该表有一列,其中包含每一行的字符串类型的自定义ID。对于每个ID,该表中都有50个属性。保证在表中是唯一的。

我的主要任务是获取给定ID的行中的那50个属性。 当我运行如下所示的普通查询时,只扫描100万行需要5秒钟。

SELECT * FROM `mytable` WHERE id='123'

根据我的理解,BigQuery在将行划分为不同的簇之后进行并行搜索。而且我相信对于给定的ID值,它将检查所有不同群集中的所有行。这样,即使在一个分区中找到匹配项,其他群集也将继续获得其他匹配项。

但是,由于ID列中的值在此处是唯一的,因此一旦在集群中找到匹配项,我们是否可以以某种方式“破坏”在其他集群上运行的作业,并返回该行。

我希望这将加快查询运行时间。 而且,将来,此表将变得非常大,因此,如果能够做到这一点,将对我的目的真的很有帮助。

欢迎提出任何建议。

1 个答案:

答案 0 :(得分:3)

您可以使用最近推出的Clustered Tables
这将使您降低成本并提高性能

请注意:当前仅对分区表支持群集-但正在开发对clustering non-partitioned tables的支持

如果表已分区,则可以按id将其群集-完成后
如果没有,您可以通过它引入“假”日期字段并对其进行分区,以便对该表进行聚类

平均时间,如果您只是对给定ID的一行感兴趣,请尝试以下

SELECT * FROM mytable WHERE id='123' LIMIT 1