根据非分区键列选择和排序cassandra行

时间:2018-07-03 08:03:48

标签: apache-spark cassandra

我知道这个问题已经被问过百万遍了,但是我仍然无法找到替代方法来对自己的模型进行处理

我有这个桌子模型

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类别,它还可以增长到百万签名类别。所以我真的不能再使用这种方法了。

我的问题还有其他选择吗?任何帮助表示赞赏

0 个答案:

没有答案