我知道这个问题已经被问过百万遍了,但是我仍然无法找到替代方法来对自己的模型进行处理
我有这个桌子模型
CREATE TABLE signature_count_per_year(
sensor_id text,
signature text,
hit_count int,
year int,
PRIMARY KEY ((sensor_id), signature, year)
)WITH CLUSTERING KEY (signature ASC, year DESC)
我正在使用Spark窗口(1年窗口)将数据推送到该表中,该功能作为流处理,在该过程中,随该查询插入的数据(对于每个批次)
INSERT INTO signature_count_per_year (sensor_id, signature, hit_count, year) VALUES ('sssj901', 'h80skooa', 91231442, 2018)
INSERT INTO signature_count_per_year (sensor_id, signature, hit_count, year) VALUES ('sssj901', 'suua09dd', 284421, 2018)
INSERT INTO signature_count_per_year (sensor_id, signature, hit_count, year) VALUES ('sssj901', '88wsiiaa', 9022345, 2018)
INSERT INTO signature_count_per_year (sensor_id, signature, hit_count, year) VALUES ('sssj901', 'asgg9910', 81112331, 2018)
表内容将是这样
Sensor_id signature hit_count year
sssj901 h80skooa 891231 2018
sssj901 suua09dd 284421 2018
sssj901 88wsiiaa 9022345 2018
sssj901 asgg9910 81112331 2018
... ... ... ...
我只需要查询该表的前10个最高命中数,但由于hit_count不是主键,所以我无法使用ORDER BY进行此操作。
我想要的查询将是:
select * from signature_count_per_year order by hit_count DESC LIMIT 10
到目前为止,我已经尝试选择所有行,并从客户端按hit_count对其进行排序。
我还没有尝试过的第二种选择是,在将其分发给客户端之前在Web服务中对其进行查询。我知道这会严重伤害服务器
但是问题在于签名不仅是10或100类别,它还可以增长到百万签名类别。所以我真的不能再使用这种方法了。
我的问题还有其他选择吗?任何帮助表示赞赏