我试图理解为什么我以两种方式看到不同的数据来显示Cassandra(1.2.x)列族列。
首先,我使用cassandra-cli
到list
列系列中的行。
[cassandra-cli]> list Users columns 1;
Using default limit of 100
-------------------
RowKey: [rowkey1]
=> (name=[name1], value=[value1], timestamp=[timestamp1])
[]
之间的数据是该值的占位符。实际上,它们显示为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);
}
}
}
显示
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]
这似乎表明有3列:一列名为key
,其中值为rowkey
;一个名为column1
的名称,其中值为name1
的值;和名为value
的名称value1
,其值为{{1}}。
我应该如何解释这些差异?
答案 0 :(得分:7)
使用cassandra-cli
时,您会看到&#34; Thrift-perspective&#34;您的存储空间,使用DataStax驱动程序和cqlsh
将为您提供&#34; CQL-perspective&#34;。
有一系列帖子描述了这两者是如何相关的。我在回答Different between Thrift and CQL3 columns关于SO的问题时已将这些与这些联系起来。