实战:Excel大数据导入通用设计,通过规则处理数据(一)

“ 实践是检验真理的唯一标准”

01.需求介绍

    Excel导入文件后存入到源数据表中,再根据规则表中配置的规则开始治理数据,将治理的数据存入治理数据表中.  源数据通过不同规则生成不同格式的数据,支持同一个文件源数据多次治理

02.需求分析

  • 源数据表中可以保存Excel文件中所有数据, 且支持所有不同数据列的数据

  • 规则表, 配置数据处理规则, 需设计规则管理, 规则跟数据列有关系, 可以增加列, 可以删除列

  • 治理的数据是由Excel源数据和治理规则来决定的

  • 一个Excel可以包含多个sheet,每个sheet可以是不同格式列的数据

  • 一个sheet可以对应多个治理规则

  • 同一个文件/同一个治理规则生成的数据总和也要满足 治理规则

03.重点分析

  • 源数据表中可以存储不同数据列的数据, 这里需要设计一个 文件数据列和表字段的映射表, 源数据表只存储数据, 可以定义固定列名,如:column1,column2,column3, 再将列名与文件中的列名一一对应

  • 一个文件对应多个sheet, 源数据/治理数据 跟sheet直接关系, 跟文件间接关系

  • 治理后的数据可以增加/删除源数据映射表的映射关系, 所以治理后的数据有自己单独的 字段和列名映射表

04.优化点

  • 文件导入时, 读取文件内容时需要考虑效率

  • 文件导入时, 源数据入库时需要考虑效率

  • 根据规则处理数据时, 注意代码格式, 方便后期增加新规则代码

  • 治理数据入库时, 需要考虑存储效率

04.表设计

  • 文件表

CREATE TABLE `import_file` (  `id` int(12) NOT NULL AUTO_INCREMENT COMMENT '主键',  `file_name` varchar(255) DEFAULT NULL COMMENT '文件名称',  `file_path` varchar(255) DEFAULT NULL COMMENT '文件路径',  `import_status` tinyint(2) DEFAULT '1' COMMENT '导入状态(1导入中 2导入完成 3导入失败)',  `file_size` bigint(20) DEFAULT '0' COMMENT '文件大小',  `file_md5` varchar(255) DEFAULT NULL COMMENT '文件md5',  `suffix` varchar(20) DEFAULT NULL COMMENT '文件后缀',  `import_msg` varchar(500) DEFAULT NULL COMMENT '导入备注',  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COMMENT='导入文件记录';
  • sheet表

CREATE TABLE `sheet_info` (  `id` int(12) NOT NULL COMMENT '主键',  `file_id` int(20) DEFAULT NULL COMMENT '文件id',  `file_name` varchar(255) DEFAULT NULL COMMENT '文件名称',  `sheet_idx` tinyint(6) DEFAULT NULL COMMENT 'sheet序号',  `sheet_name` varchar(255) DEFAULT NULL COMMENT 'sheet名称',  `total` int(12) DEFAULT '0' COMMENT '总条数',  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • 源数据表(只支持50个字段)

CREATE TABLE `source_data` (  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',  `file_id` int(12) DEFAULT NULL COMMENT '文件id',  `sheet_id` int(12) DEFAULT NULL COMMENT 'sheet的id',  `sheet_name` varchar(255) DEFAULT NULL COMMENT 'sheet名称',  `column1` varchar(255) DEFAULT '' COMMENT '字段1',  `column2` varchar(255) DEFAULT '' COMMENT '字段2',  `column3` varchar(255) DEFAULT '' COMMENT '字段3',  `column4` varchar(255) DEFAULT '' COMMENT '字段4',  `column5` varchar(255) DEFAULT '' COMMENT '字段5',  `column6` varchar(255) DEFAULT '' COMMENT '字段6',  `column7` varchar(255) DEFAULT '' COMMENT '字段7',  `column8` varchar(255) DEFAULT '' COMMENT '字段8',  `column9` varchar(255) DEFAULT '' COMMENT '字段9',  `column10` varchar(255) DEFAULT '' COMMENT '字段10',  `column11` varchar(255) DEFAULT '' COMMENT '字段11',  `column12` varchar(255) DEFAULT '' COMMENT '字段12',  `column13` varchar(255) DEFAULT '' COMMENT '字段13',  `column14` varchar(255) DEFAULT '' COMMENT '字段14',  `column15` varchar(255) DEFAULT '' COMMENT '字段15',  `column16` varchar(255) DEFAULT '' COMMENT '字段16',  `column17` varchar(255) DEFAULT '' COMMENT '字段17',  `column18` varchar(255) DEFAULT '' COMMENT '字段18',  `column19` varchar(255) DEFAULT '' COMMENT '字段19',  `column20` varchar(255) DEFAULT '' COMMENT '字段20',  `column21` varchar(255) DEFAULT '' COMMENT '字段21',  `column22` varchar(255) DEFAULT '' COMMENT '字段22',  `column23` varchar(255) DEFAULT '' COMMENT '字段23',  `column24` varchar(255) DEFAULT '' COMMENT '字段24',  `column25` varchar(255) DEFAULT '' COMMENT '字段25',  `column26` varchar(255) DEFAULT '' COMMENT '字段26',  `column27` varchar(255) DEFAULT '' COMMENT '字段27',  `column28` varchar(255) DEFAULT '' COMMENT '字段28',  `column29` varchar(255) DEFAULT '' COMMENT '字段29',  `column30` varchar(255) DEFAULT '' COMMENT '字段30',  `column31` varchar(255) DEFAULT '' COMMENT '字段31',  `column32` varchar(255) DEFAULT '' COMMENT '字段32',  `column33` varchar(255) DEFAULT '' COMMENT '字段33',  `column34` varchar(255) DEFAULT '' COMMENT '字段34',  `column35` varchar(255) DEFAULT '' COMMENT '字段35',  `column36` varchar(255) DEFAULT '' COMMENT '字段36',  `column37` varchar(255) DEFAULT '' COMMENT '字段37',  `column38` varchar(255) DEFAULT '' COMMENT '字段38',  `column39` varchar(255) DEFAULT '' COMMENT '字段39',  `column40` varchar(255) DEFAULT '' COMMENT '字段40',  `column41` varchar(255) DEFAULT '' COMMENT '字段41',  `column42` varchar(255) DEFAULT '' COMMENT '字段42',  `column43` varchar(255) DEFAULT '' COMMENT '字段43',  `column44` varchar(255) DEFAULT '' COMMENT '字段44',  `column45` varchar(255) DEFAULT '' COMMENT '字段45',  `column46` varchar(255) DEFAULT '' COMMENT '字段46',  `column47` varchar(255) DEFAULT '' COMMENT '字段47',  `column48` varchar(255) DEFAULT '' COMMENT '字段48',  `column49` varchar(255) DEFAULT '' COMMENT '字段49',  `column50` varchar(255) DEFAULT '' COMMENT '字段50',  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=422628 DEFAULT CHARSET=utf8mb4 COMMENT='原文件数据';
  • 字段/文件头映射表

CREATE TABLE `header_info` (  `id` int(12) NOT NULL AUTO_INCREMENT,  `header_no` varchar(20) DEFAULT NULL COMMENT '文件头模版编号',  `header_name` varchar(255) DEFAULT NULL COMMENT '文件头模版名称',  `file_id` int(12) DEFAULT NULL COMMENT '文件id',  `sheet_id` int(12) DEFAULT NULL COMMENT 'sheet的id',  `sheet_name` varchar(255) DEFAULT NULL COMMENT 'sheet名称',  `data_type` varchar(20) DEFAULT 'source' COMMENT '数据类型:source源数据,govern治理数据',  `cols_idx` tinyint(6) DEFAULT NULL COMMENT '列序号',  `cols_name` varchar(255) DEFAULT NULL COMMENT '列名',  `column_name` varchar(255) DEFAULT NULL COMMENT '库字段名称',  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=608 DEFAULT CHARSET=utf8mb4 COMMENT='导入文件头模板';
  • 治理规则表

CREATE TABLE `govern_rule` (  `id` int(12) NOT NULL AUTO_INCREMENT COMMENT '主键',  `header_no` varchar(20) DEFAULT NULL COMMENT '头映射编号',  `header_name` varchar(255) DEFAULT NULL COMMENT '头映射名称',  `rule_no` varchar(20) DEFAULT NULL COMMENT '规则编号',  `rule_type` varchar(20) DEFAULT NULL COMMENT '规则类型',  `rule_content` varchar(1024) DEFAULT NULL COMMENT '规则内容集合',  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COMMENT='治理规则';
  • 治理记录表

CREATE TABLE `govern_record` (  `id` int(12) NOT NULL AUTO_INCREMENT COMMENT '主键',  `file_id` int(12) DEFAULT NULL COMMENT '文件id',  `sheet_id` int(12) DEFAULT NULL COMMENT 'sheet序号',  `sheet_name` varchar(255) DEFAULT NULL COMMENT 'sheet名称',  `rule_no` varchar(20) DEFAULT NULL COMMENT '规则编号',  `header_no` varchar(20) DEFAULT NULL COMMENT '头映射编号',  `header_name` varchar(255) DEFAULT NULL COMMENT '头映射名称',  `total_num` int(10) DEFAULT NULL COMMENT '总数量',  `success_num` int(10) DEFAULT '0' COMMENT '成功数量',  `error_num` int(10) DEFAULT '0' COMMENT '错误数量',  `filtration_num` int(10) DEFAULT '0' COMMENT '筛选掉的数量',  `message` text COMMENT '备注',  `govern_status` tinyint(2) DEFAULT '1' COMMENT '治理状态(1治理中 2治理完成 3治理失败)',  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8mb4 COMMENT='治理记录';
  • 治理数据表

CREATE TABLE `govern_data` (  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',  `file_id` int(12) DEFAULT NULL COMMENT '文件id',  `sheet_id` int(12) DEFAULT NULL COMMENT 'sheet序号',  `sheet_name` varchar(255) DEFAULT NULL COMMENT 'sheet名称',  `rule_no` varchar(255) DEFAULT NULL COMMENT '规则编号',  `header_no` varchar(20) DEFAULT NULL COMMENT '头映射编号',  `header_name` varchar(255) DEFAULT NULL COMMENT '头映射名称',  `source_id` bigint(20) DEFAULT NULL COMMENT '源数据id',  `column1` varchar(255) DEFAULT '' COMMENT '字段1',  `column2` varchar(255) DEFAULT '' COMMENT '字段2',  `column3` varchar(255) DEFAULT '' COMMENT '字段3',  `column4` varchar(255) DEFAULT '' COMMENT '字段4',  `column5` varchar(255) DEFAULT '' COMMENT '字段5',  `column6` varchar(255) DEFAULT '' COMMENT '字段6',  `column7` varchar(255) DEFAULT '' COMMENT '字段7',  `column8` varchar(255) DEFAULT '' COMMENT '字段8',  `column9` varchar(255) DEFAULT '' COMMENT '字段9',  `column10` varchar(255) DEFAULT '' COMMENT '字段10',  `column11` varchar(255) DEFAULT '' COMMENT '字段11',  `column12` varchar(255) DEFAULT '' COMMENT '字段12',  `column13` varchar(255) DEFAULT '' COMMENT '字段13',  `column14` varchar(255) DEFAULT '' COMMENT '字段14',  `column15` varchar(255) DEFAULT '' COMMENT '字段15',  `column16` varchar(255) DEFAULT '' COMMENT '字段16',  `column17` varchar(255) DEFAULT '' COMMENT '字段17',  `column18` varchar(255) DEFAULT '' COMMENT '字段18',  `column19` varchar(255) DEFAULT '' COMMENT '字段19',  `column20` varchar(255) DEFAULT '' COMMENT '字段20',  `column21` varchar(255) DEFAULT '' COMMENT '字段21',  `column22` varchar(255) DEFAULT '' COMMENT '字段22',  `column23` varchar(255) DEFAULT '' COMMENT '字段23',  `column24` varchar(255) DEFAULT '' COMMENT '字段24',  `column25` varchar(255) DEFAULT '' COMMENT '字段25',  `column26` varchar(255) DEFAULT '' COMMENT '字段26',  `column27` varchar(255) DEFAULT '' COMMENT '字段27',  `column28` varchar(255) DEFAULT '' COMMENT '字段28',  `column29` varchar(255) DEFAULT '' COMMENT '字段29',  `column30` varchar(255) DEFAULT '' COMMENT '字段30',  `column31` varchar(255) DEFAULT '' COMMENT '字段31',  `column32` varchar(255) DEFAULT '' COMMENT '字段32',  `column33` varchar(255) DEFAULT '' COMMENT '字段33',  `column34` varchar(255) DEFAULT '' COMMENT '字段34',  `column35` varchar(255) DEFAULT '' COMMENT '字段35',  `column36` varchar(255) DEFAULT '' COMMENT '字段36',  `column37` varchar(255) DEFAULT '' COMMENT '字段37',  `column38` varchar(255) DEFAULT '' COMMENT '字段38',  `column39` varchar(255) DEFAULT '' COMMENT '字段39',  `column40` varchar(255) DEFAULT '' COMMENT '字段40',  `column41` varchar(255) DEFAULT '' COMMENT '字段41',  `column42` varchar(255) DEFAULT '' COMMENT '字段42',  `column43` varchar(255) DEFAULT '' COMMENT '字段43',  `column44` varchar(255) DEFAULT '' COMMENT '字段44',  `column45` varchar(255) DEFAULT '' COMMENT '字段45',  `column46` varchar(255) DEFAULT '' COMMENT '字段46',  `column47` varchar(255) DEFAULT '' COMMENT '字段47',  `column48` varchar(255) DEFAULT '' COMMENT '字段48',  `column49` varchar(255) DEFAULT '' COMMENT '字段49',  `column50` varchar(255) DEFAULT '' COMMENT '字段50',  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',  PRIMARY KEY (`id`),  KEY `idx_sheet_header` (`sheet_id`,`header_no`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=609235 DEFAULT CHARSET=utf8mb4 COMMENT='之后后数据';

--- 后续增加代码编写部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值