TimeUUID 与 Cassandra 中的时间戳?

TimeUUID vs timestamp in Cassandra?

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

还有我们如何从TimeUUID中提取时间并对其进行范围查询(例如2016年1月至2016年5月)?

如果您选择使用 timeuuid,则无需将时间戳存储在不同的列中。

您正在寻找 this.

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

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

希望对您有所帮助!

Timeuuid 函数

现在

now 函数不带任何参数,并在协调器节点上生成一个新的唯一 timeuuid(在执行使用它的语句的时间)。请注意,此方法对插入很有用,但在 WHERE 子句中基本上没有意义。例如,

形式的查询

SELECT * FROM myTable WHERE t = now() 永远不会 return 任何设计结果,因为由 now() 编辑的值 return 保证是唯一的。

minTimeuuidmaxTimeuuid

minTimeuuid (resp.maxTimeuuid) 函数采用时间戳值 t(可以是时间戳或日期字符串)和 return 对应于最小(resp.最大)可能 timeuuid 的假 timeuuid具有时间戳 t。例如:

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

Functions table

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

时间转换函数

提供了许多函数来将 timeuuid、时间戳或日期“转换”为另一种本机类型。

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

SELECT toTimestamp(uuid_timestamp) FROM table

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