基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文

这篇具有很好参考价值的文章主要介绍了基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

前面曾体验过通过零代码、可视化、拖拉拽的方式快速完成了从 MySQLClickHouse 的数据迁移,但是在实际生产环境,我们在迁移到目标库之前还需要做一些过滤和转换工作;比如,在诗词数据迁移后,发现原来 MySQL 中的诗词数据都是繁体字,这就导致在直接迁移到 ClickHouse 做统计分析时生成的图表展示也是繁体中文的,对于不熟悉繁体中文的用户来说影响体验。
今天就借助 ETLCloud 提供的自定义规则能力,同时调用第三方 jaropencc4j ,完成繁体中文到简体中文的转换;具体来说,将诗词数据库从 MySQL 迁移到 ClickHouse ,并在入库之前完成数据清洗转换工作,完成数据表中标题、作者与内容等字段的繁体中文到简体中文的转换。

数据集说明

MySQL 数据库中的库表 poetry 结构如下,数据量: 311828

CREATE TABLE `poetry` (
	`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	`title` VARCHAR(150) NOT NULL COLLATE 'utf8mb4_unicode_ci',
	`yunlv_rule` TEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',
	`author_id` INT(10) UNSIGNED NOT NULL,
	`content` TEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',
	`dynasty` VARCHAR(10) NOT NULL COMMENT '诗所属朝代(S-宋代, T-唐代)' COLLATE 'utf8mb4_unicode_ci',
	`author` VARCHAR(150) NOT NULL COLLATE 'utf8mb4_unicode_ci',
	PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=311829;

ClickHouse 中的建表语句:

CREATE TABLE poetry.poetry (`id` Int32, `title` String, `yunlv_rule` String, `author_id` Int32, `content` String, `dynasty` String, `author` String) ENGINE = MergeTree() PRIMARY KEY id ORDER BY id SETTINGS index_granularity = 8192

工具选型

  • ClickHouse数据库
  • Docker部署ETLCloudV2.2
  • ETLCloud的库表输入组件、数据清洗转换组件、钉钉消息组件

Note:这里选择的是社区版,采用 Docker 部署的方式轻量、快速启动: docker pull ccr.ccs.tencentyun.com/restcloud/restcloud-etl:V2.2

创建应用与流程

先创建应用(因为后面的规则是跟着应用走的),填写基本的应用配置信息。
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot
接着,创建数据流程,填写信息即可。
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot

自定义规则

在真正开始数据迁移前,先准备好清洗转换规则,到迁移入库时直接配置选择定义好的规则即可。
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot
进入应用配置——>新增规则分类——>新增自定义规则
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot
编写从繁体中文到简体中文的规则代码,其中,类名是自动生成的,先是引入了转换的工具类: ZhConverterUtil ,然后调用其静态方法即可;编写完毕后,点击“编译并保存”,正常的话会提示编译成功~。
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot

package cn.restcloud.etl.rule.ext;

import org.apache.commons.lang3.StringUtils;
import org.bson.Document;
import java.sql.Connection;
import cn.restcloud.framework.core.context.*;
import cn.restcloud.etl.base.IETLBaseEvent;
import cn.restcloud.etl.base.IETLBaseProcessEngine;
import cn.restcloud.framework.core.util.*;
import cn.restcloud.framework.core.util.db.rdb.*;
import cn.restcloud.etl.rule.service.ETLProcessRuleUtil;
import java.util.*;
import com.github.houbb.opencc4j.util.ZhConverterUtil;

/**
indoc是一个map的包装对像内部结构为key-value
被流程的Java规则节点调用时,返回0表示终止流程,返回1表示成功,其中indoc为流数据,fieldId为空值
当被字段绑定运行时fieldId为绑定的字段Id,流入数据的每一行作为indoc对像传入本方法执行一次
params为绑定规则时填写的传入的参数格式为JSON字符串
繁体中文转为简体中文
2023-07-07 10:58:21
admin
*/
public class ETL_64a77f4d955fc70345c4041a implements IETLBaseEvent {

	@Override
	public String execute(IETLBaseProcessEngine engine, Document modelNodeDoc, Document indoc,String fieldId,String params) throws Exception {
	    //List<Document> dataDocs=engine.getData(indoc); //上一节点传入的数据流(仅作为Java规则节点运行可用)
	    Document paramsDoc=ETLProcessRuleUtil.paramsToDocument(params);//规则参数转为一个map包装对像key-value
	    String paramsValue=DocumentUtil.getString(paramsDoc,"参数id"); //读取规则选中时输入的自定义参数值
		String fieldValue=indoc.getString(fieldId); //获取规规绑定的字段Id获取字段值
		PrintUtil.o(fieldId+"取到的值为=>"+fieldValue); //PrintUtil.o();可以打印变量到控制以日志中
		//TODO 对fieldValue进行自定义处理
		String result = ZhConverterUtil.toSimple(fieldValue);
		PrintUtil.o("转换后的值为=>"+result); 
		indoc.put(fieldId,result); //把新的值覆盖旧字段的值
		return "1";
	}
}

Note:这里需要注意的是,我们用到了第三方的 Jaropencc4j 来完成这一工作,那么 ETLCloud 如何知道要怎样调用自定义的工具类的方法呢?这就需要我们将第三方的 jar 放到 ETLCloud 的部署目录下: /usr/tomcat/webapps/ROOT/WEB-INF/lib

[root@etl ~]# docker cp /opt/opencc4j-1.8.1.jar de63b29c71d0:/usr/tomcat/webapps/ROOT/WEB-INF/lib
                                             Successfully copied 513kB to de63b29c71d0:/usr/tomcat/webapps/ROOT/WEB-INF/lib

然后点击版本更新,平台提示以下内容:

平台配置(Successfully registered (0) java bean, update (2) java bean information!, API升级结果: 从Jar文件中更新或注册(0)个服务、(0)个输入参数、(0)个输出编码! ), ETL配置(Successfully registered (0) java bean, update (0) java bean information!, API升级结果: 从Jar文件中更新或注册(2)个服务、(0)个输入参数、(0)个输出编码! )

迁移实践

接下来通过可视化的配置与操作完成从 MySQLClickHouse 的诗词数据快速转换与迁移操作。

数据源配置

  1. 配置Source:MySQL

选择 MySQL ,填写IP: 端口以及用户密码信息。
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot
测试连接成功~

  1. 配置Sink:ClickHouse

数据源选择之前文章迁移的 ClickHouse 诗词数据库。

可视化配置流程

创建好流程后,可以通过点击“流程设计”按钮,进入流程可视化的配置页面。

  1. 库表输入:MySQL

在左侧的输入组件中,选择“库表输入”,拖至中央的流程绘制区,双击进入配置阶段。

第一步:选择我们配置好的 MySQL 数据源,可以载入 MySQL 中已有的表。
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot
第二步:可以根据选择的表,生成 SQL 语句。
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot
第三步:可从表中读取到各个字段的定义,支持添加、删除字段。
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot
第四步:根据 SQL 语句自动进行了数据预览,这样的一个检查操作,保证了后续操作的正常执行。
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot

  1. 数据清洗转换:opencc4j实现繁体中文转简体中文

在对字段配置规则前,先熟悉下 opencc4j 在后端开发中的用法。

  • 引入依赖
        <!-- Opencc4j 支持中文繁简体转换 -->
        <dependency>
            <groupId>com.github.houbb</groupId>
            <artifactId>opencc4j</artifactId>
            <version>1.8.1</version>
        </dependency>
  • 编码转换
import com.github.houbb.opencc4j.util.ZhConverterUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootOpencc4jApplicationTests {
	// 繁体中文转简体中文
    @Test
    void toSimple(){
        String original = "李白乘舟將欲行,忽聞岸上踏歌聲。|桃花潭水深千尺,不及汪倫送我情。";
        String result = ZhConverterUtil.toSimple(original);
        System.out.println(result);
        Assertions.assertEquals("李白乘舟将欲行,忽闻岸上踏歌声。|桃花潭水深千尺,不及汪伦送我情。", result);
    }

	// 簡體中文轉繁體中文
    @Test
    void toTraditional(){
        String original = "李白乘舟将欲行,忽闻岸上踏歌声。|桃花潭水深千尺,不及汪伦送我情。";
        String result = ZhConverterUtil.toTraditional(original);
        Assertions.assertEquals("李白乘舟將欲行,忽聞岸上踏歌聲。|桃花潭水深千尺,不及汪倫送我情。", result);
    }
}

在左侧的数据转换组件中,选择“数据清洗转换”,拖至中央的流程绘制区,双击进入配置阶段。
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot
因为源数据表中的 titlecontent 以及 author 这三个字段值是繁体中文,所以针对这三个字段设置自定义的规则:繁体中文转为简体中文,下一步点击保存对所有数据记录进行转换即可。

  1. 库表输出:ClickHouse

在左侧的输出组件中,选择“库表输出”,拖至中央的流程绘制区,双击进入配置阶段。

第一步:选择我们配置好的ClickHouse数据源。
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot
第二步:可从表中读取到各个字段的定义,支持添加、删除字段、绑定规则。
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot
最后通过 流程线开始库表输入数据清洗转换库表输出结束组件分别连接起来,数据通过自定义的规则转换与迁移的可视化配置便告完成,Done~
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot

运行流程

保存流程,运行流程;之后可查看对应的流程日志与转换日志,并可视化监控迁移进度。
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot

问题记录

  • 数据转换过程报错

问题描述: 在 ETLCloud 的日志中发现错误, Caused by: java.lang.ClassNotFoundException: com.github.houbb.heaven.support.instance.impl.Instances
问题分析:在 SpringBoot 结合 IDEAMaven 中开发时,我们仅仅引入了一个依赖: opencc4j ,但是实际上观察外部依赖库时发现还有另外两个依赖: heavennlp-common
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot
解决方法:将 opencc4j-1.8.1.jarheaven-0.2.0.jarnlp-common-0.0.5.jar 这个三个 jar 包都上传到 ETLCloud/usr/tomcat/webapps/ROOT/WEB-INF/lib 目录下,重新更新 ETLCloud 配置、重启 ETLCloud 服务。
基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot

[root@etl ~]# docker cp /opt/heaven-0.2.0.jar de63b29c71d0:/usr/tomcat/webapps/ROOT/WEB-INF/lib
                                             Successfully copied 304kB to de63b29c71d0:/usr/tomcat/webapps/ROOT/WEB-INF/lib
[root@etl ~]# docker cp /opt/nlp-common-0.0.5.jar de63b29c71d0:/usr/tomcat/webapps/ROOT/WEB-INF/lib
                                             Successfully copied 1.97MB to de63b29c71d0:/usr/tomcat/webapps/ROOT/WEB-INF/lib

基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文,ETLCloud,BigData,SpringBoot,ETLCloud,MySQL,ClickHouse,opencc4j,SpringBoot
Note: Jar 包可以从阿里云镜像仓库查找下载: https://developer.aliyun.com/mvn/search ,或者到本地开发环境的的 .m2\repository\com\github\houbb 目录下查找。

总结

以上介绍了如何通过 ETLCloud 强大的自定义规则功能完成对数据的清洗转换功能,实现了表字段值从繁体中文到简体中文的转换,以下两点要注意:

  1. 自定义规则是附属于某个流程的;
  2. 第三方的Jar包依赖在数量上要完整。

Reference

  • ETLCloud官方文档
  • ClickHouse官方文档
  • opencc4j官方文档

If you have any questions or any bugs are found, please feel free to contact me.
Your comments and suggestions are welcome!文章来源地址https://www.toymoban.com/news/detail-682268.html

到了这里,关于基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android基于JNA集成调用第三方C/C++的so库

    Android基于JNA集成调用第三方C/C++的so库 (1)引入JNA。 基于JNA开源项目,JNA对Android NDK的封装,简化Android层JNI集成调用C/C++的so库。 GitHub - java-native-access/jna: Java Native Access Java Native Access. Contribute to java-native-access/jna development by creating an account on GitHub. https://github.com/java-native-ac

    2024年02月02日
    浏览(44)
  • 基于opencv第三方视觉库,通过内网IP调用手机摄像头,实现人脸识别与图形监测

    OpenCV 是一个开源的计算机视觉库,OpenCV 库用C语言和 C++ 语言编写,可以在 Windows、Linux、Mac OS X 等系统运行。同时也在积极开发 Python、Java、Matlab 以及其他一些语言的接口,将库导入安卓和 iOS 中为移动设备开发应用。 OpenCV 库包含从计算机视觉各个领域衍生出来的 500 多个函

    2024年02月09日
    浏览(43)
  • 【Spring Cloud】基于 Feign 实现远程调用,深入探索 Feign 的自定义配置、性能优化以及最佳实践方案

    在微服务架构中,服务之间的通信是至关重要的,而远程调用则成为实现这种通信的一种常见方式。在 Java 中,使用 RestTemplate 是一种传统的远程调用方式,但它存在一些问题,如代码可读性差、编程体验不一致以及参数复杂URL难以维护等。 在本文中,我们将探讨如何通过使

    2024年02月04日
    浏览(54)
  • AndroidStudio调用第三方so库

    背景         最近公司设备换了新的触摸屏(为I2C接口),该触摸屏有个app,app中可以显示触摸屏固件的版本。我需要做的是在自己的app中读取到触摸屏固件版本。         反编译了apk,得到了源码,发现对方app是通过jni调用so库的方式获取到的触摸屏固件版本。所以

    2024年04月26日
    浏览(38)
  • C#--调用Python(包含第三方库)

    参考链接 可以很好的支持第三方库。 推荐这个,经本人验证这个很好用。 后文 2. 详细使用。 如果使用第三方库就放弃这个吧,真的用不了,使用时报各种错。 如果只是标准库,可以用这个。 只需要在 nuget 里装上 IronPython 和 IronPython.StdLib 即可。 使用参考链接 1.3.1 示例演

    2024年02月07日
    浏览(41)
  • uniapp小程序调用第三方地图导航

    效果    

    2024年02月15日
    浏览(38)
  • 我调用第三方接口遇到的13大坑

    在实际工作中,我们经常需要在项目中调用第三方API接口,获取数据,或者上报数据,进行数据交换和通信。 那么,调用第三方API接口会遇到哪些问题?如何解决这些问题呢? 这篇文章就跟大家一起聊聊第三方API接口的话题,希望对你会有所帮助。   一般我们在第一次对接

    2023年04月16日
    浏览(58)
  • SpringBoot案例 调用第三方接口传输数据

    最近再写调用三方接口传输数据的项目,这篇博客记录项目完成的过程,方便后续再碰到类似的项目可以快速上手 项目结构: 这里主要介绍HttpClient发送POST请求工具类和定时器的使用,mvc三层架构编码不做探究 pom.xml application-dev.yml Constast utils scheduled 该定时任务每10秒执行一

    2024年02月12日
    浏览(60)
  • 仅仅是调用第三方接口那么简单吗?

    最近有个项目需要本地处理之后,然后调用第三方接口,本来开始觉得很简单得事情,不就是调用第三方接口吗?但是却一波三折。 首先有了下面的第一版的设计。 这个设计很简单,也是最容易想到的。主要有下面几步 1、本地处理; 2、调用第三方接口; 3、本地日志打印

    2024年02月06日
    浏览(66)
  • uniapp原生插件开发调用第三方SDK

    uniapp安卓官方SDK Android 离线SDK - 正式版 | uni小程序SDK 官方uni原生插件开发教程(android)网址: 简介 | uni小程序SDK 第一步,开发环境的准备 下载uniapp安卓官方SDK待后面使用,解压完成如下图所示。 JAVA环境 jdk,打开cmd输入java -version查看自己的jdk版本,官方文档中提示jdk版本应

    2024年02月15日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包