Cassandra中的TimeUUID vs timestamp?

lskq00tm  于 11个月前  发布在  Cassandra
关注(0)|答案(3)|浏览(109)

如果我们可以从TimeUUID中提取时间,那么在Cassandra中使用timestamp作为另一列有意义吗?
还有,我们如何从TimeUUID中提取时间并进行范围查询(例如:2016年1月至2016年5月)在?

ogq8wdun

ogq8wdun1#

我遇到了这个问题,并在查询过程中转换。

SELECT toTimestamp(uuid_timestamp) FROM table

这不是一个问题,因为我正在插入一个Pandas数据框进行分析。

j7dteeu8

j7dteeu82#

来自https://cassandra.apache.org/doc/4.0/cassandra/cql/cql_singlefile.html#timeuuidFun:
Timeuid函数
now
now函数不接受任何参数,并在协调器节点上生成一个新的唯一timeuuid(在执行使用它的语句时)。注意,这个方法对于插入很有用,但是在WHERE子句中很大程度上没有意义。例如,以下形式的查询

SELECT * FROM myTable WHERE t = now()

不会返回任何结果,因为now()返回的值保证是唯一的。
minTimeuuidmaxTimeuuid
minTimeuuid(分别为maxTimeuuid)函数接受一个timestampt(可以是时间戳或日期字符串),并返回一个 faketimeuuid,对应于 * 最小 *(分别为 * 最大 *)可能的timeuuid具有时间戳t。例如:

SELECT * FROM myTable WHERE t > maxTimeuuid('2013-01-01 00:05+0000') AND t < minTimeuuid('2013-02-02 10:00+0000')

将选择timeuuidt严格早于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')

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

时间转换函数
提供了许多函数来将timeuuidtimestampdate“转换”为另一种本机类型。

oipij1gg

oipij1gg3#

如果选择使用timeuuid,则不需要将timestamp存储在不同的列中。
您正在寻找:
https://docs.datastax.com/en/cql/3.0/cql/cql_reference/timeuuid_functions_r.html
请注意minmax。LSB位确定唯一性。即最后8位的范围可以从00000000ffffffff
因此,请相应地准备您的范围查询。

相关问题