只需将TTL设置为一行即可

Kno*_*uch 7 cassandra

使用Java,我可以扫描一个Cassandra表并只更新一行的TTL吗?我不想改变任何数据.我只想扫描Cassandra表并设置几行的TTL.

另外,使用java,我可以设置绝对的TTL.例如(2016-11-22 00:00:00).所以我不想以秒为单位指定TTL,而是指定时间的绝对值.

xma*_*s79 14

卡桑德拉不允许设置TTL值一列,它允许设置列的TTL 值只.

在你想知道为什么你的情况都遇到行 到期,这是因为如果一切当您尝试记录的所有列的值TTLed则行消失SELECT了.

但是,只有在执行时才会INSERT出现这种情况USING TTL.如果你INSERT没有TTL,然后UPDATE用TTL 做一个你仍然会看到行,但是有空值.这里有一些例子和一些问题:


INSERT仅限TTL的示例:

CREATE TABLE test (
    k text PRIMARY KEY,
    v int,
);

INSERT INTO test (k,v) VALUES ('test', 1) USING TTL 10;

... 10 seconds after...

SELECT * FROM test ;

 k             | v
---------------+---------------
Run Code Online (Sandbox Code Playgroud)

TTLed INSERT和TTLed的示例UPDATE:

INSERT INTO test (k,v) VALUES ('test', 1) USING TTL 10;
UPDATE test USING TTL 10 SET v=0 WHERE k='test';

... 10 seconds after...

SELECT * FROM test;

 k             | v
---------------+---------------
Run Code Online (Sandbox Code Playgroud)

带有TTL的非TTL INSERT的示例UPDATE

INSERT INTO test (k,v) VALUES ('test', 1);
UPDATE test USING TTL 10 SET v=0 WHERE k='test';

... 10 seconds after...

SELECT * FROM test;

 k             | v
---------------+---------------
          test |          null
Run Code Online (Sandbox Code Playgroud)

现在您可以看到解决问题的唯一方法是使用新的TTL 重写行的所有列的所有值.

此外,无法指定明确的到期日期,但您可以使用简单的数学(如其他建议的那样)在几秒钟内获得简单的TTL值.

查看有关数据过期的官方文档.并且不要忘记查看DELETE部分以更新TTL.

HTH.