如何解决如何更新Hive表行
我有一个看起来像这样的表:
case Constants.dataNodes.success: {
const newState = {
...state,list: [
...state.list,...action.payload.map((el) => ({
...el,fqdn: el.fqdn.toLowerCase()
}))
]
};
}
还有另一个看起来像这样的表:
id | Col2 | Col3 | Text
--------------------------
1 | ... | ... | "abc"
2 | ... | ... | "def
3 | ... | ... | "ghi"
4 | ... | ... | "jkl"
最后我要得到一个像这样的表:
id | Text
-------------
1 | "qwe"
2 | "rty"
保留col2和col3的原始值。本质上,我想使用表2中的值来更新ID相同的表1中的值。
我尝试过:
id | Col2 | Col3 | Text
--------------------------
1 | ... | ... | "qwe"
2 | ... | ... | "rty"
3 | ... | ... | "ghi"
4 | ... | ... | "jkl"
但这只是返回了原始表。有没有办法在Presto / Hive中实现我想要的?
解决方法
您正在从表A
加载文本,如果要更新表B中的值(如果不存在,则保留原样,则应从表B
或NVL(B.text,A.Text)
中加载文本)(参见代码中的注释)
INSERT OVERWRITE table1
SELECT
A.id,col1,col2,NVL(B.text,A.Text) as Text -- Take Text from table B,if not exists,leave as is (A.Text)
FROM table1 AS A
LEFT JOIN B ON A.product_id = B.product_id
您可以使用coalesce(B.text,A.Text)
代替NVL
,就像@PiotrFindeisen提到的那样,它在Presto和Hive上也可以正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。