我是这个平台的新手。试图在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
任何帮助指出查询中的错误或遗漏部分将非常有帮助。预先感谢。
答案 0 :(得分:3)
您使用的格式不正确。正确的格式是'MM/dd/yyyy'
,而不是'MM/dd/YYYY'
。您的日期不是可排序格式,这就是为什么在应用'yyyy-MM-dd'
过滤器之前需要将列日期转换为可排序格式BETWEEN
的原因:
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类文档作为格式模板参考。
答案 1 :(得分:0)
首先将表中.laid-out {
display: flex;
flex-direction: column;
}
.laid-out > * {
margin-bottom: 10px;
}
.laid-out > *:last-child {
margin-bottom: 0;
}
列中的数据类型更新为[Date]
。
然后执行此查询
DATE or DATETIME