【问题标题】:Hive query using string function使用字符串函数的 Hive 查询
【发布时间】:2014-10-21 09:43:05
【问题描述】:

我需要根据字符串的长度来处理它。我已经尝试了以下方法,但遇到了异常。

需求是这样的。

我在列号中有一个字符串为 123456,结果应该是 12-34-56。如果是 1234,那么 12-34-00。如果只有 2 位数字,则为 12-00-00。

IF(LENGTH(numbers) = 2,concat(numbers,'-00-00') OR LENGTH(numbers) = 4,concat(SUBSTR(numbers,1,2),'-',SUBSTR(numbers,3,2),'-00') OR LENGTH(numbers) = 6,concat(SUBSTR(numbers,1,2),'-',SUBSTR(numbers,3,2),SUBSTR(msg.numbers,5,2))) as finalnumbers

例外是:

FAILED: ClassCastException org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableStringObjectInspector cannot be cast to org.apache.hadoop.hive.serde2.objectinspector.primitive.BooleanObjectInspector

有什么帮助吗?

【问题讨论】:

  • 您可以使用 rpad 函数将零填充到长度 6。这样可以避免使用条件逻辑。

标签: java hadoop hive


【解决方案1】:

这可以在 Hive 查询中使用 CASE 和 WHEN 来实现。本论坛给出的解释恰到好处conditional functions

CASE 
WHEN (LENGTH(numbers) = "6") THEN concat(substring(numbers,1,2),'-',substring(numbers,3,2),'-',substring(numbers,5,2)) 
WHEN (LENGTH(numbers) = "4") THEN concat(substring(numbers,1,2),'-',substring(numbers,3,2),'-00')
WHEN (LENGTH(numbers) = "2") THEN concat(numbers,'-00-00') as finalnumbers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-29
    • 2014-04-11
    • 1970-01-01
    • 2021-09-24
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多