在我的配置单元查询中,我用第一种方法得到正确的输出,但是在第二种方法中得到异常。不知道我到底缺少什么,但这是次要的。
方法-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)
有什么建议吗?
使用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;