Wrangler de texto
App-wranngler de texto para transformar os dados do CSV, conforme especificado pelo Antlr4 DSL sob medida.
Uso
- Execute
mvn package para gerar o analisador ANTLR4 - Importe o esquema MySQL em
main/java/resources/schema.sql - Atualize os detalhes da conexão MySQL em
main/java/resources/configuraiton.ini - Comece no app.java para uma demonstração sobre como usar a biblioteca
Transformações DSL
- Uma amostra DSL para transformações é fornecida em
main/java/resources/transformations.dsl - A gramática e Lexer que descrevem as regras DSL e a sintaxe podem ser fundadas em
srcmainantlr4orgluisaminiwrangler
Gramática Regex
- Os padrões Java Regex são suportados, que podem ser usados para pular dados
- Além disso, os padrões de açúcar são suportados por meio de um padrão mapeado
Analisador CSV
- ANTLR4 também é usado para analisar o CSV
- Uma gramática e Lexer que descrevem as regras de análise CSV podem ser encontradas em
srcmainantlr4orgluisaminiwrangler
Dados do CSV
- A amostra de dados do CSV está em
main/java/resources/orders.csv - Nenhum pedido é criado a partir desta amostra
- Os valores de dados que não correspondem ao padrão fornecido (se um) são ignorados
Suposições
- Os dados do CSV têm uma linha de cabeçalho com nomes de campo
Testes
- App.java executa e salva pedidos para os dados e amostras DSL fornecidos.
Dependências
- Mariadb como driver JBDC
- ANTLR4 para processamento DSL e CSV e suporte
- Junit para testes de unidade
Javadoc
- Javadoc está em pasta 'doc', contendo uso adicional, suposições e notas de implementação
Trabalho futuro
- Refator para abstrair a ordem do tipo (detalhes fornecidos no código -fonte marcado com // comentários de TODO), possibilitando reutilização facilmente para outro tipo de dados
- Crie um utilitário para suportar a criação de esquema de banco de dados a partir do DSL ou de importação de esquema do banco de dados (mais amamentado para trazer uma dependência como o querydsl e estendê -lo para se adequar ao objetivo)
- Estender a gramática/lexer DSL para permitir a criação de formatados para a representação do objeto de destino no stdout
- Estenda a gramática/lexer DSL para permitir uma construção de regex filtro que permite a um usuário analisar apenas os objetos que correspondem a esse filtro
- Estender para apoiar outros idiomas do banco de dados, por exemplo, seria bastante interessante apoiar Redis
- Estenda para apoiar o mapa <> Reduza o processador para permitir o trabalho paralelo com bigdata
- Estender para suportar fluxos reativos e editores/assinantes
- Adicione a suíte de teste Junit adequado com um rico conjunto de exemplos
- Forneça documentação técnica adequada, como diagrama de classe e diagramas de interação