代码之家  ›  专栏  ›  技术社区  ›  Kumar rzetterberg

返回列BigQuery中给定值的第一行

  •  0
  • Kumar rzetterberg  · 技术社区  · 8 年前

    我有一个非常大的表,它有一个列,该列为每一行保存字符串类型的自定义ID。对于每个ID,该表中有50个属性。这在表中保证是唯一的。

    我的主要任务是获取给定ID行中的50个属性。 当我运行像下面这样的普通查询时,只扫描一百万行需要5秒。

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

    据我所知,BigQuery在将行划分成不同的集群之后,会并行搜索匹配项。我相信对于给定的ID值,它将检查所有不同集群中的所有行。因此,即使在一个分区中找到匹配项,其他集群也将继续获得其他匹配项。

    但是,由于ID列中的值在这里是唯一的,我们是否可以在集群中找到匹配项并返回行后,以某种方式“中断”其他集群上运行的作业。

    我希望这将加快查询运行时间。 而且,在未来,这张桌子会变得非常大,所以如果能做到这一点,对我的目的将非常有帮助。

    欢迎提出任何建议。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Mikhail Berlyant    8 年前

    你可以用最近介绍的 Clustered Tables
    这样可以降低成本,提高性能

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

    如果您的表是分区的,您可以只按id对其进行集群—这样就完成了
    如果没有-您可以引入'fake'日期字段并按它进行分区,这样就可以对该表进行集群

    同时,如果你对给定的id只感兴趣一行-请尝试下面的

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