Top-K 查询会从选定行的分区返回前 k 个行。Top-K 投影可以显著提升 Top-K 查询的性能。例如,您可以定义一个含有以下三列的表来存储气量表读数:气量表 ID、气量表读数对应的时间以及读数值:
=> CREATE TABLE readings (
meter_id INT,
reading_date TIMESTAMP,
reading_value FLOAT);
以此表为例,以下 Top-K 查询会针对给定气量表返回五个最近的气量表读数:
SELECT meter_id, reading_date, reading_value FROM readings
LIMIT 5 OVER (PARTITION BY meter_id ORDER BY reading_date DESC);
要提升此查询的性能,您可以创建 Top-K 投影,即一种特殊类型的实时聚合投影:
=> CREATE PROJECTION readings_topk (meter_id, recent_date, recent_value)
AS SELECT meter_id, reading_date, reading_value FROM readings
LIMIT 5 OVER (PARTITION BY meter_id ORDER BY reading_date DESC);
创建此 Top-K 投影并加载其数据(通过 START_REFRESH 或 REFRESH)后,Vertica 通常会将查询重定向到投影,并返回预聚合数据。