【问题标题】:Hive DATE manipulation in a query查询中的 Hive DATE 操作
【发布时间】: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 上运行这个

标签: sql 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;

【讨论】:

    猜你喜欢
    • 2019-04-18
    • 2016-09-22
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    相关资源
    最近更新 更多