1.简介

读取mysql中数据(QueryDatabaseTable)

2.操作

2.1 创建组

MysqlToVoltDB
组的主要作用:把处理器进行分组,目标是从mysql数据库里面读取数据然后再放到voltdb数据中,来进行的一个模拟的操作动作,所以我的组名就叫MysqlToVoltDB

2.1 创建数据库查询处理器

2.1.1 创建并配置一个连接池
Database Connection URL:jdbc:mysql://127.0.0.1:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
Database Driver Class Name:com.mysql.cj.jdbc.Driver
Database Driver Location(s):/cc/soft/nifi-1.25.0/jars/mysql-connector-java-5.1.49.jar
Database User:root
Password:123456

然后启用我们的启动连接池

如果我们发现出现了如下错误:

我们设置驱动为驱动为8:/cc/soft/nifi-1.25.0/jars/mysql-connector-java-8.0.29.jar

2.1.2 配置处理器

上面的连接池已经配置好了,只是说可以正常的连接数据库了,我们需要配置这个处理器,让可以从数据库里面提取数据。

QueryDatabaseTable:
修改名称(setting->name):get_data_from_mysql
修改属性:
配置RunSchedule时间:这个时间就是这个处理器多长时间进行一次操作数据库,默认是0,如果是0的话,可以说是不停的查询数据库,这样对服务器的负担太大了,所以在这里我们把它改成1min。
数据库类型(Database Type):MySQL
表名(Table Name):cs_car_info
填写查询语句(Custom Query):

SELECT buid,comp_id,dept_id,maintain_dept_id,employee_id,maintain_employee_id,license_no,car_vin,client_mobile,engine_no,create_time,is_maintain,is_deleted,status from cs_car_info order by buid desc limit 1000;

发现报错信息:这个是因为处理器没有上下游的原因,我们需要给他创建一个下游;由于我们从数据库里面提取出来的数据是avro格式,所以我们需要转化为json格式来方便我们的阅读.

2.2 创建ConvertAvroToJson处理器

创建处理器:ConvertAvroToJson
然后连接两个处理器

然后我们启动第一个处理器:

然后我们从queue

为什么要转化成json格式,主要是因为处理器从数据库里面提取出来的数据都是avro格式的,不是非常的友好,再者就是好多的处理器都是通过json格式的数据转换的,所以说通过转化成json,更加方便我们后期的数据转化和存储

2.2.1 更改 ConvertAvroToJson处理器的属性配置

2.3 创建SplitJson

  注意这里转化成json的话,是一整个没有分段的,不是一行一行的,所以下面我们需要一个处理器,将他的json来进行分段,一行一行的进行展示给我们看,如果我需要向数据里面插入数据,不能把这一大段给数据库,需要一行一行的拼成sql语句,而后执行插入到数据库中.

2.3.1 连接上 ConvertAvroToJson处理器

选择上游成功后推送。

如果上游动作没有成功的话怎么办呢,如果失败了让他自连接去,也就是再推给上游

2.3.2 测试效果.


查看里面的数据:

可以看到我们的数据已经完美的转化成json格式了。

2.3.3 配置 SplitJson

从数据库里面提取出来的数据转化成了json格式,但是json不是一行一行展示的,这篇我们就要将他们进行一行一行的显示,如果一行一行显示的话,我们是不是就可以一行一行的插入到数据库了。

2.4 创建EvaluateJsonPath处理器

这个处理器的作用就是将接收到的数据可以经过取值的方法,巧妙的变成一个sql语句,那怎么生成取值,就需要EvaluateJsonPath 处理器,把值进行定义一下。
配置处理器
定义各个值:

buid:$.buid
comp_id:$.comp_id
dept_id:$.dept_id
maintain_dept_id:$.maintain_dept_id
employee_id:$.employee_id
maintain_employee_id:$.maintain_employee_id
license_no:$.license_no
car_vin:$.car_vin
client_mobile:$.client_mobile
engine_no:$.engine_no
create_time:$.create_time
is_maintain:$.is_maintain
is_deleted:$.is_deleted
status:$.status

2.5 创建ReplaceText处理器

下游处理器在接收到这组数据的时候,取id的值就是数据中$id的值,其他的类推,然后再加上inster字符传的拼接,是不是可以组成一个完整的sql语句.创建处理器之后连接,match的数据流装到
ReplaceText,不match的数据进入自连接终止。

如果出现以上错误,指示JsonPath的计算结果是写入FlowFile内容还是写入FlowFile属性;如果使用attribute,必须指定attribute Name属性。如果设置为flowfile-content,则只能指定一个JsonPath,并且忽略属性名。所以我们还需要重新配置下处理器属性。

启动测试后,查看效果后,我们可以看到在FlowFile中的属性已经具备这个值了。

准备我们需要的sql插入语句,应为我们后期还要对数据库进行写入,我们就的需要一个数据库的插入语句,每个人与每个表的字段都不一样,如果大家要用的话,还是建议大家先在数据库试下能不能正常的插入数据。

 INSERT INTO cs_car_info_test (buid, comp_id, dept_id, maintain_dept_id, employee_id, maintain_employee_id, license_no, car_vin, client_mobile, engine_no, is_maintain, is_deleted, status)
 VALUES (${buid}, '${comp_id}', '${dept_id}', '${maintain_dept_id}', '${employee_id}', '${maintain_employee_id}', '${license_no}', '${car_vin}', '${client_mobile}', '${engine_no}', ${is_maintain}, ${is_deleted}, ${status})

2.5 数据写入到voltdb

Apache NiFi目前确实没有直接针对VoltDB的处理器组件,但这并不意味着不能实现从NiFi向VoltDB写入数据。NiFi的强大之处在于它的灵活性和可扩展性,你可以通过以下几种方式实现数据写入VoltDB的目的:

2.5.1 在voltdb里面创建表
CREATE TABLE cs_car_info_test (
   buid BIGINT,
   comp_id varchar(255),
   dept_id varchar(100),
   maintain_dept_id varchar(100),
   employee_id varchar(255),
   maintain_employee_id varchar(255),
   license_no varchar(255),
   car_vin varchar(255),
   client_mobile varchar(255),
   engine_no varchar(255),
   create_time TIMESTAMP,
   is_maintain TINYINT,
   is_deleted TINYINT,
   status TINYINT,
  PRIMARY KEY (buid)
);

进入我们的sqlcmd终端,然后创建对应的表(对应端口设置为8012)。

sqlcmd --port=8012

首先,确保你的NiFi环境中安装了必要的JAR依赖,比如VoltDB的Java客户端库。这可能需要将VoltDB的客户端jar包放入NiFi的/lib目录下。在NiFi中创建一个新的ExecuteScript处理器,选择合适的脚本引擎(例如,如果你使用Java,就选择Jython或直接用Java);但是此时我们使用PutSQL实现。
PutSQL:通过Flowfile中的内容对数据库进行更新(flowfile包含的是一些数据库DDM语句)

2.5.2 创建PutSQL

新建连接池以及配置:

Database Connection URL:jdbc:voltdb://127.0.0.1:8012
Database Driver Class Name:org.voltdb.jdbc.Driver
Database Driver Location(s):/cc/soft/nifi-1.25.0/jars/voltdbclient-13.0.0.jar
Database User:
Password:

3.拓展

apache nifi QueryDatabaseTable查询表cs_car_info记录下最大的buid 然后下次根据此buid继续查询大于此值的数据
比如:

SELECT buid,comp_id,dept_id,maintain_dept_id,employee_id,maintain_employee_id,license_no,car_vin,client_mobile,engine_no,create_time,is_maintain,is_deleted,status from cs_car_info where buid> ${buid} order by buid asc limit 1000;

startshineye
91 声望26 粉丝

我在规定的时间内,做到了我计划的事情;我自己也变得自信了,对于外界的人跟困难也更加从容了,我已经很强大了。可是如果我在规定时间内,我只有3分钟热度,哎,我不行,我就放弃了,那么这个就是我自己的问题,因为你自己...