【问题标题】:Get timestamp of a collection item in CQL / Cassandra在 CQL / Cassandra 中获取集合项的时间戳
【发布时间】:2017-01-23 08:28:10
【问题描述】:

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

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

    集合中的各个列确实具有单独的时间戳。您可以通过使用 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 返回这些。您将无法从集合中返回单个列,但返回时间戳以及集合中所有条目的值是合理的,但是我找不到任何有关如何执行此操作的文档它看起来不像它的支持。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-15
        • 2013-08-02
        • 2018-07-17
        • 2018-11-10
        相关资源
        最近更新 更多