【问题标题】:Convert date to Decimal Format in hive在 hive 中将日期转换为十进制格式
【发布时间】:2015-02-28 17:00:24
【问题描述】:

我是 hive 的新手,我尝试转换标准“YYYY-MM-DD”格式的日期,但我希望以 YYYYMMDD 格式输出。

例如:“2014-12-25”应该返回 20141225。

我正在尝试类似于下面给出的东西:

CONCAT(年(start_date),month(start_date),day(start_date))

但这会引发错误,因为 ParseException 行 2:0 无法识别年份 '(' 附近的输入。

任何人都可以提出一些替代方案吗?

【问题讨论】:

  • “但这会引发一些错误”信息不足。 什么错误? (当你去看医生时,你不只是说“我有问题”——你描述了症状。这里也是如此。)
  • 对,所以把它放在你的 question 中,最好有一段更完整的代码,让其他人重现问题。

标签: date hive


【解决方案1】:

CONCAT 似乎有一些我无法完全诊断的奇怪行为,但您可以使用正则表达式作为替代方案。我用您在问题中给出的示例日期加载了一个名为 test 的测试表:

hive> describe test;
OK
start_date              date                                        
Time taken: 0.719 seconds, Fetched: 1 row(s)
hive> select * from test;
OK
2014-12-25
Time taken: 0.206 seconds, Fetched: 1 row(s)

两种可能的方法(对于以下选项,我正在使用 Hive 0.14 在 HDP 2.2 上进行测试):

如果您对数据的格式化方式有信心,请使用regexp_replace

hive> select regexp_replace(start_date, '-', '') from test;
OK
20141225
Time taken: 0.289 seconds, Fetched: 1 row(s)

或者,如果您的数据格式更加动态,或者您预计它以后可能会发生变化,那么使用regexp_extract 可能会为您提供更大的灵活性,以防发生变化。该脚本似乎产生了您正在寻找的结果:

SET REGEX="(\\d{4})-(\\d{2})-(\\d{2})";
SELECT
  CONCAT(
    regexp_extract(start_date, ${hiveconf:REGEX}, 1),
    regexp_extract(start_date, ${hiveconf:REGEX}, 2),
    regexp_extract(start_date, ${hiveconf:REGEX}, 3)
  )
FROM test;

当我尝试将 CONCATYEAR/MONTH/DAY 提取函数一起使用时,我遇到了非常奇怪的行为 - 我同意这些应该按照您尝试使用它们的方式工作,但希望 regexp_replaceregexp_extract 能给你一个可行的解决方法。

【讨论】:

    【解决方案2】:

    CONCACT 没有任何问题。一个简单的谷歌搜索显示该特定函数采用STRING,而函数daymonthyear 返回INTs。 做就行了

    CONCAT(split(start_date, '\\-')[0]
         , split(start_date, '\\-')[1]
         , split(start_date, '\\-')[2])
    

    【讨论】:

    • 即使我将yearmonthday 的结果显式转换为字符串-concat(cast(year(start_date) as string), cast(...,我使用CONCAT 观察到的怪异现象仍然存在是第一个参数的三个副本(因此示例数据中的“201420142014”)。您是否了解我或 OP 可能正在做什么导致这种情况?
    【解决方案3】:

    更新:这已确认是 Hive 0.14 和新缓存内容的错误。这将通过 0.14.1 和 0.15 解决,但暂时可以通过关闭缓存来解决:

    设置 hive.cache.expr.evaluation=false;

    下面的旧消息

    我遇到了同样的问题,并在 Hive 的 jira 上开了一张票。

    我在 0.14 和 0.13 上测试了 concat+date 函数,它似乎只是 0.14 中引入的问题。

    https://issues.apache.org/jira/browse/HIVE-9459

    【讨论】:

      猜你喜欢
      • 2018-05-17
      • 1970-01-01
      • 2021-06-15
      • 2018-03-10
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 2018-08-10
      相关资源
      最近更新 更多