如果我们可以从TimeUUID中提取时间,那么在Cassandra中使用timestamp作为另一列有意义吗?还有,我们如何从TimeUUID中提取时间并进行范围查询(例如:2016年1月至2016年5月)在?
ogq8wdun1#
我遇到了这个问题,并在查询过程中转换。
SELECT toTimestamp(uuid_timestamp) FROM table
这不是一个问题,因为我正在插入一个Pandas数据框进行分析。
j7dteeu82#
来自https://cassandra.apache.org/doc/4.0/cassandra/cql/cql_singlefile.html#timeuuidFun:Timeuid函数nownow函数不接受任何参数,并在协调器节点上生成一个新的唯一timeuuid(在执行使用它的语句时)。注意,这个方法对于插入很有用,但是在WHERE子句中很大程度上没有意义。例如,以下形式的查询
now
WHERE
SELECT * FROM myTable WHERE t = now()
不会返回任何结果,因为now()返回的值保证是唯一的。minTimeuuid和maxTimeuuidminTimeuuid(分别为maxTimeuuid)函数接受一个timestamp值t(可以是时间戳或日期字符串),并返回一个 faketimeuuid,对应于 * 最小 *(分别为 * 最大 *)可能的timeuuid具有时间戳t。例如:
now()
minTimeuuid
maxTimeuuid
timestamp
t
timeuuid
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')。
2013-01-01 00:05+0000
2013-02-02 10:00+0000
t >= maxTimeuuid('2013-01-01 00:05+0000')
t > maxTimeuuid('2013-01-01 00:05+0000')
时间转换函数提供了许多函数来将timeuuid、timestamp或date“转换”为另一种本机类型。
date
oipij1gg3#
如果选择使用timeuuid,则不需要将timestamp存储在不同的列中。您正在寻找:https://docs.datastax.com/en/cql/3.0/cql/cql_reference/timeuuid_functions_r.html请注意min和max。LSB位确定唯一性。即最后8位的范围可以从00000000到ffffffff。因此,请相应地准备您的范围查询。
min
max
00000000
ffffffff
3条答案
按热度按时间ogq8wdun1#
我遇到了这个问题,并在查询过程中转换。
这不是一个问题,因为我正在插入一个Pandas数据框进行分析。
j7dteeu82#
来自https://cassandra.apache.org/doc/4.0/cassandra/cql/cql_singlefile.html#timeuuidFun:
Timeuid函数
now
now
函数不接受任何参数,并在协调器节点上生成一个新的唯一timeuuid(在执行使用它的语句时)。注意,这个方法对于插入很有用,但是在WHERE
子句中很大程度上没有意义。例如,以下形式的查询不会返回任何结果,因为
now()
返回的值保证是唯一的。minTimeuuid
和maxTimeuuid
minTimeuuid
(分别为maxTimeuuid
)函数接受一个timestamp
值t
(可以是时间戳或日期字符串),并返回一个 faketimeuuid
,对应于 * 最小 *(分别为 * 最大 *)可能的timeuuid
具有时间戳t
。例如:将选择
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')
。minTimeuuid
和maxTimeuuid
生成的值称为 fake UUID,因为它们不遵守RFC 4122指定的基于时间的UUID生成过程。特别是,这两个方法返回的值将不是唯一的。这意味着您应该只使用这些方法进行查询(如上面的示例所示)。插入这些方法的结果几乎肯定是一个“坏主意”。时间转换函数
提供了许多函数来将
timeuuid
、timestamp
或date
“转换”为另一种本机类型。oipij1gg3#
如果选择使用
timeuuid
,则不需要将timestamp
存储在不同的列中。您正在寻找:
https://docs.datastax.com/en/cql/3.0/cql/cql_reference/timeuuid_functions_r.html
请注意
min
和max
。LSB位确定唯一性。即最后8位的范围可以从00000000
到ffffffff
。因此,请相应地准备您的范围查询。