我正在尝试了解创建复合列时使用的类型。
我正在使用CQL3(通过cqlsh)创建CF,然后使用CLI来发出describe命令。 列中的类型排序依据:... CompositeType(Type1,Type2,...)不是我期望的那些。
我正在使用Cassandra 1.1.6。
CREATE TABLE CompKeyTest1 (
KeyA int,
KeyB int,
KeyC int,
MyData varchar,
PRIMARY KEY (KeyA, KeyB, KeyC)
);
返回的CompositeType为
CompositeType(Int32,Int32,UTF8)
不应该是(Int32,Int32,Int32)?
CREATE TABLE CompKeyTest2 (
KeyA int,
KeyB varchar,
KeyC int,
MyData varchar,
PRIMARY KEY (KeyA, KeyB, KeyC)
);
返回的CompositeType为
CompositeType(UTF8,Int32,UTF8)
为什么它与我定义表时使用的类型不一样?我可能在类型赋值中遗漏了一些基本内容......
谢谢!
答案 0 :(得分:4)
复合列名称由主键2 ... n的值和要保存的非主键列的名称组成。
(因此,如果你有5个非关键字段,那么你将有5个这样的列,它们的列名只会在最后一个组合值上有所不同,这个值将是非关键字段名。)
因此,在这两个示例中,复合列由KeyB,KeyC的值和要存储的列的名称组成("MyData"
,两种情况)。这就是为什么你会看到那些CompositeTypes
被退回的原因。
(顺便说一下,主键中的第一个键是分区键,它的值仅用作行键(如果你熟悉Cassandra的话)。它不作为任何一个的一部分使用。复合列名称。)