hive 中报错 ERROR 10248unsupported subquery expressions currently subquery expressions are only allowed as where and having clause predicates
时间: 2024-05-25 11:12:21 浏览: 555
这个错误是因为在Hive中子查询只能用在WHERE和HAVING子句中,不能用在其他地方,比如SELECT列表中或JOIN条件中等。
如果你在SELECT列表中使用了子查询,可以将其转换为JOIN或者使用LATERAL VIEW语法。
如果你在JOIN条件中使用了子查询,可以将其转换为JOIN或者使用LATERAL VIEW语法。
如果你在其他地方使用了子查询,可以考虑使用临时表或者将查询拆分成多个步骤来避免使用子查询。
相关问题
报 unsupported subquery expression currently subquery expressions are only allowed as where and having clause predicates的错
抱歉,我之前的回答还有问题。在 Hive 中,子查询只能在 `WHERE` 和 `HAVING` 子句中使用,不能在 `SELECT` 子句中直接使用。因此,需要将子查询中的逻辑改写成一个独立的查询语句,并将其结果与主查询语句中的表进行连接。
下面是修改后的 Hive SQL:
```
SELECT CASE
WHEN subquery.sum IS NULL OR subquery.sum = 0 THEN SUBSTR(JNL.FIELD522, 1, 2)
END
FROM FCM_ABR_F_TBFTJNL_S JNL
LEFT JOIN (
SELECT SUM(INSTR(concat_ws('\n', FIELD522, FIELD523, FIELD524, FIELD525), UPPER(NATIONALITY))) sum
FROM PARA_NATIONALITY
) subquery ON 1 = 1;
```
在这个查询语句中,首先将 `FCM_ABR_F_TBFTJNL_S` 表与子查询的结果进行连接,连接条件为 `1 = 1`,这样就能保证子查询的结果与主查询的每一行都进行了连接。然后,在 `SELECT` 子句中使用 `CASE` 函数根据子查询的结果返回相应的值。注意,在这里使用了 `LEFT JOIN`,这样可以保证即使子查询的结果为空,也能够返回主查询中所有的行。
阅读全文