数据源的种类有很多种,比如:
1:用户的行为日志文件.
2:业务业务数据库数据(关系型数据 和 非关系型数据库: 文档, KV(键值)等).
3:excel文档(财务 和 行政的一些报表).
我目前所负责的就是excel文档的一个入库,在入库的过程中发现了一些比较坑人的地方,如下:
1:科学计数法
Excel中如果数据超过12位,则会自动进行数据转换成科学计数法数据;由于Excel的精度为15,所以数据超过15位后面的部分自动会用0补充进行科学计数,所以在超过15位的时候用数据库提供的系统函数转的时候会丢失精度.
解决方案:
- 将这一列单元格以文本的方式保存(感觉不实用,后面有可能被自动以科学计数法的方式保存).
- 将这一类单元格通过前面后者后面加双引号或单引号转换成字符串(入库之后统一去除)
2:单元格错误造成数据的错误
- 本来是一行的数据,有可能做表格的人员用了几行.第一列合并了单元格,而后面了又没有合并写在了第一行中.这样的情况下第二行开始空出来的就会是null了.
3:不同的输入法造成的字符串的长度不一致.
- 有一些数据数字位的长度都是一样的,后面都加了括号,用length()函数求出来的长度就不是一样长了.
其实入库excel文档的方式有很多,比如kettle,好像Navicat也是支持的,但是我们项目组用的就是最原始的.首先将数据在excel中做初步的清洗,然后将excel存成csv格式的文本,再通过pgadmin 或者psql的copy导入的数据库.
(吐槽: postgreSQL版本为9.2实在过低,连JSON都不支持呀)