我有一个数据集
("group_1" , uuid , other, columns),
("group_1" , uuid , other, columns),
("group_1" , uuid , other, columns),
("group_2" , uuid , other, columns),
("group_2" , uuid , other, columns),
("group_3" , uuid , other, columns),
("group_3" , uuid , other, columns),
字符串
它位于一个表中,声明如下:
CREATE TABLE sample(
group TEXT,
id TEXT,
Other,
columns,
PRIMARY KEY( group , id)
);
型
我想做的是获取一个数据列表,所有具有相同组名的数据将在同一行中。我的意思是
[
[("group_1" , uuid , other, columns),
("group_1" , uuid , other, columns),
("group_1" , uuid , other, columns)],
[("group_2" , uuid , other, columns),
("group_2" , uuid , other, columns)],
[("group_3" , uuid , other, columns),
("group_3" , uuid , other, columns)],
]
型
这是具有相同组名的行的列表。
我不知道是否可以使用数据库内置函数(如GROUP BY
)来获得这样的结果,因为当我尝试它时,它只返回以下查询中相同组名行的第一行:
SELECT * FROM sample GROUP BY group;
型
我也很想知道是否有更好的方法来达到这个结果?
PS:为什么我不使用组键来获取像SELECT * FROM sample WHERE group = 'group_1';
这样的数据是因为我不知道组名(有数千个),我只想获取一堆具有不同组名的数据,并将它们放在相同的组名中,并使用相同的组名创建一个列表。
2条答案
按热度按时间7rtdyuoh1#
Cassandra并不是设计用来使用SELECT选择大量数据的。在WHERE子句中定义分区键是非常重要的,它可以从特定的节点中进行选择,而集群键可以进一步限制所选的行数。
4nkexdtk2#
GROUP BY
子句将列值汇总到组中。为了说明,让我们考虑这个车辆数据集:
字符串
在此表中,我们存储按体型聚类的品牌数据:
型
下面是如何使用
GROUP BY
子句获取起亚销售的车身类型列表的示例:型
但在您的例子中,问题并不在于对数据进行分组,而在于您没有按分区键查询数据。执行无界查询(没有
WHERE
子句或过滤器)的开销很大,因为它需要全表扫描。它可能在非生产环境中工作,或者当您有一个小集群时,但它不能扩展,因此不建议在生产环境中使用。您需要正确地对数据进行建模,以便将它们分组/集群到一个分区中,并通过分区键从集群请求数据。干杯!