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 MySQL
dados 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.ClickHouse
MySQL
ClickHouse
ETLCloud
jar
opencc4j
MySQL
ClickHouse
Descrição do conjunto de dados
MySQL
A 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;
ClickHouse
A 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 é Docker
leve 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.
A seguir, crie um processo de dados e preencha as informações.
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.
Insira a configuração do aplicativo -> Nova categoria de regra -> Adicionar regra personalizada.
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 ZhConverterUtil
chama . 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 ~.
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";
}
}
Jar
Nota: O que precisa ser observado aqui é que usamos um pacote de terceiros opencc4j
para concluir este trabalho, então ETLCloud
como sabemos como chamar o método da classe de ferramenta personalizada? Isso exige que coloquemos jar
o terceiro ETLCloud
no 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 MySQL
para é concluída por meio de configuração e operação visual .ClickHouse
Configuração da fonte de dados
- Configurar fonte: MySQL
Selecione MySQL
e preencha as informações de IP: porta e senha do usuário.
Teste de conexão bem-sucedido ~
- 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.
- 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.
MySQL
Passo 1: Selecione a fonte de dados que configuramos e carregue MySQL
as tabelas existentes nela.
Passo 2: Você pode gerar demonstrativos com base na tabela selecionada SQL
.
Etapa 3: A definição de cada campo pode ser lida na tabela e os campos podem ser adicionados e excluídos.
Passo 4: SQL
A 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.
- 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 opencc4j
seu 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.
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: title
Converter chinês tradicional em chinês simplificado . Na próxima etapa, clique em Salvar para converter todos os registros de dados.content
author
- 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.
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.
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.
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.
Registro de problema
- Erro durante o processo de conversão de dados
Descrição do problema: ETLCloud
Foi 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 SpringBoot
combinação IDEA
com 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: heaven
e nlp-common
.
Solução: carregue todos os três pacotes opencc4j-1.8.1.jar
, heaven-0.2.0.jar
e , para o diretório de , atualize novamente a configuração e reinicie o serviço.nlp-common-0.0.5.jar
jar
ETLCloud
/usr/tomcat/webapps/ROOT/WEB-INF/lib
ETLCloud
ETLCloud
[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
Nota: Jar
O pacote pode ser encontrado e baixado do repositório espelho do Alibaba Cloud: ou pesquisado no diretório https://developer.aliyun.com/mvn/search
do ambiente de desenvolvimento local ..m2\repository\com\github\houbb
Resumir
O texto acima descreve como ETLCloud
concluir 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:
- Regras personalizadas são anexadas a um determinado processo;
- As dependências de pacotes de terceiros
Jar
devem ser completas em quantidade.
Referência
- Documentação oficial do ETLCloud
- Documentação oficial do ClickHouse
- Documentação oficial do opencc4j
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!