如何获取Cassandra中所有记录的主键?

时间:2017-02-17 03:45:17

标签: cassandra cql

我已经向Cassandra插入了大量数据。现在我想随机查询一条记录。 但我不知道primary key。所以我想在Cassandra中获取all data的主键,然后我可以使用一个随机主键来查询数据。

我可以从Cassandra的data目录中获取它吗?我只在该目录中找到.db文件。

2 个答案:

答案 0 :(得分:3)

你在哪个版本的Cassandra?如果您使用的是Cassandra 3,则可以从命令行查询system_schema.columns,并使用grep查找PRIMARY KEY部分,如下所示:

$ bin/cqlsh -u aploetz -p pass 
    -e'SELECT keyspace_name,table_name,column_name,kind 
       FROM system_schema.columns' | grep _key
               test |                           fail |                          id | partition_key
      stackoverflow |                 hourly_average |              application_id | partition_key
      stackoverflow |                         meters |                   device_id | partition_key
      stackoverflow |                         meters |                  parking_id | partition_key
      stackoverflow |                        meters2 |                   device_id | partition_key
      stackoverflow |                        meters2 |                  parking_id | partition_key

然后要获取聚类键,您可以稍微修改一下:

$ bin/cqlsh -u aploetz -p pass
    -e'SELECT keyspace_name,table_name,column_name,kind
       FROM system_schema.columns' | grep clustering
      stackoverflow |                 hourly_average |                   device_id |    clustering
      stackoverflow |                 hourly_average |                 location_id |    clustering
      stackoverflow |                 hourly_average |                  partner_id |    clustering
      stackoverflow |                         meters |                        date |    clustering
      stackoverflow |                         meters |                      status |    clustering
      stackoverflow |                        meters2 |                        date |    clustering
      stackoverflow |                        meters2 |                      status |    clustering

请注意,如果要按键空间和表过滤这些结果,可以在WHERE子句中指定这些结果。

答案 1 :(得分:0)

您需要使用TOKEN函数以避免未绑定的SELECT * FROM xxx;查询。 This external post解释了如何遍历所有数据集,但您可以通过非常小的努力将其用于您的用例。