hive查找json的键值是否存在的udf

本文介绍如何在Hive中使用自定义UDF(User Defined Function)检查JSON字段是否存在特定键值。通过加载自定义jar包并创建临时函数,可以查询表中jsoncolumn字段是否包含jsonkey。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hive查找键值是否存在的udf,直接上代码。

package com.xixishuiba.udf;

import java.util.Iterator;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.json.JSONException;
import org.json.JSONObject;

public class FindJsonkey
        extends UDF
{
    public String evaluate(String column,String keyword) {
        if (null == column || column == "{}") {
            return "0";
        }
        if(null == keyword) {return "0";}
        String ret = "0";
        String tmp = column.replace("\"{", "{").replace("}\"", "}").replace("\\\"", "\"");
        try {
            JSONObject object = new JSONObject(tmp);
            Iterator<String> itr = object.keys();
            while (itr.hasNext()) {
                String key = itr.next();
                if(key.equals(keyword)){
                    ret = "1";
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
            return "0";
        }
        return ret + "";
    }
    public static void main(String[] argv){
        String col = "{\"p\":17,\"t\":2,\"pvid\":\"1531963476379551374lpEbhy12vx3Z3\",\"id\":1940361}";
        String col2 = "{\"t\":2,\"id\":1940361,\"p\":17,\"pvid\":\"1531963476379551374lpEbhy12vx3Z3\"}";
        FindJsonkey fj = new FindJsonkey();
        //String split = parseJson.evaluate(str);

        String a2 = fj.evaluate(col2,"pvid");

        System.out.println(a2);
    }
}

使用函数:
add jar /data/home/dw/lisardon/new/UDF_STY/findjsonkey.jar;
create temporary function findjsonkey as ‘com.autohome.udf.FindJsonkey’;
查找表中的json字段是否有 jsonkey这个key。
select * from tmp_table findjsonkey(jsoncolumn,jsonkey) = 1 ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值