查询中的 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 操作的主要内容,如果未能解决你的问题,请参考以下文章

hive中的表操作

Hive中的Timestamp类型日期与Impala中显示不一致分析

如何从 hive 获取最新的分区数据

我们可以从 Hive 中的自定义 UDF 运行查询吗?

将值插入行类型的 Pyspark 中的 Hive 表

使用 Hive 查询 Sqoop 到 MySQL