【问题标题】:Hive: date range is not fetching the data from the tableHive:日期范围未从表中获取数据
【发布时间】:2019-06-06 04:58:50
【问题描述】:

我是这个平台的新手。尝试在 Hive 中完成一项任务但未能完成。

有一个结构如下的表:

Table1:

ID DATE       VAL1  VAL2  VAL3
01 12/12/2017 12.23 56.45 78.9
02 05/06/2019 65.88 65.22 98.22
03 09/08/2018 86.00 23.00 56.05
04 09/19/2019 34.09 75.04 77.89
05 03/16/2018 87.45 45.56 89.89
06 06/06/2018 67.66 45.00 67.90
07 01/01/2018 23.21 90.99 56.33
08 07/03/2018 67.22 67.22 33.11
09 05/13/2017 12.12 98.33 78.89

DataTypes:

ID   INT
DATE STRING
VAL1 DOUBLE
VAL2 DOUBLE
VAL3 DOUBLE

Hive Query:

SELECT * FROM Table1 WHERE DATE BETWEEN date_format(current_date + 
interval '-12' month,'MM/dd/YYYY') AND 
date_format(current_date,'MM/dd/YYYY');

上面的查询没有从表中获取记录。

Actual O/P:

OK
Time taken: 65.515 seconds
hive>

Expected O/P:

ID DATE       VAL1  VAL2  VAL3
02 05/06/2019 65.88 65.22 98.22
03 09/08/2018 86.00 23.00 56.05
04 09/19/2019 34.09 75.04 77.89
06 06/06/2018 67.66 45.00 67.90
08 07/03/2018 67.22 67.22 33.11

指出查询中的错误或遗漏部分的任何帮助都将非常有帮助。提前致谢。

【问题讨论】:

    标签: sql date datetime hive hiveql


    【解决方案1】:

    您使用的格式不正确。正确的格式是 'MM/dd/yyyy',而不是 'MM/dd/YYYY'。您的日期不是可排序格式,这就是为什么您需要在应用BETWEEN 过滤器之前将列日期转换为可排序格式'yyyy-MM-dd'

    SELECT * 
      FROM Table1 
     WHERE from_unixtime(unix_timestamp(`DATE`,'MM/dd/yyyy'),'yyyy-MM-dd') BETWEEN add_months(current_date,-12) AND current_date;
    

    为了更好地理解这个例子,比较两个不可排序格式的日期:

    hive> select '09/19/2018' > '08/01/2019'; --bad data format
    OK
    true
    Time taken: 5.632 seconds, Fetched: 1 row(s)
    

    这就是为什么BETWEEN 运算符在此类日期时会不正确的原因。

    让我们以正确的格式比较相同的日期:

    hive> select '2018-09-19' > '2019-08-01';
    OK
    false
    Time taken: 0.095 seconds, Fetched: 1 row(s)
    

    另请参阅SimpleDateFormat 类文档作为格式模板参考。

    【讨论】:

      【解决方案2】:

      首先将表中[Date] 列中的数据类型更新为DATE or DATETIME。 然后执行这个查询

      SELECT * FROM Table1 WHERE DATE BETWEEN Fromdate AND Todate
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多