美文网首页
Sql-生成器,解决清洗数据痛点

Sql-生成器,解决清洗数据痛点

作者: rrsunhome | 来源:发表于2021-11-14 22:55 被阅读0次

Sql-生成器

背景

在工作当中,会遇到上线前需要初始化数据或上线后线上数据不正确、数据需要清洗等,对于复杂的场景需要写脚本来支持,对于简单的场景往往是写 sql 人工执行,数据的来源往往是某个文件,通过文件解析成对应的 sql,时间一长,每次发生这种事情就会产生不必要的工作量,所以本项目把解析、生产对应的 sql,抽象成对应工具库,提高开发效率

工作当中都有哪些痛点

  1. 线上数据不正确,需要更改成正确的
  2. 业务甩给开发一个文件,让线上的数据和文件中某些数据保持一致
  3. 上线前,需要初始化一批业务数据或需要修复一批数据,和本次上线的功能兼容

平常是如何解决的

写个 Sql 生成类,解析文件,生成 sql,这个过程会产生几个问题:

  1. 每次需要重新写代码,反复测试
  2. 耗费时间
  3. 代码得不到复用

本方案是如何解决的

抽象 Sq l 生成过程,其中为资源的加载、解析、数据格式化、展示,这几个部分可以独立扩展。

使用指南

Maven:

<dependency>
  <groupId>com.github.rrsunhome</groupId>
  <artifactId>excelsql-generate</artifactId>
  <version>2.1.0</version>
</dependency>

Builder API 使用

如果没有解析配置,以下几行代码就可以满足

        SqlGeneratorBuilder.newBuilder()
                .classPath("order-v1.xlsx") 
                .configureSqlFormatStrategy() // 配置 Sql 格式化策略
                .propertyPlaceholder() // 基于属性占位符格式化
                .propertyPlaceholderSql("insert into table(a,b,c) values({0},{1},{2});") // {cellIndex} cellIndex 为列下标
                .autoAddDoubleQuotes()  // 自动添加 ''
                .buildFormat()
                .build()
                .execute()// 执行
                .outputView(); // 输出到视图,默认控制台 

加载步骤:

  1. 资源路径 : classPath、本地 file
  2. 资源解析配置: 默认对数据不做任何处理,可以为
  3. 数据格式化策略: 基于属性占位符格式化,其中 { } 大括号中下标为纵坐标
  4. 数据输出结果:默认展示到控制台,可以扩展
  5. 具体构建过程可以参以下代码部分

Builder API 代码部分

public class SqlGeneratorBuilder {

    private Resource resource;

    private BaseParserConfig parserConfig;

    private FileParser fileParser;

    private RowFormatterStrategyBuilder outputSqlFormatBuilder;

    public static SqlGeneratorBuilder newBuilder() {
        return new SqlGeneratorBuilder();
    }

    public SqlGeneratorBuilder resource(Resource resource) {
        this.resource = resource;
        return this;
    }

    public SqlGeneratorBuilder filePath(String path) {
        this.resource = new FileSystemResource(path);
        return this;
    }

    public SqlGeneratorBuilder classPath(String path) {
        this.resource = new ClassPathResource(path);
        return this;
    }

    public SqlGeneratorBuilder parserConfig(BaseParserConfig parserConfig) {
        this.parserConfig = parserConfig;
        return this;
    }

    public SqlGeneratorBuilder resourceParser(FileParser fileParser) {
        this.fileParser = fileParser;
        return this;
    }

    public RowFormatterStrategyBuilder configureSqlFormatStrategy() {
        RowFormatterStrategyBuilder outputSqlFormatBuilder = new RowFormatterStrategyBuilder(this);
        this.outputSqlFormatBuilder = outputSqlFormatBuilder;
        return outputSqlFormatBuilder;
    }

    public SqlGenerator build() {
        String extension = resource.getExtension();
        if (fileParser == null) {
            fileParser = FileParserFactory.INSTANCE.findFileParser(extension);
        }
        if (fileParser == null) {
            throw new RuntimeException("Resource parser cannot be empty.");
        }
        if (parserConfig == null) {
            parserConfig = fileParser.getDefaultParserConfig();
        }

        if (!parserConfig.getClass().equals(fileParser.getDefaultParserConfig().getClass())) {
            throw new RuntimeException("Incorrect parser configuration type.");
        }
        return new DefaultSqlGenerator(resource, parserConfig, fileParser, outputSqlFormatBuilder.build());
    }


}

\

相关文章

  • Sql-生成器,解决清洗数据痛点

    Sql-生成器 背景 在工作当中,会遇到上线前需要初始化数据或上线后线上数据不正确、数据需要清洗等,对于复杂的场景...

  • sql

    sql-基础sql-基础查询-1sql-基础查询-2sql-更新 概览 数据库(Database,DB):将大量数...

  • 一、数据库之SQL语句

    一、SQL创表 二、SQL-插入 三、SQL-修改 四、SQL-删除 五、SQL-查询 以上是SQL语句常用的用法...

  • 痛点,解决痛点

    前段时间,天天运动,空调一吹脖子受凉,几乎是疼痛难忍。 正好周六我参加一个拆书+演讲分享会,其中一个是健身行业的朋...

  • Pentaho Data Integration(or Kett

    Pentaho Data Integration(or Kettle) 解决了什么问题? 方便,搞笑的解决数据清洗...

  • 基于深度学习的计算机视觉-20170510

    可以解决大数据领域数据必须标注的问题。 核心是生成器,判别器是对抗。通过对抗训练,使得生成器质量不断提高,直到判别...

  • 如何用4行 R 语句,快速探索你的数据集?

    用最简单的方式,完成探索性分析。 痛点 实践中,大量数据分析时间,都会花在数据清洗与探索性数据分析(Explora...

  • 11- generator

    genarator函数: 生成器,解决异步问题,深度嵌套。 语法: genarator结合axios数据请求:

  • 2019-08-07

    数据应用 生意参谋 数据产品的本质是产品,那么首先要回答用户是谁,用户的痛点是什么,产品要解决用户的哪些痛点,及产...

  • 机器学习算法之交叉验证

    我们一般解决机器学习问题的步骤如下:1.拿到数据集,对数据集进行清洗。数据集清洗一般包括以下几个方面:重复值处理,...

网友评论

      本文标题:Sql-生成器,解决清洗数据痛点

      本文链接:https://www.haomeiwen.com/subject/zmkftrtx.html