presto cassandra 的时间戳比较无法正常工作

Posted

技术标签:

【中文标题】presto cassandra 的时间戳比较无法正常工作【英文标题】:Timestamp comparision not working properly for presto cassandra 【发布时间】:2017-08-26 06:08:14 【问题描述】:

我有以下 presto 查询来从 cassandra 中检索数据

select * from table where created_time >= '2017-03-23 00:00:00.0' and created_time

该表有 70 行,created_time 为 2017-03-25,但上述查询并未返回所有行。

created_time 在 cassandra 中定义为 timeuuid。有人可以帮我为什么查询不起作用

【问题讨论】:

你的表结构是什么? mysql中的谁和这里有关? 如果你做select * from table limit 10;,你在create_time中得到什么值?请记住,在 Presto 中,timeuuid 类型映射到 VARCHAR 【参考方案1】:

如果created_time 定义为timeuuid,我认为查询谓词会将其与timeuuid 值进行比较,而不是字符串或日期字符串。

我们可以使用minTimeuuidmaxTimeuuid 函数生成可以与timeuuid 列进行比较的值。

如果我们希望在 3 月 25 日的某个时间出现带有 created_time 的行,我们可能希望比较“小于”26th '2017-03-26'

例如:

   where created_time >= minTimeuuid('2017-03-25 00:00+0000') 
     and created_time <  minTimeuuid('2017-03-26 00:00+0000')

【讨论】:

我正在 presto 中编写查询,当我使用 minTimeuuid 函数时出现以下错误:查询 20170403_224330_25606_q2qw7 失败:第 1:106 行:函数 mintimeuuid 未注册 显然,presto 将 Cassandra timeuuid 类型映射为 VARCHAR,而 presto 不支持 Cassandra minTimeuuid 函数。 Presto 应该邀请更好地支持timeuuidminTimeuuid 功能的扩展。如果扩展 presto 不是一个理想的选择,那么您需要探索其他一些替代方案,例如添加一个 presto 支持的 timestamp 列。或者,实现一个模仿 Cassandra minTimeuuid 函数的函数(返回一个等效值),并在 Cassandra 查询中使用该值...created_time &gt; 'mygenerateduuidvalue'

以上是关于presto cassandra 的时间戳比较无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Presto Cassandra 连接器

presto 可以有多个工作进程吗?

如何在 Presto 中将时间戳转换为日期?

Presto - where 子句中的静态日期和时间戳

如何将表示 EPOCH 时间的整数转换为 Athena (Presto) 中的时间戳?

AWS Athena (Presto) - 如何将时间戳格式化为日期格式?