update dw_rpt_report60010105049 dw set dw.tran_country =(select max(b.char3)from orsuser_kara.para_nationality b where b.char2 = dw.tran_country)where exists(select 1from orsuser_kara.para_nationality p where p.char2=dw.tran_country) 改写成hive 写法,并且不能使用子查询作字段的写法
时间: 2024-02-18 21:01:24 浏览: 76
可以使用 JOIN 实现类似的功能,以下是可能的写法:
```
INSERT OVERWRITE TABLE dw_rpt_report60010105049
SELECT
COALESCE(n.char3, dw.tran_country) AS tran_country,
dw.col2,
dw.col3,
...
FROM dw_rpt_report60010105049 dw
LEFT JOIN (
SELECT char2, MAX(char3) AS char3
FROM orsuser_kara.para_nationality
GROUP BY char2
) n ON dw.tran_country = n.char2
WHERE n.char2 IS NOT NULL
```
这里使用了 LEFT JOIN,将原表和 `orsuser_kara.para_nationality` 表进行 JOIN 操作。在 JOIN 操作中,使用 `COALESCE` 函数将 `orsuser_kara.para_nationality` 表中的 `char3` 字段和原表中的 `tran_country` 字段合并成一个字段。如果 `orsuser_kara.para_nationality` 表中不存在与原表中的 `tran_country` 字段匹配的值,则 `COALESCE` 函数会返回原表中的 `tran_country` 字段。在 JOIN 操作的子查询中,使用 GROUP BY 子句对 `char2` 字段进行分组,并使用 MAX 函数计算每个分组中的最大值。最后使用 WHERE 子句过滤掉没有匹配的记录。
阅读全文