【问题标题】:Hive dates: date 'yyyy-MM-dd' vs. 'yyyy-MM-dd' What is the difference?Hive dates: date 'yyyy-MM-dd' vs. 'yyyy-MM-dd' 有什么区别?
【发布时间】:2020-12-14 13:33:24
【问题描述】:

将 hive 日期称为 date '2020-08-25' 与仅使用 '2020-08-25' 而不使用 date 有什么区别?是两种不同的数据类型吗?还是这些完全相同。我可能会将其放入如下的 where 语句中:

where somedate<=date'2020-08-25'

对比

where somedate<='2020-08-25'

【问题讨论】:

    标签: sql date hive hiveql where-clause


    【解决方案1】:

    date'2020-08-25'标准日期文字:它生成date 数据类型的合法值。

    另一方面,'2020-08-25' 是一个文字字符串(表示日期,但也可以是其他任何东西)。

    现在,where 子句中谓词的最佳选择是什么?这取决于您要比较的列的数据类型。

    如果您有 date 列,那么我建议您使用文字日期。否则,您将依赖数据库理解您的意思的能力,并将字符串隐式转换为日期。每个数据库都有自己的一套规则来处理这种情况:在最坏的情况下,它可能做出错误的决定并决定进行字符串比较,这需要将所有存储的值转换为字符串(这取决于根据数据库规范) - 这会降低查询的性能。

    如果您碰巧将日期存储为字符串(这通常表明设计不佳),那么字符串比较就可以了。

    【讨论】:

      【解决方案2】:

      date '2020-08-25' 是 DATE 类型的文字。

      '2020-08-25' - 是一个字符串字面量。

      字符串和日期可以隐式转换,因此您的两个 where 子句在功能上是相同的。根据列数据类型,可能会发生隐式转换。最好使用相同的类型,避免隐式转换。

      DATE 也可以以二进制格式打包成 4 字节整数。见HIVE-3910

      【讨论】:

        猜你喜欢
        • 2014-04-30
        • 2019-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-05
        • 2020-02-24
        相关资源
        最近更新 更多