Nifi从入门到精通(一)之 数据存储

本文介绍了如何使用Nifi的HandleHttpRequest组件接收上游数据,并通过Groovy脚本处理及存储到数据库。讨论了数据库表设计,如在主表中添加fid和dr字段,以及子表结构。此外,还提到了通过Postman调用Nifi接口进行数据的新增、删除和修改操作。
摘要由CSDN通过智能技术生成

引言:1.上游如何通过接口如何传数据到nifi并存储数据到数据库?

           2.数据库中的表应该如何设计?

目录

1.常见组件的使用

HandleHttpRequest

2.数据库中表的设计

    ​编辑

3.groovy脚本接收和存储数据

4.nifi接口连接和数据存储整体结构


1.常见组件的使用

  1. HandleHttpRequest

  •    用于上游数据传输到nifi设置接口功能组件,启动一个http的端口。
  • allowed paths :.*/(qq|hh)

  •      

2.StandardHttpContextMap

  • StandardHttpContextMap 用于设置HTTP的请求和响应
  •  

3.RouteOnAttribute

  •  该处理器使用属性表达式语言,根据流文件的属性去计算然后进行路由。
  • 简单来话是对HandleHttpRequest路由进行分发

  • oa_zjxbxz ${http.request.uri:equals("/oa_zjxbxz")}

  • 通过不同的路由进入到不同的处理组中对应的处理组件

  •  

    4.ExecuteGroovyScript  

  • 负责写类java脚本groovy对数据进行接收转换并存储到中台。

  •  

    2.数据库中表的设计

  • 主表oa_zjxbxz表多加fid和dr字段,fid自增,dr用来存储最新数据状态(dr=0代表最新状态,dr=1代表旧数据),一般不涉及到删除数据,要保留痕迹!

  •     

  • 子表oa_zjxbxz_h表保存主表的主键并且也多加一个自增字段sid和状态字段dr(同上)

  • 3.groovy脚本接收和存储数据

  1. 新增数据接口
//资金下拨新增
import com.fasterxml.jackson.databind.ObjectMapper
import groovy.json.JsonSlurper

//数据转化为json格式
import groovy.sql.Sql
import com.yonyou.util.NiFiUtil

import java.util.ArrayList;
import java.util.List;


//判断流数据是否流入
def flowfile = session.get();
if (!flowfile) return;


//jsonObject变量用来获取流数据
def jsonObject = null;
//连接中台数据库
ObjectMapper mapper = new ObjectMapper();
def response = [:];
def conn = CTL.mydb.getConnection();
if (!conn) return;
Sql sql = new Sql(conn);
if (!sql) return;



//连接nc数据库
def conn1 = CTL.ncdb.getConnection();
if (!conn1) return;
Sql sql1 = new Sql(conn1);
if (!sql1) return;



//如果上面都没有问题返回数据库状态
response.put("success", "true");
response.put("code", "1000000000");



int success = 0;//成功存入数据库个数

int fail = 0;//报错个数

NiFiUtil nftUtil = new NiFiUtil();

//把键值对类型的resert包裹在数组里
def restlist = [];



try {
    // 将字符串进行 json 反序列化操作 , 得到 map 集合{"age":18,"name":"Tom"}   [age:18, name:Tom]
    jsonObject = new groovy.json.JsonSlurper().parseText(flowfile.read().getText("UTF-8"));

    for (int i = 0; i < 1; i++) {
        log.info("=======报销单新增=========");
        //resert用来保存错误数据      map
        def resert = [:];
        //获取流过来的json字段数据
        String oaid = jsonObject.oaid?.toString() == null ? "" : jsonObject.oaid?.toString();
        //对每一个字段进行判断
        if ("".equals(oaid)) {
            resert.put("index", i);
            resert.put("errormessage","oaid不能为空");
            restlist.add(resert);
            fail++;

            response.put("code","1000000002");
            continue;

        }

        String ymonth = jsonObject.ymonth?.toString() == null ? "" : jsonObject.ymonth?.toString();
        //对每一个字段进行判断
        if ("".equals(ymonth)) {
            resert.put("index", i);
            resert.put("errormessage", "ymonth不能为空");
            restlist.add(resert);
            fail++;

            response.put("code","1000000002");
            continue;

        }
        String finance = jsonObject.finance?.toString() == null ? "" : jsonObject.finance?.toString();
        String transactiontype = jsonObject.transactiontype?.toString() == null ? "" : jsonObject.transactiontype?.toString();
        double homemoney = jsonObject.homemoney == null ? 0.00 : jsonObject.homemoney;
        double totalmoney=jsonObject.totalmoney==null? 0.00 :jsonObject.totalmoney;
        double actualmoney=jsonObject.actualmoney==null? 0.00:jsonObject.actualmoney;
        double paymoney=jsonObject.paymoney==null? 0.00 :jsonObject.paymoney;
        double repaymentmoney=jsonObject.repaymentmoney==null? 0.00 :jsonObject.repaymentmoney;
        double borrowermoney=jsonObject.borrowermoney==null? 0.00 :jsonObject.borrowermoney;
        String payingunit=jsonObject.payingunit?.toString()==null? "" :jsonObject.payingunit?.toString();
        String corporatebank = jsonObject.corporatebank?.toString() == null ? "" : jsonObject.corporatebank?.toString();
        String paymenttype = jsonObject.paymenttype?.toString() == null ? "" : jsonObject.paymenttype?.toString();
        String expenseunit = jsonObject.expenseunit
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值