返回列中给定值的第一行 - BigQuery
Posted
技术标签:
【中文标题】返回列中给定值的第一行 - BigQuery【英文标题】:Return First Row For Given Value in a Column - BigQuery 【发布时间】:2018-08-02 17:37:56 【问题描述】:我有一个非常大的表,其中有一列包含每行的字符串类型的自定义 ID。对于每个 ID,该表中有 50 个属性。这保证在表中是唯一的。
我的主要任务是获取给定 ID 的行中的这 50 个属性。 当我像下面这样运行普通查询时,只扫描 100 万行需要 5 秒。
SELECT * FROM `mytable` WHERE id='123'
据我了解,BigQuery 在将行划分为不同的集群后会并行搜索匹配项。而且我相信对于给定的 ID 值,它将检查所有不同集群中的所有行。这样即使在一个分区中找到匹配项,其他集群也会继续获得其他匹配项。
但是由于 ID 列中的值在这里是唯一的,我们能否以某种方式“破坏”在其他集群上运行的作业,一旦在集群中找到匹配项并返回该行。
我希望这将加快查询运行时间。 此外,在未来,这张表会变得非常大,所以如果能做到这一点,它对我的目的真的很有帮助。
欢迎提出任何建议。
【问题讨论】:
【参考方案1】:您可以使用最近介绍的Clustered Tables
这将使您降低成本并提高性能
请注意:目前仅分区表支持集群 - 但对clustering non-partitioned tables
的支持正在开发中
如果你的表是分区的,你可以通过 id 对它进行集群 - 你就完成了 如果没有 - 您可以引入“假”日期字段并通过它进行分区,以便该表可以使用集群
同时,如果您只对给定 ID 的一行感兴趣 - 请在下方尝试
SELECT * FROM mytable WHERE id='123' LIMIT 1
【讨论】:
感谢米哈伊尔的创意。会深入研究。不幸的是,SELECT * FROM mytable WHERE id='123' LIMIT 1
在这种情况下没有任何改进。
是的。使用聚簇表将查询时间减少到约 2 秒,数据处理到只有几个字节,而之前它是 230MB。而且我相信即使表大小增加,它也应该提供几乎相同的性能。以上是关于返回列中给定值的第一行 - BigQuery的主要内容,如果未能解决你的问题,请参考以下文章
2021-08-13:给定一个每一行有序每一列也有序,整体可能无序的二维数组 ,在给定一个正数k,返回二维数组中,最小的第k个数。