TimeUUID与Cassandra的时间戳?

时间:2016-05-28 11:55:02

标签: cassandra timeuuid nosql

如果我们可以从TimeUUID中提取时间,那么将时间戳用作Cassandra中的另一列是否有意义?

另外,我们如何从TimeUUID中提取时间并进行范围查询(例如2016年1月至2016年5月)呢?

3 个答案:

答案 0 :(得分:1)

我遇到了这个问题并在查询期间进行了转换。

SELECT toTimestamp(uuid_timestamp) FROM table

这不是问题因为我正在插入熊猫数据框进行分析。

答案 1 :(得分:0)

如果您选择使用timeuuid,则无需在其他列中存储时间戳。

您正在寻找this

请注意minmax。 LSB位确定唯一性。即最后8位可以从00000000ffffffff

因此,请相应地准备您的范围查询。

希望这有帮助!

答案 2 :(得分:0)

Timeuuid功能

现在

now函数不带参数,并在协调器节点上生成一个新的唯一timeuuid(在执行使用它的语句时)。请注意,此方法对于插入很有用,但在WHERE子句中很大程度上是不敏感的。例如,表单的查询

SELECT * FROM myTable WHERE t = now() 将永远不会按设计返回任何结果,因为now()返回的值保证是唯一的。

minTimeuuidmaxTimeuuid

minTimeuuid(resp.maxTimeuuid)函数获取时间戳值t(可以是时间戳或日期字符串)并返回对应于具有时间戳t的最小(最大)可能时间流量的假时间。例如:

SELECT * FROM myTable WHERE t > maxTimeuuid('2013-01-01 00:05+0000') AND t < minTimeuuid('2013-02-02 10:00+0000') 将选择timeuuid列t严格早于2013-01-01 00:05+0000但严格小于2013-02-02 10:00+0000的所有行。请注意,t >= maxTimeuuid('2013-01-01 00:05+0000')仍然不会选择恰好在2013-01-01 00:05+0000生成的timeuuid,并且基本上等同于t > maxTimeuuid('2013-01-01 00:05+0000')

Functions table

警告:我们调用minTimeuuid和maxTimeuuid假冒UUID生成的值,因为它们不遵守RFC 4122指定的基于时间的UUID生成过程。特别是,这两种方法返回的值不是唯一的。这意味着您应该只使用这些方法进行查询(如上例所示)。插入这些方法的结果几乎肯定是个坏主意。

时间转换功能

提供了许多功能来将timeuuid,时间戳或日期“转换”为另一种原生类型。