首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >失败:无法将primitive.WritableConstantStringObjectInspector转换为primitive.BooleanObjectInspector

失败:无法将primitive.WritableConstantStringObjectInspector转换为primitive.BooleanObjectInspector
EN

Stack Overflow用户
提问于 2019-11-26 20:17:38
回答 1查看 1.3K关注 0票数 0

在我的单元查询中,我使用第一种方法获得了正确的输出,但是第二种语法失败了,不确定我到底遗漏了什么,但它肯定是一些次要的东西。

方法- 1

代码语言:javascript
复制
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

代码语言:javascript
复制
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)

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-26 21:09:39

使用IN子句而不是OR子句。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59058758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档