如何在 Cassandra 3.3 中获取原始行内容

How to get the raw row content in Cassandra 3.3

我正在使用 Cassandra 3.3 和 CQL 创建以下 table

CREATE TABLE collected_data ( 
    collection_hour int,
    source_id int, 
    entity_id int, 
    measurement text, 
    value text, 
    primary key((collection_hour),source_id,entity_id,measurement)  
);

在向这个 table 中插入一堆值后,我想看看 每行 是如何真正存储在 Cassandra 中的。为此,我看到人们正在使用 cassandra-cli(列表命令),但在 3.3 ( post 3.0 )

中不再可用

有没有一种方法可以用来查询 cassandra 以查看每一行的实际存储方式?我正在寻找一些工具或任何方式来从 CQL 做到这一点......

谢谢

PS:在 cassandra CLI 中,可以使用 "list command" 并获得类似于以下内容的输出(当然 table 不同):

RowKey: 1
=> (column=, value=, timestamp=1374546754299000)
=> (column=field2, value=00000002, timestamp=1374546754299000)
=> (column=field3, value=00000003, timestamp=1374546754299000)

RowKey: 4
=> (column=, value=, timestamp=1374546757815000)
=> (column=field2, value=00000005, timestamp=1374546757815000)
=> (column=field3, value=00000006, timestamp=1374546757815000)

自 Cassandra 3.0 以来,存储引擎已被重写,因此磁盘布局已完全改变。

没有关于此主题的官方文档,但您可以查看源代码中的多个位置,以全面了解数据是如何放置在磁盘上的

UnfilteredSerializer: https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/db/rows/UnfilteredSerializer.java#L29-L71

Cell 存储:https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/db/rows/Cell.java#L145-L163

ClusteringPrefix: https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/db/ClusteringPrefix.java#L33-L45