开发者学堂课程【NiFi 知识精讲与项目实战(第三阶段):Json 内容转换为 Hive 所支持的文本格式2】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/707/detail/12548
Json 内容转换为 Hive 所支持的文本格式2
内容介绍
一、课堂说明
二、实际操作演示
一、课堂说明
本节课进行实际的操作,将 Json 数据变更为 Hive 外表所支持的这样一个文本结构。在之前的案例中,已经把 Json的每一个单独的 Json 数据写入到的 Hive 上。但是这个格式它并不满足 Hive 的这个文本格式要求。接下来通过操作让它变更成 Hive 所支持的这个文本。
二、实际操作演示
首先第一步要把它切割以后的 Json 数据先提到 flowfile 的 Spilit 的当中,因为可以在后续变更的过程中,可以灵活的使用这个 Json 当中的属性值,能够灵活使用这些属性值,才可以更好的写入到 HDFS 中
添加一个处理器,这个处理器叫做 EvaluateJsonPath,添加完以后,先把它连接到的整体流程当中,应该把 split 连接过来。切割的单个对象到 EvaluateJsonPath,到 EvaluateJsonPath 以后,要对它进行一个处理,还要把的单个阶层对象,它里面的属性抽取出来到 HDFS,所以说这里面要把这个对象修改为 attribute, 默认的写入到 conent 的当中去。
修改完之后,通过这个加号,让填写这个属性的名称。那这个属性名字如果说不确定这个 Json 里面到底都有什么结构,可以这样,先让他运行,可以查看它的实际在对接当中的数据。
这三个全部启动成功,看到数据的流转,这个时候数据已经流转到这,可以把这个处理器停止, 随便找一个数据。查看具体值,把这个值复制完以后,粘贴到文本文件当中,那通过这个文件可以看到,它是一个 Json Object,通过格式化以后查看会更清晰。
这个时候可以看到在这个队列中保存这个数据它是一个 object 的,在这个 Object 当中它包含有 ID,name mobile,email son-json 那它和数据中这些字段是一一保对应,Id mobile,email son-json 那它其实代表其中的一行数据。
获取它当中的这些数据,可以通过 Json past 来获取,这里的每一个属性值。也是 Json past 的最简单的用法,可以把它的名称,比如说这个第一个 ID,把这个 Id 添入到的自定义属性当中,是 flowfile 属性当中的,让他的名字叫做ID,方便后面去获取。然后他又弹一个框,这个框是它的 value 值,那这个值可以通过$.这样的方式,是的 Json 表达式来获取到它里面的 ID 这个属性。 然后继续把的这个 name 也获取到这是属性名称,它的值是$.name 。然后再继续添加按比如说的 moblie,这是叫做$.moblie。还有一个是$.email ,$.son-Json,然后进行保存。
可以让他运行, 那运行的话提前要先让他能够先让它连接上来。匹配的话,进行对接对于如果不匹配的话,他进行一个自连接。
现在这个对立式当中已经有数据,是直接启动 EvaluateJsonPath,他已经处理完。然后看最终的数据,随便找一个可以看到这个数据的内容是一样的,但是这个时候主要来看它的 ATTRIBUTES 是否增加,点击可以看到有一个叫 emal的属性,然后还有一个叫做 ID 的属性,还有一个手机号、名称属性,还有一个 son-Json 属性,也是说新添加这个属性,全部都添加成功。
接下来要进行下一步操作,先把这个队列当中的数据是清空,接下来添加 Repalce Text 的处理器,来将提出来的属性应用,把 conent 内容那种覆盖写入。投入一个新的处理器叫做 Repalce Text,然后他们两个也进行一个连接。
然后去设置 Repalce Text 他拿到新的 flowfile 以后还要去进行把的原来的这个文本替换掉。首先这个正则表达式是不需要进行修改,因为这个因为是要替换所有的文本内容,但是这块不能再这样写,这个 $1它是的指代原来的这个文本内容。 这个时候要通过的 NiFi 表达式,$()这样的方式,拿到刚才获取到新的 EvaluateJsonPath,比如说第一个 ID 拿到它,然后中间通过 tab 或者通过空格都可以。比如说这边通过 tab 来划分的来分割这个不同的途径。然后第二个是moblie,如果记不起来的话,可以复制。
一定要在后面再加一个换行。因为数据是行与行数据之间,需要进行换行的,像之前没有换行的时候行和行是挨着的,输入回车之后, 相当于点击 ok,输入回车可以按 Shift 键,然后再按 enter,这个时候可以看到他换行,再去保存的时候,它中间有一个换行符。
然后把更新策略改成 line-by-line,是每一行替换一次每行数据。有感叹号,有报错,让他进行一个自连接,失败以后留在自定义中,把它停掉,然后接下来走完整的流程,看看他是否能够正常的工作。
最后启动,数据已经处理完,在这有5个数据输入进来,停止这个处理器,进入到 hdfs 当中。
在这个里面可以看到又有新增的数据,在这个数据当中,可以看到这里面的值已经变更为最新的数据格式,这个数据格式中间是通过 tab 键进行分割的。每一个数据通过换行键分割。