获取CQL / Cassandra中集合项的时间戳

时间:2015-10-06 17:52:28

标签: cassandra cql

我知道我可以使用writetime()来获取列的内部时间戳,但是是否可以获取集合中特定项目的时间戳(如列表)?我的理解是,集合项在内部存储为单独的列,因此它们似乎应该有单独的时间戳。

2 个答案:

答案 0 :(得分:2)

集合中的各个列确实具有单独的时间戳。您可以通过使用sstable2json函数直接检查SSTable来查看此信息。

CREATE TABLE users (
user_id text,
emails set<text>,
first_name text,
last_name text,
PRIMARY KEY ((user_id))
)

INSERT INTO users (user_id, first_name, last_name, emails)
   VALUES('frodo', 'Frodo', 'Baggins', {'f@baggins.com', 'baggins@gmail.com'});

UPDATE users
   SET emails = emails + {'fb@friendsofmordor.org'} WHERE user_id = 'frodo';

然后SSTable看起来像这样:

[
{"key": "66726f646f","columns": [["","",1444170199819000],
["emails","emails:!",1444170199818999,"t",1444170199], 
["emails:62616767696e7340676d61696c2e636f6d","",1444170199819000],  
["emails:664062616767696e732e636f6d","",1444170199819000], 
["emails:666240667269656e64736f666d6f72646f722e6f7267","",1444170213268000], 
["first_name","Frodo",1444170199819000], 
["last_name","Baggins",1444170199819000]]}
]

您可以在电子邮件中看到与时间戳1444170199819000,1444170199819000和1444170213268000对应的3个条目。

然而,似乎无法通过CQL返回这些内容。您无法从集合中返回单个列,但是返回时间戳以及集合中所有条目的值是合理的,但是我无法找到有关如何的任何文档要做到这一点,它看起来不像它的支持。

答案 1 :(得分:1)

集合元素有自己的时间戳,但不可能使用CQL获取这些时间戳。请参阅相应的Jira票证以支持此功能:CASSANDRA-8877