查询中的 Hive DATE 操作
Posted
技术标签:
【中文标题】查询中的 Hive DATE 操作【英文标题】:Hive DATE manipulation in a query 【发布时间】:2014-04-24 14:57:16 【问题描述】:我正在尝试运行 Hive QUERy 我有一张桌子,可以说 3 列。 其中一个是日期列,其数据为:
2014-04-01 2014-04-03 cf 2014-04-20
现在我想从上述数据中选择最大日期并与当前日期(假设当前日期为 2014-04-24)进行差异并将差异添加到输出中。 我的意思是 ;查询应选择 2014-04-20 并将其与当前日期相减以给出输出为 4,然后将此差异添加到所有日期以输出为:
2014-04-05 2014-04-07 cf 2014-04-24
我试过了,但遇到了语义问题:
选择 A, B, date_add( SOMEDATE, datediff(to_date( FROM_UNIXTIME(UNIX_TIMESTAMP() )), max(SOMEDATE))) 作为 SOMEDATE
【问题讨论】:
您需要两个 select 语句或一个子查询或一个 cte。这取决于你使用的平台,你不解释。 我在 Hive 上运行这个 【参考方案1】:可以使用 Hive 日期 udf(DATEDIFF、FROM_UNIXTIME、UNIX_TIMESTAMP、DATE_ADD): https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions
假设你的源表定义是:DateSource(col1 string, col2 string, myDate string)
查询将是:
SELECT col1, col2, myDate, DATE_ADD(myDate,daysDiff) as adjustedDate
FROM DateSource
JOIN
(
SELECT DATEDIFF(FROM_UNIXTIME(UNIX_TIMESTAMP(),"yyyy-MM-dd"),maxDate) as daysDiff
FROM
(
SELECT max(myDate) as maxDate FROM DateSource
) maxDate
) diffDate;
【讨论】:
以上是关于查询中的 Hive DATE 操作的主要内容,如果未能解决你的问题,请参考以下文章