GreenPlum SQL 到 HiveSQL 的查询语句迁移
Posted
技术标签:
【中文标题】GreenPlum SQL 到 HiveSQL 的查询语句迁移【英文标题】:GreenPlum SQL to HiveSQL migration of query statement 【发布时间】:2021-04-07 11:16:34 【问题描述】:我们必须按照以下语句将 GreenPlum SQL 迁移到 HIVESQL,请帮助我们。
to_date(b.birthday,'yyyymmddhh24miss')
extract(year from age(iDATE, to_date(b.birthday,'yyyymmddhh24miss')))
以上两条语句需要将SQL转换为HIVE。请帮帮我。
蜂巢版本:3.1.X
【问题讨论】:
【参考方案1】:相当于to_date(b.birthday,'yyyymmddhh24miss')
是
from_unixtime(unix_timestamp(b.birthday,'yyyyMMddHHmmss'))
但是,我不明白这个extract(year from age(iDATE, to_date(b.birthday,'yyyymmddhh24miss')))
。您需要 iDate 和生日的区别吗?
如果是,您可以使用年份来获取日期差异。
datediff(iDate,from_unixtime(unix_timestamp(b.birthday,'yyyyMMddHHmmss')) )/365
Hive 还有extract (year from datetimestamp)
函数。
【讨论】:
select extract(year from age('2021-04-21', to_date('2021-04-25','yyyymmddhh24miss'))) --- 是的,我们只是将 idate 作为参数传递 age 将不支持hiveSQL,取而代之,我们如何使用? 您可以计算年龄 - 这是一年中日期之间的差异(我认为)。因此,使用datediff
找出日期的差异,然后将其除以 365.25 以获得确切的年份差异(如果需要,您可以转换为 INT)。【参考方案2】:
另一种提取时间戳的方法是使用 regexp_replace:
regexp_replace(b.birthday,'^(\\d4)(\\d2)(\\d2)(\\d2)(\\d2)(\\d2)$','$1-$2-$3 $4:$5:$6')
年龄是:
cast(datediff(current_date,
regexp_replace(b.birthday,'^(\\d4)(\\d2)(\\d2)(\\d2)(\\d2)(\\d2)$','$1-$2-$3 $4:$5:$6')
)/365.25 as int)
【讨论】:
嗨,我们如何将 lpad(extract('hour' from time_stamp),2,0) 转换为 event_hour --? time_stamp 是列 @karthikelavan 请创建另一个问题,不要在 cmets 中提出新问题。另外,如果有效,请不要忘记接受/投票答案以上是关于GreenPlum SQL 到 HiveSQL 的查询语句迁移的主要内容,如果未能解决你的问题,请参考以下文章
支持greenplum string_agg 转换成hivesql
greenplum STRING_AGG 函数转换为 hiveSQL