使用CQLSH查看Cassandra分区

5
使用Cassandra,如何根据主键创建方式查看创建了多少个分区?我一直在按照教程操作,它提到要进入bin/cassandra-cli并使用LIST命令。然而,最新的Cassandra安装包中没有这个命令,我已经阅读了其他在线文章,指出cli现在已经不再被支持。
是否有任何方法可以使用cqlsh查看创建的分区?
谢谢!

你在哪里找到那个教程的?它至少过时3年了。 - Aaron
3个回答

9

首先,您需要查看cassandra.yaml文件,以查看当前配置的令牌数量。这告诉您每个节点将拥有多少分区:

$ grep num_tokens conf/cassandra.yaml
...
num_tokens: 128
...
$ grep initial_token conf/cassandra.yaml
...
# initial_token: 1
...

如果初始令牌被注释掉,这意味着节点将在启动期间自行确定其分区范围。
接下来,您可以使用nodetool ring命令检查分区范围:
$ bin/nodetool ring

Datacenter: DC1
==========
Address    Rack        Status State   Load            Owns                Token                                       
                                                                          9167006318991683417                         
127.0.0.2  r1          Down   Normal  ?               ?                   -9178420363247798328                        
127.0.0.2  r1          Down   Normal  ?               ?                   -9127364991967065057                        
127.0.0.3  r1          Down   Normal  ?               ?                   -9063041387589326037 

这显示了集群中哪个分区范围属于哪个节点。

在上面的示例中,每个节点拥有128个分区范围。从-9178420363247798327-9127364991967065057的范围属于节点127.0.0.2

您可以使用此简单选择来告知每行的分区键:

cqlsh:mykeyspace> select token(key), key, added_date, title from mytable;

 system.token(key)    | key       | added_date               | title
----------------------+-----------+--------------------------+----------------------
 -1651127669401031945 |  first    | 2013-10-16 00:00:00+0000 | Hello World
 -1651127669401031945 |  first    | 2013-04-16 00:00:00+0000 | Bye World
   356242581507269238 | second    | 2014-01-29 00:00:00+0000 | Lorem Ipsum
   356242581507269238 | second    | 2013-03-17 00:00:00+0000 | Today tomorrow
   356242581507269238 | second    | 2012-04-03 00:00:00+0000 | It's good to meet you

(5 rows)

在分区范围内查找分区键可以告诉您记录存储的位置。同时,您也可以使用nodetool在一个简单的步骤中完成相同的操作。
$ bin/nodetool getendpoints mykeyspace mytable 'first'
127.0.0.1
127.0.0.2

这将告诉您带有分区键“first”的记录位于何处。

注意:如果某些节点已关闭,则getendpoints命令不会列出这些节点,尽管根据复制设置,它们应该存储记录。


1
对于具有多个列的键,请使用冒号将它们分开,例如:nodetool getendpoints mykeyspace mytable 'first1:first2' - Udayraj Deshmukh

4

cassandra-cli 不是与 cqlsh 相同的东西。了解更多信息,请阅读:https://wiki.apache.org/cassandra/CassandraCli

获取分区(键)数量最简单的方法是使用 nodetool。

nodetool tablestats <keyspace>.<table>

键空间和表是可选的。分区数在键数(估计)的值下列出。

如果您想要行数,则Chris的回答是正确的。

SELECT * FROM <keyspace>.<table>;

这将显示表中的所有行。请记住,这是一个非常昂贵的操作,因为Cassandra必须从具有该表任何数据的所有节点中获取这些数据。


0

可以只执行 select * from table,如果查看标题,分区键和行键会以不同的颜色显示,因此可以通过这种方式找出来。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接