mysql数据库收集和导入数据集

 

环境

linux ubuntu 18.04LTS
mysql-5.7.31
 

数据集的收集

原贴【资源】史上最全数据集汇总

  1. 首先试了一下World Bank
     
    在这里插入图片描述

在这里插入图片描述
 
下载该数据集时出现submit始终无法点的情况,以待解决
 
在这里插入图片描述 
 
2. 再尝试RBI数据集
 在这里插入图片描述

首页就能看到许多数据集,可以用chrome翻译成中文
随便点一个:
在这里插入图片描述

在这里插入图片描述 
点击pdf的图标,再点击pdf里的超链接,可以直接下载到数据集

在这里插入图片描述随便下一个,数据集如图所示:

在这里插入图片描述
再将该表转为csv格式,方便后续数据库读取
ELECT07022016_FEB18.csv
 

数据集导入mysql数据库

  1. mysql小数类型的使用

原贴:SQL Server 小数类型(float 和 decimal)

  1. 在数据库中创建表
1
2
3
4
5
6
7
8
9
10
11
12
13
create table ELECT07022016_FEB18(
data varchar(200),
rtgs_vo decimal(10,2),rtgs_va decimal(10,2),
neft_vo decimal(10,2),neft_va decimal(10,2),
cts_vo decimal(10,2),cts_va decimal(10,2),
imps_vo decimal(10,2),imps_va decimal(10,2),
nach_vo decimal(10,2),nach_va decimal(10,2),
upi_vo decimal(10,2),upi_va decimal(10,2),
ussd_vo decimal(10,2),ussd_va decimal(10,2),
dccp_vo decimal(10,2),dccp_va decimal(10,2),
ppi_vo decimal(10,2),ppi_va decimal(10,2),
mb_vo decimal(10,2),mb_va decimal(10,2),
total_vo decimal(10,2),total_va decimal(10,2));

查了下load data infile的用法,暂时没找到忽略最后几行的办法,因此使用了较大的varchar来存储第一格
下图是看最长的一个有多少字符
在这里插入图片描述

看看创建的表
在这里插入图片描述

创建成功,然后感觉名字太复杂了,不好操作,改一下名:

1
rename table ELECT07022016_FEB18 to eps_rd;

在这里插入图片描述

  1. load导入到数据库中

参考:mysql中的load data infile用法

1
2
3
4
load data infile '/home/hjy/桌面/everyday-learning2/2020-9-15/ELECT07022016_FEB18.csv'  
into table mysql_learning.eps_rd
character set gb2312
fields terminated by ',';

出现报错:
在这里插入图片描述

参考:将csv 文件存入mysql 报错The MySQL server is running with the –secure-file-priv option so it cannot execute,显示secure_file_priv文件路径

1
show variables like '%secure%';

在这里插入图片描述

然后将文件拷贝至该路径下(文章中可以永久修改,解决该问题,但要重启mysql,为了简单起见,直接复制)

1
sudo cp /home/hjy/桌面/everyday-learning2/2020-9-15/ELECT07022016_FEB18.csv /var/lib/mysql-files/

再次导入,发生如下报错:
在这里插入图片描述
参考:mysql 用load data 导入数据时,数据被截断问题

1
set sql_mode='';

再次运行,导入成功:
在这里插入图片描述

在这里插入图片描述

  1. 后续操作
  • 删除为空的行
1
delete from eps_rd where data='';
  • 拆分表
1
2
create table month_eps as (select * from eps_rd where data like '___-%');
delete from month_eps where data='Feb-18';

在这里插入图片描述

把18年每天的数据分出来还有点麻烦,这里用了正则表达式

参考:MySQL正则表达式

1
2
3
4
create table feb_esp as 
select * from eps_rd
where data regexp '^[0-9]'
and data not like '_.%';

在这里插入图片描述

再将其它信息存起来

1
create table note as select data from eps_rd where data like '____%' and data not like '___-__';

在这里插入图片描述

最后,我想给更改一下列名,把data改成notes可在网上没查到方法(好多写的是用sp_name更改,但我不会用),说来惭愧。
我的java IDE:IntelliJ IDEA里有连结数据库的功能,然后用里面的工具成功更改列名。
在这里插入图片描述

1
alter table note change data notes varchar(200) null;

over!