java入门,从CK导一部分数据到mysql

19 篇文章 1 订阅

一、需求

需要从生产环境ck数据库导数据到mysql,数据量大约100w条记录。

二、处理步骤

1、这里的关键词是生产库,第二就是100w条记录。所以处理数据的时候就要遵守一定的规范。首先将原数据库表进行备份,或者将需要导出的数据建一张新的表了来操作,切记不能在原数据表上进行操作,因为如果操作有误,恢复就很麻烦了,或者直接造成生产事故。

2、100W条记录,那么我们直接通过SQL语句导出来,再导到mysql,显然不现实。第一sql语法不一样,第二数据量太大,导出来的SQL文件打不开。

三、实现

1、ck中创建一个新的临时表,存储需要导出的数据

 CREATE TABLE data_dwd.data_user_import_cdj_1113
(

phone                  Nullable(String) ,
one_id                 String ,
reg_time_platform      Nullable(String) ,
level_no               Nullable(String) ,
employee_id_mall       Nullable(String) ,
reg_time_travel        Nullable(String) ,
activate_status_travel Nullable(String) ,
activate_date_travel   Nullable(String) ,
platform_reg_travel    Nullable(String) ,
level_name_travel      Nullable(String) ,
available_integral     Nullable(String) ,
isaccpmak              Nullable(String) ,
reg_time_hotel         Nullable(String) ,
platform_reg_hotel     Nullable(String) ,
level_name_hotel       Nullable(String) ,
x_mph_kctp             Nullable(String) ,
reg_time_invest        Nullable(String) ,
platform_reg_invest    Nullable(String) ,
level_name_invest      Nullable(String)
)
ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/{shard}/data_user_import_cdj_1113',
 '{replica}')
ORDER BY ( 
 one_id)
SETTINGS index_granularity = 8192

2、将需要导出的数据,插入到临时表

--将数据写入中间表
insert  into  data_dwd.data_user_import_cdj_1113 select 
phone                   ,
one_id                  ,
reg_time_platform       ,
level_no                ,
employee_id_mall        ,
reg_time_travel         ,
activate_status_travel  ,
activate_date_travel    ,
platform_reg_travel     ,
level_name_travel       ,
available_integral      ,
isaccpmak               ,
reg_time_hotel          ,
platform_reg_hotel      ,
level_name_hotel        ,
x_mph_kctp              ,
reg_time_invest         ,
platform_reg_invest     ,
level_name_invest   

from    data_user_import  where  phone is  not null;

这里处理的关键信息,是获取需要的数据和字段就行了。原因,原始表一共有400多个字段,实际需要的就20几个,所以这里建的临时表没必要和原始表的表结构一样。

3、创建mysql表,表结构应对应上ck表

--创建mysql表
CREATE TABLE  data_user_import_cdj
(

phone                  varchar(255) ,
one_id                  varchar(255) ,
reg_time_platform      varchar(255) ,
level_no               varchar(255) ,
employee_id_mall       varchar(255) ,
reg_time_travel        varchar(255) ,
activate_status_travel varchar(255) ,
activate_date_travel   varchar(255) ,
platform_reg_travel    varchar(255) ,
level_name_travel      varchar(255) ,
available_integral     varchar(255) ,
isaccpmak              varchar(255) ,
reg_time_hotel         varchar(255) ,
platform_reg_hotel     varchar(255) ,
level_name_hotel       varchar(255) ,
x_mph_kctp             varchar(255) ,
reg_time_invest        varchar(255) ,
platform_reg_invest    varchar(255) ,
level_name_invest      varchar(255)
)

4、将临时表数据导入到mysql数据表

这时可以通过工具导

这个步骤一般比较慢的,但是导100w的数据应该没什么问题

5、数据导到mysql数据库,就可以在mysql数据库对数据进行加工。

这里同样的要对数据加工前,最好使用一张新的表来存储数据加工,而不是直接在原来的表上加工,以防加工错误,数据无法恢复,又需要重新导数据。

比如:从数据中选出10W条处理出来

 create table   tmp_data_user_import_zlt_10W  as select * from     data_user_import_cdj where  reg_time_platform is not  null limit  100000; 

    create table   tmp_data_user_import_zlt_10W  as select * from     data_user_import_cdj where  reg_time_platform is not  null limit  100000;

应创建新的表来存储,而不是在原表上进行操作。

实际开发中,处理完的数据,可能还要导到其他数据库,会涉及到存储过程或者定时任务的一些编写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋力向前123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值