Regras personalizadas baseadas em ETLCloud chamam pacotes jar de terceiros para converter chinês tradicional em chinês simplificado

fundo

Anteriormente, experimentamos a rápida conclusão da migração de dados de para através de código zero, visualização e métodos de arrastar e soltar.No entanto, no ambiente de produção real, ainda precisamos fazer algum trabalho de filtragem e conversão antes de migrar para o destino biblioteca; por exemplo, em MySQLdados estavam todos em chinês tradicional. Isso resultou na exibição do gráfico gerado ao migrar diretamente para a análise estatística para ser em chinês tradicional, o que afetou o experiência para usuários que não estavam familiarizados com o chinês tradicional. Hoje, usaremos os recursos de regras personalizadas fornecidos e chamaremos o pacote de terceiros para concluir a conversão do chinês tradicional para o chinês simplificado; especificamente, migraremos o banco de dados de poesia de para , concluiremos o trabalho de limpeza e conversão de dados antes de entrar no banco de dados, e preencher a tabela de dados Conversão de Chinês Tradicional para Chinês Simplificado em campos como título, autor e conteúdo.ClickHouseMySQLClickHouse
ETLCloudjaropencc4jMySQLClickHouse

Descrição do conjunto de dados

MySQLA estrutura da tabela da biblioteca no banco de dados poetryé a seguinte e a quantidade de dados é: 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;

ClickHouseA instrução de criação de tabela em:

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

Seleção de ferramenta

  • Banco de dados ClickHouse
  • Docker implanta ETLCloudV2.2
  • Componente de entrada de tabela de biblioteca do ETLCloud, componente de conversão de limpeza de dados e componente de mensagem DingTalk

Nota: A versão comunitária escolhida aqui é Dockerleve e rápida para começar a usar o método de implantação: docker pull ccr.ccs.tencentyun.com/restcloud/restcloud-etl:V2.2.

Crie aplicativos e processos

Crie o aplicativo primeiro (porque as regras subsequentes seguem o aplicativo) e preencha as informações básicas de configuração do aplicativo.
2023-07-15-1-CreateApp.jpg
A seguir, crie um processo de dados e preencha as informações.
2023-07-15-2-CreateApp.jpg

Regras personalizadas

Antes de realmente iniciar a migração de dados, prepare as regras de limpeza e transformação. Ao migrar para o banco de dados, você pode configurar e selecionar diretamente as regras definidas.
2023-07-15-3-RuleCategory.jpg
Insira a configuração do aplicativo -> Nova categoria de regra -> Adicionar regra personalizada.
2023-07-15-4-RuleContent.jpg
Escreva o código da regra do chinês tradicional para o chinês simplificado. Entre eles, o nome da classe é gerado automaticamente. Primeiro, a classe da ferramenta de conversão é introduzida: e depois a ZhConverterUtilchama . Métodos estáticos são suficientes; após escrever, clique em "Compilar e Salvar". Se estiver normal, será avisado que a compilação foi bem-sucedida ~.
2023-07-15-5-RuleCode.jpg

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";
	}
}

JarNota: O que precisa ser observado aqui é que usamos um pacote de terceiros opencc4jpara concluir este trabalho, então ETLCloudcomo sabemos como chamar o método da classe de ferramenta personalizada? Isso exige que coloquemos jaro terceiro ETLCloudno diretório de implantação: /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

Em seguida, clique em atualização de versão e a plataforma solicitará o seguinte:

Configuração da plataforma ((0) java bean registrado com sucesso, atualização (2) informações do java bean!, Resultados de atualização da API: atualização ou registro de (0) serviços, (0) parâmetros de entrada, (0) códigos de saída do arquivo Jar!), ETL configuração ((0) java bean registrado com sucesso, atualização (0) informações do java bean!, resultados de atualização da API: atualizar ou registrar (2) serviços, (0) parâmetros de entrada, (0) da codificação de saída do arquivo Jar! )

Práticas de migração

Em seguida, a rápida conversão e migração de dados de poesia de MySQLpara é concluída por meio de configuração e operação visual .ClickHouse

Configuração da fonte de dados

  1. Configurar fonte: MySQL

Selecione MySQLe preencha as informações de IP: porta e senha do usuário.
2023-07-01-2-SourceMySQL.jpg
Teste de conexão bem-sucedido ~

  1. Configurar coletor: ClickHouse

Selecione o banco de dados de poesia ClickHouse do qual os artigos anteriores foram migrados como fonte de dados.

Processo de configuração visual

Após criar o processo, você pode clicar no botão "Process Design" para entrar na página de configuração da visualização do processo.

  1. Entrada da tabela do banco de dados: MySQL

No componente de entrada à esquerda, selecione "Entrada da tabela de biblioteca", arraste-o para a área central de desenho do processo e clique duas vezes para entrar no estágio de configuração.

MySQLPasso 1: Selecione a fonte de dados que configuramos e carregue MySQLas tabelas existentes nela.
2023-07-15-6-Fonte1.jpg
Passo 2: Você pode gerar demonstrativos com base na tabela selecionada SQL.
2023-07-15-7-Fonte2.jpg
Etapa 3: A definição de cada campo pode ser lida na tabela e os campos podem ser adicionados e excluídos.
2023-07-15-8-Fonte3.jpg
Passo 4: SQLA visualização dos dados é realizada automaticamente com base na instrução.Essa operação de verificação garante a execução normal das operações subsequentes.
2023-07-15-9-Fonte4.jpg

  1. Limpeza e conversão de dados: opencc4j converte chinês tradicional em chinês simplificado

Antes de configurar regras para campos, primeiro familiarize-se com opencc4jseu uso no desenvolvimento back-end.

  • Introduzir dependências
        <!-- Opencc4j 支持中文繁简体转换 -->
        <dependency>
            <groupId>com.github.houbb</groupId>
            <artifactId>opencc4j</artifactId>
            <version>1.8.1</version>
        </dependency>
  • transcodificação
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);
    }
}

No componente de transformação de dados à esquerda, selecione "Data Cleaning Transformation", arraste-o para a área central de desenho do processo e clique duas vezes para entrar no estágio de configuração.
2023-07-15-10-Regra.jpg
Como os valores desses três campos na tabela de dados de origem estão em chinês tradicional, defina regras personalizadas para esses três campos: titleConverter chinês tradicional em chinês simplificado . Na próxima etapa, clique em Salvar para converter todos os registros de dados.contentauthor

  1. Saída da tabela da biblioteca: ClickHouse

No componente de saída à esquerda, selecione "Saída da tabela da biblioteca", arraste-o para a área central de desenho do processo e clique duas vezes para entrar no estágio de configuração.

Etapa 1: selecione a fonte de dados ClickHouse que configuramos.
2023-07-15-11-CK1.jpg
Passo 2: A definição de cada campo pode ser lida na tabela e suporta adição, exclusão de campos e regras de vinculação.
2023-07-15-12-CK2.jpg
Finalmente, 流程线conectando o início , a entrada da tabela da biblioteca , a conversão de limpeza de dados , a saída da tabela da biblioteca e os componentes finais , respectivamente, a configuração visual da conversão e migração de dados por meio de regras personalizadas é concluída.
2023-07-15-17-Fluxo.jpg

Executar processo

Salve o processo e execute-o; você poderá então visualizar os logs de processo e de conversão correspondentes e monitorar visualmente o progresso da migração.
2023-07-15-17-Result.jpg

Registro de problema

  • Erro durante o processo de conversão de dados

Descrição do problema: ETLCloudFoi encontrado um erro no log de . Caused by: java.lang.ClassNotFoundException: com.github.houbb.heaven.support.instance.impl.Instances
Análise do problema: Ao desenvolver em SpringBootcombinação IDEAcom Maven, introduzimos apenas uma dependência: opencc4j, mas na verdade, ao observar a biblioteca de dependência externa, descobrimos que existem duas outras dependências: heavene nlp-common.
2023-07-15-13-Jar.jpg
Solução: carregue todos os três pacotes opencc4j-1.8.1.jar, heaven-0.2.0.jare , para o diretório de , atualize novamente a configuração e reinicie o serviço.nlp-common-0.0.5.jarjarETLCloud/usr/tomcat/webapps/ROOT/WEB-INF/libETLCloudETLCloud
2023-07-15-14-Jar.jpg

[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

2023-07-15-15-Atualização.jpg
Nota: JarO pacote pode ser encontrado e baixado do repositório espelho do Alibaba Cloud: ou pesquisado no diretório https://developer.aliyun.com/mvn/searchdo ambiente de desenvolvimento local ..m2\repository\com\github\houbb

Resumir

O texto acima descreve como ETLCloudconcluir a função de limpeza e conversão de dados por meio da poderosa função de regra personalizada e realizar a conversão dos valores dos campos da tabela do chinês tradicional para o chinês simplificado. Os dois pontos a seguir devem ser observados:

  1. Regras personalizadas são anexadas a um determinado processo;
  2. As dependências de pacotes de terceiros Jardevem ser completas em quantidade.

Referência


Se você tiver alguma dúvida ou algum bug for encontrado, não hesite em entrar em contato comigo.
Seus comentários e sugestões são bem vindos!

Acho que você gosta

Origin blog.csdn.net/u013810234/article/details/132574809
Recomendado
Clasificación