首页 > 其他分享 >阿里DataWorks注册UDTF函数

阿里DataWorks注册UDTF函数

时间:2024-11-08 11:02:18浏览次数:1  
标签:replaceAll String get pointObj UDTF DataWorks 阿里 getAsString string

1.背景

    最近有个需求需要解析mongodb里面的json数据,采用的开发平台是dataworks,原始json内容如下:

{
  "id": 0,// 方案ID
  "premiseDetails": [
    {
      "premiseId": 0,// 楼盘ID
      "price": 0, // 价格      
      "pointDetails": [
        {
          "code": "",// 点位编码
          "network": 0, // 联网状态:
          "unitId": 0, // 单元ID
          "unitState": true, //单元状态,梯内没有该字段
          "success": false, // 是否选中
          "time": "", // 变更时间
          "info": "" // 踢点原因
        }
      ]
    }
  ]
}

  

2.实施

(1)数据同步到mc,我用一个id和premise_details来接收mongodb的数据。

@Resolve("string->string,string,string,string,string,string,string,string")
public class get_mongodb_json_udtf extends UDTF {
    @Override
    public void process(Object[] objects) throws UDFException {
        String input = (String) objects[0];
        input = input.replaceAll("=", "\":\"")
                .replaceAll("Document", "")
                .replaceAll("\\{\\{", "{\"")
                .replaceAll("\\}\\}", "\"}")
                .replaceAll("]\"},", "]}#")
                .replaceAll("\\},\\{", "}#{")
                .replaceAll("\\},", "}@")
                .replaceAll(",", "\",\"")
                .replaceAll("#", ",")
                .replaceAll("@", ",")
                .replaceAll("pointDetails\":\"", "pointDetails\":")
                .replaceAll("}]\"}]", "}]}]")
                .replaceAll(" ", "")
        ;

        JsonParser parser = new JsonParser();

        // 解析JSON数组字符串
        JsonArray jsonArray = parser.parse(input).getAsJsonArray();

        if(jsonArray!=null) {
            // 遍历JsonArray
            for (JsonElement element : jsonArray) {
                JsonObject obj = element.getAsJsonObject();
                String premiseId = obj.get("premiseId").getAsString();
                String price = "";
                if (obj.has("price") && !obj.get("price").isJsonNull()) {
                    price = obj.get("price").getAsString();
                }

                JsonArray pointDetails = obj.get("pointDetails").getAsJsonArray();
                for (JsonElement point : pointDetails) {
                    JsonObject pointObj = point.getAsJsonObject();
                    String pointNum = "";
                    String unitId = "";
                    String network = "";
                    String success = "";
                    String time = "";
                    String info = "";
                    if (pointObj.has("code") && !pointObj.get("code").isJsonNull()) {
                        pointNum = pointObj.get("code").getAsString();
                    }

                    if (pointObj.has("unitId") && !pointObj.get("unitId").isJsonNull()) {
                        unitId = pointObj.get("unitId").getAsString();
                    }


                    if (pointObj.has("network") && !pointObj.get("network").isJsonNull()) {
                        network = pointObj.get("network").getAsString();
                    }

                    if (pointObj.has("success") && !pointObj.get("success").isJsonNull()) {
                        success = pointObj.get("success").getAsString();
                    }


                    if (pointObj.has("time") && !pointObj.get("time").isJsonNull()) {
                        time = pointObj.get("time").getAsString();
                    }
                    if (pointObj.has("info") && !pointObj.get("info").isJsonNull()) {
                        info = pointObj.get("info").getAsString();
                    }
                    forward(premiseId, price, pointNum, unitId,
                            network, success, time, info);
                }
            }
        }

    }
}

 

 更多技术知识关注公众号《码农独白》

 

标签:replaceAll,String,get,pointObj,UDTF,DataWorks,阿里,getAsString,string
From: https://www.cnblogs.com/beststrive/p/18534665

相关文章

  • 【笔记】谈谈阿里云和华为云在云原生微服务领域产品的不同之处
    背景        24年初学习了阿里云云原生微服务的课程和认证,年尾学习了华为云类似课程,想借此温故一下所学知识,结合课程内容总结谈谈对这两朵云的云原生微服务产品不同。        学习是一种愉悦,一种收获,让我们在探索中感受快乐。欢迎关注、点赞和收藏~一、谈......
  • 使用阿里云搭建DataLight平台
    DataLight官网:http://datalight.boundivore.cn/目录一、购买阿里云抢占式资源服务器二、修改一下配置1、修改实例名称2、远程连接3、修改主机名4、修改hosts映射文件5、修改安全组6、免密登录(不需要做,脚本自己会操作)三、购买mysql数据库四、初始化mysq......
  • 自建rabbitmq迁移到阿里云
    环境:自建rabbitmq管理页http://47.98.15x.xx:15672/数据:47.98.15x.xx:5672 云rabbitmq实例数据:47.110.xx.xx:5672 迁移步骤:一、迁移元数据1、下载的元数据文件保存至本地在Overview页签下方,单击Exportdefinitions,从Virtualhost列表选择All或者指定的Vhost名称,然后......
  • Centos yum 源更换为阿里云yum源,解决centos yum源不能用
    进入对应目录#cd/etc/yum.repos.d备份原来yum源#mkdirbak&&mvCe*bak/复制yum源文件#cp-rbak/CentOS-Base.repo./编辑yum源文件#vimCentOS-Base.repo删除原有内容,替换配置内容如下:[base]name=CentOS-$releasever-Base-mirrors.aliyun.combaseurl......
  • 在阿里云快速启动Umami玩转网页分析
    本文介绍了Umami的基本信息,并通过阿里云计算巢完成了Umami的快速部署,使用者不需要自己下载代码,不需要自己安装复杂的依赖,不需要了解底层技术,只需要在控制台图形界面点击几下鼠标就可以快速部署并启动Umami,非技术同学也能轻松搞定。什么是UmamiUmami是一个开源的、注重隐私的网......
  • 面了个阿里出来的大佬,见识到了基础的天花板
    ......
  • 阿里云手机验证码
    阿里云手机验证码在Java中使用阿里云的短信服务发送手机号验证码,你需要使用阿里云提供的SMSSDK。添加依赖<dependency><groupId>com.aliyun.dysmsapi</groupId><artifactId>dysmsapi</artifactId><version>1.0.0</version></dependency>......
  • 阿里云cdn缓存过期时间,会导致服务器流量消耗,尤其是大文件
    您成功添加域名后,可以修改缓存时间。设置的缓存时间长短会导致回源流量不一样,费用也有所不同,建议根据不同的业务需求设置缓存时长。缓存过期时间会影响回源频率,建议根据实际业务需求设置资源缓存时长。缓存过期时间过短,会导致CDN频繁回源,增加源站的流量消耗;缓存过期时间过长,会......
  • 阿里云双11活动火热来袭:服务器仅需79元/年
    2024年阿里云双十一盛宴震撼启幕,云服务器特惠来袭,仅需79元/年起,多种CPU与内存配置任君选择。更有.com域名注册优惠,低至1元起!此外,个人及企业用户均可免费领取高达2088元的总面值双十一代金券补贴,共12张代金券等你来领。企业用户专享福利,更可申请高达5亿算力的补贴。超过140款云产品......
  • centos6停止服务后yum改用阿里云
    环境:OS:Centos6.9 1.进入到yum配置目录cd/etc/yum.repos.d 2.备份cpCentOS-Base.repoCentOS-Base.repo.bk 3.下载wget-OCentOS-Base.repohttps://mirrors.aliyun.com/repo/Centos-6.repo 问题1:因为Centos-6早就停止了更新维护,阿里云镜像网站将其仓库也换......