3

I want to view the "rowkey" with its stored data in cassandra 3.0. I know, the depreciated cassandra-cli had the 'list'-command. However, in cassandra 3.0, I cannot find the replacement for the 'list'-command. Anyone knows the new cli-command for 'list'?

nimo23
  • 5,170
  • 10
  • 46
  • 75
  • `SELECT * FROM table` in cqlsh. The cells are no longer laid out on disk like in the thrift format so the CQL SELECT is representative of your data. – Chris Lohfink Mar 11 '16 at 18:30
  • But I want to see how Cassandra has stored this data under the hood. A "select * from table" does not show me the format such as: RowKey: 100. => (name=, value=, timestamp=1387..) 07. => (name=tmp, value=51cc0000, timestamp=1387...). How has cassandra stored my "select * from table" under the hood? I cannot use "list" anymore in cassandra 3. – nimo23 Mar 11 '16 at 19:51
  • 1
    http://thelastpickle.com/blog/2016/03/04/introductiont-to-the-apache-cassandra-3-storage-engine.html – RussS Mar 12 '16 at 01:52
  • 3
    If really want to dig into how its stored you can use sstabledump utility (-d option for more compact reading). For more interactive can use the cqlsh offline functions in [sstable tools](https://github.com/tolbertam/sstable-tools) – Chris Lohfink Mar 12 '16 at 14:35

1 Answers1

2

You can use sstabledump utility as @chris-lohfink suggested. How to use it? Create keyspace, table in it populate some data:

cqlsh> CREATE KEYSPACE IF NOT EXISTS minetest WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };

cqlsh> CREATE TABLE object_coordinates (
   ... object_id int PRIMARY KEY,
   ... coordinate text
   ... );

cqlsh> use minetest;

cqlsh:minetest> insert into object_coordinates (object_id, coordinate) values (564682,'59.8505,34.0035');
cqlsh:minetest> insert into object_coordinates (object_id, coordinate) values (1235,'61.7814,40.3316');
cqlsh:minetest> select object_id, coordinate, writetime(coordinate) from object_coordinates;

 object_id | coordinate      | writetime(coordinate)
-----------+-----------------+-----------------------
      1235 | 61.7814,40.3316 |      1480436931275615
    564682 | 59.8505,34.0035 |      1480436927707627

(2 rows)

object_id is a primary (partition key) key, coordinate is clustering one.

Flush changes to disk:

# nodetool flush

Find sstable on disk and analyze it:

# cd /var/lib/cassandra/data/minetest/object_coordinates-e19d4c40b65011e68563f1a7ec2d3d77

# ls
backups  mc-1-big-CompressionInfo.db  mc-1-big-Data.db  mc-1-big-Digest.crc32  mc-1-big-Filter.db  mc-1-big-Index.db  mc-1-big-Statistics.db  mc-1-big-Summary.db  mc-1-big-TOC.txt

# sstabledump mc-1-big-Data.db
[
  {
    "partition" : {
      "key" : [ "1235" ],
      "position" : 0
    },
    "rows" : [
      {
        "type" : "row",
        "position" : 18,
        "liveness_info" : { "tstamp" : "2016-11-29T16:28:51.275615Z" },
        "cells" : [
          { "name" : "coordinate", "value" : "61.7814,40.3316" }
        ]
      }
    ]
  },
  {
    "partition" : {
      "key" : [ "564682" ],
      "position" : 43
    },
    "rows" : [
      {
        "type" : "row",
        "position" : 61,
        "liveness_info" : { "tstamp" : "2016-11-29T16:28:47.707627Z" },
        "cells" : [
          { "name" : "coordinate", "value" : "59.8505,34.0035" }
        ]
      }
    ]
  }
]

Or with -d flag:

# sstabledump mc-1-big-Data.db -d
[1235]@0 Row[info=[ts=1480436931275615] ]:  | [coordinate=61.7814,40.3316 ts=1480436931275615]
[564682]@43 Row[info=[ts=1480436927707627] ]:  | [coordinate=59.8505,34.0035 ts=1480436927707627

Output says that 1235 and 564682 and saves coordinates in those partitions.

Link to doc http://www.datastax.com/dev/blog/debugging-sstables-in-3-0-with-sstabledump

PS. sstabledump is provided by cassandra-tools package in ubuntu.

ipeacocks
  • 2,187
  • 3
  • 32
  • 47