数据可视化第12篇:生成千万级数据之PowerDesigner配置并生成数据

引言:

    工作中,遇到了造测试的需要,本想着自己写批量的insert就可以了。可是数据量太大了,用insert批量太麻烦了。

事实表和维度表定义,及测试数据:

    (1)医疗收入事实表

create table project_cost_fact

(

  id int primary key auto_increment,

  cost_direction_code VARCHAR(20) comment '费用方向编码', 

  hospital_code VARCHAR(20) comment '医院定点编码', 

  level_code VARCHAR(20) comment '医院级别代码',

  time_code VARCHAR(10) comment '时间编码',

  income_type_code  VARCHAR(32) comment '收入类别编码:1、门诊收入 2、挂号收入 3、诊察收入 4、检查收入 5、化验收入 6、治疗收入 7、手术收入 8、卫生材料收入 9、西药收入 10、中草药收入 11、中成药收入 12、药事服务费收入 13、其他门诊收入 14、住院收入 15、床位收入 16、护理收入 17、其他住院收入',

  borrowing VARCHAR(32) comment '借贷方向',

  accrual  DOUBLE comment '发生额', 

  total  DOUBLE comment '合计'

)

    (2)时间维度表

CREATE TABLE time_type(

  code VARCHAR(20) comment '时间编码',

  year INT COMMENT '年度',

  year_name  VARCHAR(20) comment '年度名称',

  quarter INT COMMENT '季度',

  quarter_name  VARCHAR(20) comment '季度名称',

  month INT COMMENT '月份',

  month_name  VARCHAR(20) comment '月份名称',

  create_time VARCHAR(20) comment '创建时间')

insert into time_type values('1','2017','2017年','1','第一季度','1','一月份','2020-04-24 06:50:53');

insert into time_type values('2','2017','2017年','1','第一季度','2','二月份','2020-04-24 06:50:53');

insert into time_type values('3','2017','2017年','1','第一季度','3','三月份','2020-04-24 06:50:53');

insert into time_type values('4','2017','2017年','2','第二季度','4','四月份','2020-04-24 06:50:53');

insert into time_type values('5','2017','2017年','2','第二季度','5','五月份','2020-04-24 06:50:53');

insert into time_type values('6','2017','2017年','2','第二季度','6','六月份','2020-04-24 06:50:53');

insert into time_type values('7','2017','2017年','3','第三季度','7','七月份','2020-04-24 06:50:53');

insert into time_type values('8','2017','2017年','3','第三季度','8','八月份','2020-04-24 06:50:53');

insert into time_type values('9','2017','2017年','3','第三季度','9','九月份','2020-04-24 06:50:53');

insert into time_type values('10','2017','2017年','4','第四季度','10','十月份','2020-04-24 06:50:53');

insert into time_type values('11','2017','2017年','4','第四季度','11','十一月份','2020-04-24 06:50:53');

insert into time_type values('12','2017','2017年','4','第四季度','12','十二月份','2020-04-24 06:50:53');

insert into time_type values('13','2018','2018年','1','第一季度','1','一月份','2020-04-24 06:50:53');

insert into time_type values('14','2018','2018年','1','第一季度','2','二月份','2020-04-24 06:50:53');

insert into time_type values('15','2018','2018年','1','第一季度','3','三月份','2020-04-24 06:50:53');

insert into time_type values('16','2018','2018年','2','第二季度','4','四月份','2020-04-24 06:50:53');

insert into time_type values('17','2018','2018年','2','第二季度','5','五月份','2020-04-24 06:50:53');

insert into time_type values('18','2018','2018年','2','第二季度','6','六月份','2020-04-24 06:50:53');

insert into time_type values('19','2018','2018年','3','第三季度','7','七月份','2020-04-24 06:50:53');

insert into time_type values('20','2018','2018年','3','第三季度','8','八月份','2020-04-24 06:50:53');

insert into time_type values('21','2018','2018年','3','第三季度','9','九月份','2020-04-24 06:50:53');

insert into time_type values('22','2018','2018年','4','第四季度','10','十月份','2020-04-24 06:50:53');

insert into time_type values('23','2018','2018年','4','第四季度','11','十一月份','2020-04-24 06:50:53');

insert into time_type values('24','2018','2018年','4','第四季度','12','十二月份','2020-04-24 06:50:53');

insert into time_type values('25','2019','2019年','1','第一季度','1','一月份','2020-04-24 06:50:53');

insert into time_type values('26','2019','2019年','1','第一季度','2','二月份','2020-04-24 06:50:53');

insert into time_type values('27','2019','2019年','1','第一季度','3','三月份','2020-04-24 06:50:53');

insert into time_type values('28','2019','2019年','2','第二季度','4','四月份','2020-04-24 06:50:53');

insert into time_type values('29','2019','2019年','2','第二季度','5','五月份','2020-04-24 06:50:53');

insert into time_type values('30','2019','2019年','2','第二季度','6','六月份','2020-04-24 06:50:53');

insert into time_type values('31','2019','2019年','3','第三季度','7','七月份','2020-04-24 06:50:53');

insert into time_type values('32','2019','2019年','3','第三季度','8','八月份','2020-04-24 06:50:53');

insert into time_type values('33','2019','2019年','3','第三季度','9','九月份','2020-04-24 06:50:53');

insert into time_type values('34','2019','2019年','4','第四季度','10','十月份','2020-04-24 06:50:53');

insert into time_type values('35','2019','2019年','4','第四季度','11','十一月份','2020-04-24 06:50:53');

insert into time_type values('36','2019','2019年','4','第四季度','12','十二月份','2020-04-24 06:50:53');

    (3)医院维度表

create table hospital(

id int primary key auto_increment,

hospital_code VARCHAR(20) comment '医院编码', 

hospital_name VARCHAR(20) comment '医院名称' 

)

insert into hospital(hospital_code,hospital_name) values('6251088','徐水**医院');

insert into hospital(hospital_code,hospital_name) values('6250007','徐水**医院');

insert into hospital(hospital_code,hospital_name) values('6250009','保定**医院');

insert into hospital(hospital_code,hospital_name) values('6251035','保定**医院');

insert into hospital(hospital_code,hospital_name) values('6251001','保定**医院');

insert into hospital(hospital_code,hospital_name) values('6251002','保定**医院');

insert into hospital(hospital_code,hospital_name) values('6251004','保定**院');

insert into hospital(hospital_code,hospital_name) values('6251888','徐**医院');

insert into hospital(hospital_code,hospital_name) values('6251005','徐水**医院');

insert into hospital(hospital_code,hospital_name) values('6258888','徐水**医院');  

    (4)医院级别维度

CREATE TABLE hospital_level(

  level_code VARCHAR(20) comment '医院级别代码',

  level_name  VARCHAR(20) comment '医院级别名称',

  create_time VARCHAR(20) comment '创建时间'

  )

insert into hospital_level values ('1','三级医院','2020-04-24 06:50:42');

insert into hospital_level values ('2','二级医院','2020-04-24 06:50:42');

insert into hospital_level values ('3','一级医院','2020-04-24 06:50:42');

insert into hospital_level values ('4','一级以下(社区医疗)','2020-04-24 06:50:42');

    (5)科室维度表

create table office_type(

  id int primary key auto_increment,

  office_code VARCHAR(32) comment '科室编码',

  office_name VARCHAR(32) comment '科室名称'

)

insert into office_type(office_code,office_name) value ('1','普外科');

insert into office_type(office_code,office_name) value ('2','骨外科');

insert into office_type(office_code,office_name) value ('3','心内科');

insert into office_type(office_code,office_name) value ('4','口腔科');

insert into office_type(office_code,office_name) value ('5','消化科');

insert into office_type(office_code,office_name) value ('6','肾内科');

insert into office_type(office_code,office_name) value ('7','眼科');

insert into office_type(office_code,office_name) value ('8','免疫科');

insert into office_type(office_code,office_name) value ('9','感染疾病科');

insert into office_type(office_code,office_name) value ('10','急诊科');

insert into office_type(office_code,office_name) value ('11','皮肤科');

insert into office_type(office_code,office_name) value ('12','神经内科');

insert into office_type(office_code,office_name) value ('13','新生儿内科');

insert into office_type(office_code,office_name) value ('14','耳鼻喉科科');

insert into office_type(office_code,office_name) value ('15','呼吸中心');

insert into office_type(office_code,office_name) value ('16','血液肿瘤中心');

    (6)成本项目维度表

create table project_type

(

id int primary key auto_increment,

 project_code VARCHAR(32) comment '成本项目编码',

 project_name VARCHAR(32) comment '成本项目名称'

)

insert into project_type(project_code,project_name) values('1','员经费');

insert into project_type(project_code,project_name) values('2','卫生材料费');

insert into project_type(project_code,project_name) values('3','药品费');

insert into project_type(project_code,project_name) values('4','固定资产折旧');

insert into project_type(project_code,project_name) values('5','无形资产摊销');

insert into project_type(project_code,project_name) values('6','提取医疗风险基金');

insert into project_type(project_code,project_name) values('7','其他费用');

insert into project_type(project_code,project_name) values('8','合计');

insert into project_type(project_code,project_name) values('9','科室收入');

insert into project_type(project_code,project_name) values('10','收入-成本');

insert into project_type(project_code,project_name) values('11','床日成本');

insert into project_type(project_code,project_name) values('12','诊次成本');

    (7)收入类别维度表

create table income_type(

id int primary key auto_increment,

income_type_code VARCHAR(32) comment '收入类别编码:1、门诊收入 2、挂号收入 3、诊察收入 4、检查收入 5、化验收入 6、治疗收入 7、手术收入 8、卫生材料收入 9、西药收入 10、中草药收入 11、中成药收入 12、药事服务费收入 13、其他门诊收入 14、住院收入 15、床位收入 16、护理收入 17、其他住院收入',

income_type_name VARCHAR(32) comment '收入类别名称:1、门诊收入 2、挂号收入 3、诊察收入 4、检查收入 5、化验收入 6、治疗收入 7、手术收入 8、卫生材料收入 9、西药收入 10、中草药收入 11、中成药收入 12、药事服务费收入 13、其他门诊收入 14、住院收入 15、床位收入 16、护理收入 17、其他住院收入'

)  

insert into income_type (income_type_code,income_type_name) values('1','门诊收入');

insert into income_type (income_type_code,income_type_name) values('2','挂号收入');

insert into income_type (income_type_code,income_type_name) values('3','诊察收入');

insert into income_type (income_type_code,income_type_name) values('4','检查收入');

insert into income_type (income_type_code,income_type_name) values('5','化验收入');

insert into income_type (income_type_code,income_type_name) values('6','治疗收入');

insert into income_type (income_type_code,income_type_name) values('7','手术收入');

insert into income_type (income_type_code,income_type_name) values('8','卫生材料收入');

insert into income_type (income_type_code,income_type_name) values('9','西药收入');

insert into income_type (income_type_code,income_type_name) values('10','中草药收入');

insert into income_type (income_type_code,income_type_name) values('11','中成药收入');

insert into income_type (income_type_code,income_type_name) values('12','药事服务费收入');

insert into income_type (income_type_code,income_type_name) values('13','其他门诊收入 ');

insert into income_type (income_type_code,income_type_name) values('14','住院收入');

insert into income_type (income_type_code,income_type_name) values('15','床位收入');

insert into income_type (income_type_code,income_type_name) values('16','护理收入');

insert into income_type (income_type_code,income_type_name) values('17','其他住院收入');

    (8)费用方向维度表

create table cost_direction_type(

id int primary key auto_increment,

cost_direction_code VARCHAR(20) comment '费用方向编码', 

cost_direction_name VARCHAR(20) comment '费用方向名称' 

)

insert into cost_direction_type(cost_direction_code,cost_direction_name) values('1','医疗收入');

insert into cost_direction_type(cost_direction_code,cost_direction_name) values('2','财政基本补助收入');

insert into cost_direction_type(cost_direction_code,cost_direction_name) values('3','财政项目补助收入');

insert into cost_direction_type(cost_direction_code,cost_direction_name) values('4','科教项目收入');

insert into cost_direction_type(cost_direction_code,cost_direction_name) values('5','其他收入');

insert into cost_direction_type(cost_direction_code,cost_direction_name) values('6','医疗业务成本');

insert into cost_direction_type(cost_direction_code,cost_direction_name) values('7','财政项目补助支出');

insert into cost_direction_type(cost_direction_code,cost_direction_name) values('8','科教项目支出');

insert into cost_direction_type(cost_direction_code,cost_direction_name) values('9','管理费用');

    上面给出事实表和维度表的定义及数据,本文最开始,我也提到了找算批量insert,可以想想数据量太大了,太麻烦。通过psql编程也是可以实现的,我也懒得写存储过程。

现在说说数据量大,怎么算的数据量?

假设,你想给事实表要造10000条记录,应该差不多够了吧???

总记录数=时间维度表记录数*医院维度表记录数*医院级别维度表记录数*科室维度记录数*成本项目维度记录数*收入类别维度表记录数*费用方向维度表记录数*

总记录数=36*10*3*16*12*17*9=31726080


PowerDesigner中好像有造测试数据的功能,而且操作方便,实现过程可复用,实现具体如下:

1、逆向把库中的表引入

image.png

image.png

image.png

2、指定要操作的用户,其它的用户不要操作,数据安全要注意

image.png

3、指定了用户,再指定要操作用户中的  哪些表(此处我只造了1个表)

image.png

4、导入的表结构如下:

image.png

注意:

id是主键可以自增加,不用管。

根据自己的业务需要,给指定的列生成测试数据,此处我选取的是level_code字符串类型和accrual  DOUBLE类型,来演示。表中其它的列,默认会被随机填充上随机的字符串。

5、双击引入的表结构

image.png

6、找到Columns标签,这里面是表中所有的列,每1个列前面都有个序号,找到要操作的列,双击它前面的序号:此处我双周的是leve_code前面的序号3

image.png

image.png

7、为level_code列,创建新的test data profile文件

image.png

8、生成的数据类型指定:

Automatic:代表着生成 数值类型数据,可以是有规则的递增序列和随机数

List:代表生成的数据没有规则,可以把这些数据放在一个集合中,数据类型不限制,就像java中的List中保存的是Objct类型一样

    1)、Automatic

image.png

image.png

image.png

image.png

新创建的test data profile已经应用到leve_code列上了

2)、List

image.png

image.png

image.png

数据没有规则 (除了数值类型,也可以指定一些字符串类型)

image.png

如果数据有规则

image.png

image.png

image.png

新创建的test data profile已经应用到accrual列上了

image.png

可以看到,新创建的2个 test data profile

9、触发运行生成测试数据

image.png

image.png

image.png

到100%就生成好了



猜你喜欢

转载自blog.51cto.com/51power/2540509