sql - Hive:日期范围未从表中获取数据

标签 sql date datetime hive hiveql

我是这个平台的新手。试图在 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

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

最佳答案

您使用的格式不正确。正确的格式是 '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运算符(operator)将在这样的日期下工作不正确。

让我们以正确的格式比较相同的日期:
hive> select '2018-09-19' > '2019-08-01';
OK
false
Time taken: 0.095 seconds, Fetched: 1 row(s)

另见 SimpleDateFormat类文档作为格式模板引用。

关于sql - Hive:日期范围未从表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56471108/

相关文章:

java - addScalar 是做什么的?

php - 使用 IN 运算符的慢查询

python - 分词建议

ios - 如何获取周一、周二等工作日的本地化字符串表示形式?

mysql - 将 MySQL 日期时间转换为时间戳

php - 如何使用 PHP-CLI 提示输入并将输入作为变量提供?

mysql - [34, 105] 该表达式不是有效的条件表达式

mysql - 使用 MYSQL 根据另一个表中的现有条目添加条目

php - 在 echo PHP 之前重新格式化日期

Python(日期时间)时区转换关闭 4 分钟