在Hive中名为客户表的详细信息的列中,我有以下json格式的数据:
{
"customer" : {
"given_name" : "Anuvrat",
"surname" : "Singh"
},
"order" : {
"id" : "123dfe523gd"
},
"address" : {
"city" : "kolkata",
"pin" : "700091"
},
"phone" : {
"mobile" : "*********"
}
}
我必须从json数据中删除地址和电话,并且数据应类似于:
{
"customer" : {
"given_name" : "Anuvrat",
"surname" : "Singh"
},
"order" : {
"id" : "123dfe523gd"
}
}
如何对表中存在的每一行执行(即更新)?
我尝试了以下命令hadoop fs -cat /home/customer/* | jq '.details[] |= del(.address,.phone)'
,但我却获得了预期的输出,而不是出现错误提示
parse error: Invalid numeric literal at line 1, column 93
cat: Unable to write to output stream.
答案 0 :(得分:0)
如果您愿意使用不使用Hive的解决方案,我想说明一下,jq
command line JSON parser可以很容易做到这一点。
鉴于您的输入文件,您将执行以下操作:
jq 'del(.address,.phone)' file
如果要删除表中所有条目的address
和phone
对象,可以执行以下操作:
jq '.[] |= del(.address,.phone)' file
答案 1 :(得分:0)
这是我为了得到上述结果而运行的查询:
INSERT OVERWRITE TABLE customer Select id,CASE WHEN id is not null THEN concat('{"customer":',get_json_object(details,'$.customer'),',"order":',get_json_object(details,'$.order'),'"}') ELSE details END AS details FROM customer;