FAILED:ClassCastException原语。WritableConstantStringObjectInspector无法转换为原语。BooleanObjectInspector

问题描述 投票:0回答:1

在我的配置单元查询中,我用第一种方法得到正确的输出,但是在第二种方法中得到异常。不知道我到底缺少什么,但这是次要的。

方法-1

SELECT  FLAG
        CASE WHEN flag = 'A' THEN 'Active'
            WHEN flag = 'B' THEN 'Inactive'
            WHEN flag = 'C' THEN 'Inactive'
            WHEN flag = 'D' THEN 'Inactive'
            WHEN flag = 'E' THEN 'Inactive'
            WHEN flag = 'F' THEN 'Inactive'
            WHEN flag = 'G' THEN 'Inactive'
            WHEN flag = 'H' THEN 'Inactive'
            WHEN flag = 'I' THEN 'Inactive'
            WHEN flag = 'J' THEN 'Inactive'
            WHEN flag = 'K' THEN 'Inactive'
            WHEN flag = 'L' THEN 'Inactive'
       ELSE ''
       END AS FINAL_FLAG,
       NAME,
       PHONE_NUMBER
  FROM TEST_WORKER_TABLE;

+-------+--------------+------------+---------------+
| FLAG  | FINAL_FLAG   | NAME       | PHONE_NUMBER  |
+-------+--------------+------------+---------------+
| A     | Active       | MARK K     | 123-456-7890  |
| B     | Inactive     | Raj V      | 123-456-7890  |
| C     | Inactive     | Nick B     | 123-456-7890  |
| L     | Inactive     | Elainee L  | 123-456-7890  |
| K     | Inactive     | Kim K      | 123-456-7890  |
+-------+--------------+------------+---------------+

方法-2

SELECT FLAG
       CASE WHEN flag = 'A' THEN 'Active'
            WHEN flag = 'B' OR 'C' OR 'D' OR 'E' OR 'F' OR 'G' OR 'H' OR 'I' OR 'J' OR 'K' OR 'L' THEN 'Inactive'
       ELSE ''
       END AS FINAL_FLAG,
       NAME,
       PHONE_NUMBER
  FROM TEST_WORKER_TABLE;

Error: Error while compiling statement: FAILED: ClassCastException org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableConstantStringObjectInspector cannot be cast to org.apache.hadoop.hive.serde2.objectinspector.primitive.BooleanObjectInspector (state=42000,code=40000)

有什么建议吗?

hiveql
1个回答
0
投票

使用IN子句代替OR子句。

SELECT FLAG
       CASE WHEN flag = 'A' THEN 'Active'
            WHEN flag IN ('B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L') THEN 'Inactive'
       ELSE ''
       END AS FINAL_FLAG,
       NAME,
       PHONE_NUMBER
  FROM TEST_WORKER_TABLE;
© www.soinside.com 2019 - 2024. All rights reserved.