Cassandra列族通过CLI和DataStax以不同方式显示

Sot*_*lis 0 c# cassandra cassandra-cli datastax

我试图理解为什么我以两种方式看到不同的数据来显示Cassandra(1.2.x)列族列.

在第一个,我使用cassandra-clilist该行一列的家庭.

[cassandra-cli]> list Users columns 1;
Using default limit of 100
-------------------
RowKey: [rowkey1]
=> (name=[name1], value=[value1], timestamp=[timestamp1])
Run Code Online (Sandbox Code Playgroud)

两者之间的数据[]是值的占位符.实际上,它们显示为a的十六进制表示byte[].上面似乎表明有一行有一个列(有一个名称,一个值和一个时间戳).

我正在做我认为与DataStax v1 API等效的东西

var cluster = Cluster.Builder ()
    .AddContactPoint ("127.0.0.1")
    .Build ();

var metadata = cluster.Metadata;
var keyspace = "keyspaceName";
var tableMetadatas = metadata.GetTables(keyspace);

foreach (var tableMetadata in tableMetadatas) {
    var session = cluster.Connect(keyspace);    

    var rowSet = session.Execute("SELECT * FROM \""+ tableMetadata + "\" ", ConsistencyLevel.One);
    CqlColumn[] columns = rowSet.Columns;

    foreach(var column in columns) {
        Console.WriteLine("Column name: " + column.Name + ", type: " + column.Type + ", keyspace: " + column.Keyspace);
    }

    foreach (var row in rowSet.GetRows()) {
        for (int i = 0; i < row.Length; i++) {
            String value = Encoding.UTF8.GetString(row.GetValue<byte[]>(i));
                        Console.WriteLine(value);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这显示

Column name: key, type: System.Byte[], keyspace: keyspaceName
Column name: column1, type: System.Byte[], keyspace: keyspaceName
Column name: value, type: System.Byte[], keyspace: keyspaceName
[The string value of rowkey1]
[The string value of name1]
[The string value of value1]
Run Code Online (Sandbox Code Playgroud)

这似乎表明有3列:一列有名称key,其中值为rowkey; 一个有名字column1,其中值是值name1; 和一个名称value,其中值是值value1.

我该如何解释这些差异?

Ale*_*scu 7

在使用时,cassandra-cli您会看到存储的"Thrift-perspective",同时使用DataStax驱动程序并cqlsh为您提供"CQL-perspective".

有一系列帖子描述了这两者是如何相关的.我在回答THr上的Thrift和CQL3列之间的问题时,我已经将这些链接起来了.