我有这样定义的定制列表表:CQL3:如何在仅有主键时检索TTL?
CREATE table primary_key_only(
row_key varchar,
clustered_key varchar,
primary key(row_key, clustered_key)
)
假设我插入这样的价值观:
INSERT INTO primary_key_only (row_key, clustered_key) VALUES ('FACE', 'D00D') USING TTL 86400;
我怎么会去检索TTL插入的数据?通常情况下,如果有一个定制列表列,这不是主键的一部分,那么我可以使用这样的表述:
SELECT ttl(<column_name>) FROM table WHERE row_key='key';
但由于只有主键列,功能类似于ttl
和writetime
不会工作。除了向不是主键一部分的表中增加一个额外的“虚拟”列之外,我如何获得TTL?
我相信在CQL中没有办法达到这个目的。但是,我可以使用cassandra-cli获得TTL。我想知道:为列名指定TTL是什么意思,这是'D00D'在后端有效的内容。值可能过期,但名称也可以过期?当然,我们可以将值存储在列名称中,但实现(至少是CQL)不考虑该假设。 – Nikhil
在cassandra-cli中,我基本上看到一个空白值的列(名字中有'D00D');这个空值是TTL实际关联的。由于没有非主键CQL列,实际上没有值存储,只有列名。我知道你可以通过cassandra-cli获得TTL,但这不是我的选择,因为我使用Datastax Java驱动程序进行查询。 (应该提到)感谢您的建议。 – Peter
因此,它看起来越来越像我只需添加一个不属于主键的虚拟列,以便能够检索TTL。该虚拟值将始终为空。想想看,无论如何物理存储的方式都没有什么不同:Cassandra将创建一个列名称对应于'clustered_key'中的值的列,但实际值将为空。 – Peter