【问题标题】:How can I get the primary keys of all records in Cassandra?如何获取 Cassandra 中所有记录的主键?
【发布时间】:2017-05-08 17:43:40
【问题描述】:

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

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

【问题讨论】:

  • 没有这样的功能...也许你可以试试COPY table_name(column_name) TO file_name.csv
  • 我可以使用一些工具从data 目录中获取主键吗?
  • 这个 COPY 命令在 DevCenter 和 cqlsh 中都可以工作......数据目录将只包含部分数据(数据分布在不同节点上)
  • sstable2json 实用程序将为您提供您指定的 ssTable 文件的完整数据转储

标签: cassandra cql


【解决方案1】:

您使用的是哪个版本的 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 子句中指定。

【讨论】:

  • 我不想要主键的架构。我想得到的是主键的值。
【解决方案2】:

要获取可以在 CQL 中使用 distinct 的主键值:

cqlsh> select distinct pkey_column FROM table;

或多个:

cqlsh> select distinct pkey_column_1, pkey_column_2 FROM table;

【讨论】:

  • 如果我已经知道pkey_colum 的名称,我应该查询什么?我们需要它的主键列名称,例如idmytable_id 或其他任何名称。
  • @Badiparmagi 您可以使用DESCRIBE TABLE keyspace_name.table_name 查看特定表的主键列是什么(或使用@Aaron 的答案)。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2019-07-04
    • 1970-01-01
    相关资源
    最近更新 更多