Linux下mysql多表数据拆分单表

需求

写代码以前都复制粘贴,菜的一比,第一次碰见一个生活中的实际需求,哎,数据结构和流,线程还是得认真学啊

表结构如下

#!/bin/bash
# ** 存储过程名称: ysp.ddl
# ** 功能描述:
# ** 创建者: wx
# ** 创建日期:
# ** 修改者:
# ** 创建日期:
# ** 修改内容:

drop table if exists ods_payment_flow_sf7;
create table ods_payment_flow_sf7(
paymentid               string ,                                     
currency                string ,                                     
paytype                 string ,                                     
recordtype              string ,                                     
appname                 string ,                                     
channelid               string ,                                     
userid                  string ,                                     
merchantaccount         string ,                                     
result                  string ,                                     
amount                  float  ,                                     
createtime              string ,                                     
finishtime              string ,                                     
lastup                  string ,                                     
productorderid          string ,                                     
refundpaymentid         string ,                                     
serviceid               string ,                                     
migupaypaytype          string ,                                     
migupayothertype        string ,                                     
migupayorderid          string ,                                     
strdata                 string ,                                     
resultsource            string ,                                     
portaltype              string ,                                     
ip                      string ,                                     
bizdate                 string ,                                     
importtime              date   
)partitioned by                                                                 
(in_month string)                                                               
row format                         
delimited fields terminated by ‘|‘;
 
drop table if exists ods_payment_flow_sf71;
create table ods_payment_flow_sf71(
paymentid               string ,                                     
currency                string ,                                     
paytype                 string ,                                     
recordtype              string ,                                     
appname                 string ,                                                                      
result                  string ,                                     
amount                  float  ,                                     
createtime              string ,                                     
finishtime              string ,                                     
lastup                  string ,                                     
productorderid          string ,                                                             
)partitioned by                                                                 
(in_month string)                                                               
row format                         
delimited fields terminated by ‘|‘;

--货币信息表
drop table if exists dim_scope_currency;
create table dim_scope_currency
(
currency                     string              comment  ‘      货币类型                             ‘ ,  
scope                        string              comment  ‘     scope                      ‘ ,  
status                       string              comment  ‘     状态(0:未启用/1:启用)                             ‘ ,  
remark                       string              comment  ‘       备注                             ‘ , 
)
partitioned by (in_month string)
row format
delimited  fields terminated by ‘|‘;

将上百张表导出单张分表。

代码如下

package other;

import java.io.*;import java.util.ArrayList;import java.util.List;

public class SplitWord {   public static void main(String[] args) throws Exception {      splitFileDemo("C:\\Users\\rongx\\Desktop\\ddl-bat\\yp_ods2.ddl",1200);   }   public static void splitFileDemo(String path,int maxline) throws Exception {      FileInputStream fis = new FileInputStream(path);      InputStreamReader isr = new InputStreamReader(fis, "UTF-8");      BufferedReader br = new BufferedReader(isr);      // 获取文件名   /* String fileName = path.substring(0, path.indexOf("."));      // 获取文件后缀      String endName = path.substring(path.lastIndexOf("."));*/      try {         int i = 0;         boolean end = false;//判断文件是否读取完毕         while (true) {            if (end)               break;            StringBuffer sb = new StringBuffer();            String[] arr=null;         /* sb.append(fileName);            sb.append("_data");            sb.append(i);            sb.append(endName);*/            int flag=-1;            if(flag==-1) {               sb.append("E:\\test\\");               sb.append("first");               sb.append(".txt");            }            int count=0;            System.out.println(sb.toString());// 新生成的文件名            // 写入文件            FileOutputStream fos=null;            OutputStreamWriter osw=null;            BufferedWriter bw=null;            if(count==0) {               fos = new FileOutputStream(new File(                  sb.toString()),true);               osw = new OutputStreamWriter(fos, "UTF-8");               bw = new BufferedWriter(osw);               bw.flush();            }            String line = "";// 一行行读取文件            int m = 1;

            while((line = br.readLine())!=null  ){               boolean b = line.contains("drop table");               if(b){                  String[] split=null;                  if(line.contains("exists")){                      split = line.split("exists");                  }else{                      split = line.split("table");                  }                  System.out.println(split[1]);                  String replace = split[1].replace(";", "").trim();                   arr=new String[1];                  arr[0]=replace;               }               if( line.startsWith("drop table")){                  flag++;                  count++;               }               if(count==1){                  bw.write(line);                  bw.write("\r\n");               }               if(count>1){                  sb.setLength(0);                  sb.append("E:\\test\\");                  sb.append(arr[0]);                  sb.append(".txt");                  fos = new FileOutputStream(new File(                     sb.toString()),true);                  osw = new OutputStreamWriter(fos, "UTF-8");                  bw = new BufferedWriter(osw);                  bw.write(line);                  bw.write("\r\n");                  bw.flush();

               }               if(m>=maxline){                  break;               }               m++;            }            if(m<maxline)               end = true;

            //关闭写入流            bw.close();            osw.close();            fos.close();         }      } catch (Exception e) {         e.printStackTrace();      } finally {         //关闭输入流         br.close();         isr.close();         fis.close();      }      System.out.println("--- 文件分割完成 ---");

   }}

结果如下

 

 

原文地址:https://www.cnblogs.com/rongxing/p/11605165.html

时间: 2024-11-07 13:18:28

Linux下mysql多表数据拆分单表的相关文章

linux下mysql表名大小写问题

近日,新mysql实例导入sql数据时,发现比老的mysql多了100+张表,最终发现是mysql表名大小写所致:很简单的问题却耽误很长时间,在此记录一下,以防再犯同样的错误: 1.Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写:2.用root帐号登录后,在/etc/my.cnf中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写:lower_case_table_names参数详解:l

linux下mysql数据库 模型, 管理表 索引

1.linux下mysql数据库及其模型 1.1.SHOW TABLE STATUS LIKE 'user'\G   #查看表的存储引擎 SHOW ENGINES;   #查看数据库支持的存储引擎 客户端工具:mysql.mysqladmin.mysqldump.mysqlimport.mysqlcheck 服务器端工具:mysqld, mysqld_safe, mysqld_multi 1.2.my.cnf检查顺序: /etc/my.cnf --> /etc/mysql/my.cnf -->

设置Linux下Mysql表名不区分大小写

1.Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写:2.用root帐号登录后,在/etc/my.cnf中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写:lower_case_table_names参数详解:lower_case_table_names=0其中0:区分大小写,1:不区分大小写 MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的:1.数据库名与表名是严格

linux下mysql 安装

小菜鸟接触linux太晚, 装个mysql(免安装 mysql-5.6.22-linux-glibc2.5-x86_64版本,最简单的安装方法) 竞折腾了两个晚上… 网上到处有linux下mysql的安装,但我自己安装过程中总出现这样那样的问题,现将此次安装过程及错误记录,以供自己日后参考,也希望可以给后来人一些帮助… 1. 去Oracle下载mysql-5.6.22-linux-glibc*.tar.gz 2.解压 tar -zxvf mysql-5.6.22-linux-glibc*.tar

linux下mysql数据库主从同步配置

说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备篇: 说明:在两台MySQL服务器192.168.21.128和192.168.21.129上分别进行如下操作 备注: 作为主从服务器的MySQL版本建议使用同一版本! 或者必须保证主服务器的MySQL版本要高于从服务器的MySQL版本! 一.配置好IP.DNS .网关,确保使用远程连接工具能够连接

Linux下MYSQL数据库的基本操作

建立数据库: mysql> create database test; //建立一个名为"test"的数据库 建立数据库表: mysql> create table test -> (name char(16) not null, -> passwd char(16) ->); //建立一个名为"test"的表,里面有两个字段,一个字段名为"name",类型为char,大小为16,非空:另一个字段名为"pa

linux下mysql启动与停止

mysql.启动与停止   1.启动   MySQL安装完成后启动文件mysql在/etc/init.d目录下,   在需要启动时运行下面命令即可.   [[email protected] init.d]# /etc/init.d/mysql start   2.停止 /usr/bin/mysqladmin -u root -p shutdown   3.自动启动   1)察看mysql是否在自动启动列表中   [[email protected] local]# /sbin/chkconfi

Linux下MySql出现#1036 – Table ‘ ‘ is read only 错误解决方法

这两天在进行网站搬家,这次网站搬家采用直接打包mysql数据库和网页文件的形式进行迁移,上传好mysql data目录里面的网站数据库至VPS上mysql存放数据库的目录里面,解压就行.我的VPS存放数据库的路径是 /usr/local/mysql/var. 上传好网站数据,解压,配置好数据库链接参数就行,网站就能正常连接上了,我本以为这已 经是顺利迁移完成了,但后来操作的时候,发现只能读取数据库的内容,不能更改写入任何信息,提示#1036 – Table ‘* ‘ is read only (

linux下mysql数据库基础及客户端命令详解

1.mysql数据库存储引擎: SHOW ENGINES;   #查看mysql支持的存储引擎 常见有如下两个存储引擎: MyISAM:每表三个文件: .frm: 表结构 .MYD:表数据 .MYI:表索引 InnoDB:默认所有表共享一个表空间文件: 建议:每表一个独立的表空间文件:默认此功能没有打开 .frm: 表结构 .ibd: 表空间,包含表数据和表索引 .opt: 字符集和字符排序规则 打开InnoDB每表创建独立的表空间文件功能办法: vim /etc/my.cnf   #新增如下一