Hive表两列时间与当前时间的比较
Posted 西瓜投手二号
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive表两列时间与当前时间的比较相关的知识,希望对你有一定的参考价值。
在hive实际生成需求中,我们常常会碰到这样的问题,找出会员未到期的用户,那么,我们可以通过分别对用户会员开通时间、结束时间跟当前时间做比较,用户会员开通时间effdate以及结束时间expdate已确定,如下图:
在IDEA上怎么样才能完成上述操作呢
很多时候,我们在碰到问题的时候都会去网上寻找答案,其中,搜索用的关键词尤为重要,关键词用的好,答案一下子就出来了,反之可能要在上面花费很大的功夫。西瓜要完成的任务是在IDEA上用scala语言完成上面的任务,但一开始没有思路,网上搜索的关键词是SparkDataFrame、Scala之类的,导致一致搜不出来想要的结果,卡了一晚上,今天早上在用Hive表进行测试的时候忽然发现,上面的数据是从Hive导入的,西瓜之前搜索用的关键词都错了,最后用Hive关键词搜索,根据文章提供的资源,思路一下子就出来了。
order_index.filter("cost>0 and offername != 'NULL'") //其他筛选条件
.withColumn("effdate",col("effdate").cast("timestamp")) //将string类型数据转换为timestamp
.withColumn("expdate",col("expdate").cast("timestamp")) //同上
.withColumn("now_date",from_unixtime(unix_timestamp(),"yyyy-MM-dd HH:mm:ss")) //获取当前时间,时间格式为"yyyy-MM-dd HH:mm:ss"("2014-01-03 00:00:00")
.withColumn("date1",datediff(col("now_date"),col("effdate"))) //now_date减去effdate,结果为正即想要的结果
.withColumn("date2",datediff(col("expdate"),col("now_date"))) //同上,结果为正说明会员还没到期
.filter("date1>0 and date2>0") //条件筛选,筛选出开通时间在当前时间之前且结束时间在当前时间之后的数据
.show()
结果如下:
以上就是会员未到期的用户的数据(部分),西瓜在原本的数据上新增了三列,但西瓜认为此代码还需要优化,初步猜测可以将代码优化成不需要新增那三列也可以找出想要的数据,欢迎各位小伙伴提出自己的看法
以上是关于Hive表两列时间与当前时间的比较的主要内容,如果未能解决你的问题,请参考以下文章