【发布时间】:2012-10-29 20:57:14
【问题描述】:
来自在线文档: CQL 3 表的主键可以有任意数量(1 个或更多)的组件列,但必须至少有一个不属于主键的列。
这是什么原因?
我尝试在 CQL 中仅使用复合键中的列插入一行。我做 SELECT 时看不到它
cqlsh:demo> CREATE TABLE DEMO (
user_id bigint,
dep_id bigint,
created timestamp,
lastupdated timestamp,
PRIMARY KEY (user_id, dep_id)
);
cqlsh:demo> INSERT INTO DEMO (user_id, dep_id)
... VALUES (100, 1);
cqlsh:demo> select * from demo;
cqlsh:demo>
但是当我使用 cli 时,它会显示一些东西:
default@demo] list demo;
Using default limit of 100
Using default column limit of 100
-------------------
RowKey: 100
1 Row Returned.
Elapsed time: 27 msec(s).
但看不到列的值。
添加不在主键中的列后,值显示在 CQL 中
cqlsh:demo> INSERT INTO DEMO (user_id, dep_id, created)
... VALUES (100, 1, '7943-07-23');
cqlsh:demo> select * from demo;
user_id | dep_id | created | lastupdated
---------+--------+--------------------------+-------------
100 | 1 | 7943-07-23 00:00:00+0000 | null
来自 CLI 的结果:
[default@demo] list demo;
Using default limit of 100
Using default column limit of 100
-------------------
RowKey: 100
invalid UTF8 bytes 0000ab7240ab7580
[default@demo]
有什么想法吗?
更新:我找到了 CLI 返回无效 UTF8 字节 0000ab7240ab7580 的原因,它与从 CQL3 创建的表不兼容,如果我使用紧凑存储选项,CLI 的值会正确显示。
【问题讨论】:
-
再挖一点之后,确实添加了行,但是如果我使用SELECT * FROM tableName,它不会返回,除非我添加了一个不属于主键的列。跨度>