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
值进行比较,而不是字符串或日期字符串。
我们可以使用minTimeuuid
和maxTimeuuid
函数生成可以与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 将 Cassandratimeuuid
类型映射为 VARCHAR,而 presto 不支持 Cassandra minTimeuuid 函数。 Presto 应该邀请更好地支持timeuuid
和minTimeuuid
功能的扩展。如果扩展 presto 不是一个理想的选择,那么您需要探索其他一些替代方案,例如添加一个 presto 支持的 timestamp
列。或者,实现一个模仿 Cassandra minTimeuuid 函数的函数(返回一个等效值),并在 Cassandra 查询中使用该值...created_time > 'mygenerateduuidvalue'
。以上是关于presto cassandra 的时间戳比较无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章