【问题标题】:Hive query is not returning outputHive 查询不返回输出
【发布时间】:2019-06-12 12:51:51
【问题描述】:

Hive 查询未返回数据(行数为 0)。

需要从表中检索截至/当前日期的 1 个月前的记录。

select * from table1 
where date_format(order_date,'yyyy-MM-dd') >= date_format(add_months(current_date,-1),'yyyy-MM-01')
and date_format(order_date,'yyyy-MM-dd') <= date_format(current_date,'yyyy-MM-dd');

需要检索截至日期的过去 1 个月的数据。

【问题讨论】:

  • order_date 中最初存储的内容是什么?请提供一些例子
  • select * from table1 where order_date between add_months(order_date,-1) 和 sysdate;如果 order_date 不是日期,您需要使用 to_date(order_date,'yyyy-MM-dd')
  • @praveena mohan 您能否确认您的问题是否已解决?
  • Null 发生是因为日期列被定义为字符串,因此下面的查询有帮助。 select * from tables where date_format(regexp_replace(order_date,'_','-'),'yyyy-MM-dd') 在 date_format(add_months(current_date,-6),'yyyy-MM-01') 和 current_date 之间;谢谢大家的回复!
  • @praveenamohan 请批准答案!并点赞!

标签: java plsql hive bigdata


【解决方案1】:

我认为,您可以使用“BETWEEN”。因为你在两个日期之间工作,可能不仅仅是表演

SELECT *
  FROM your_table
  WHERE your_date_column BETWEEN '2018-09-01' AND '2019-06-01';

【讨论】:

    【解决方案2】:

    除了上一个答案,以下是您绝对应该尝试的代码

    hive 中的DATE_SUB 函数允许您用整数减去日期,因此在我们的例子中,30 表示一个月**

    要将字符串转换为日期,您可以使用TO_DATE()DATE() 函数。

    ** 一个月的定义因您的用例而异。在这种情况下,我们将 30 天的间隔视为一个月。如果您的用例需要将日历月视为一个月,请改用 add_months 函数

             SELECT columns 
                from TABLE_NAME 
                WHERE YOUR_DATE_COLUMN_NAME 
                      BETWEEN DATE(CURRENT_DATE) AND DATE_SUB(CURRENT_DATE, 30)
    

    【讨论】:

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