需求
写代码以前都复制粘贴,菜的一比,第一次碰见一个生活中的实际需求,哎,数据结构和流,线程还是得认真学啊
?
表结构如下
#!/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,??????????????????????????????????? ??????????????????????????????????
result????????????????? 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:UsersrongxDesktopddl-batyp_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("rn");
}
if(count>1){
sb.setLength(0);
sb.append("E:test");
sb.append(arr[0]);
sb.append(".txt");
fos = new FileOutputStream(new File(
sb.toString()),"UTF-8");
bw = new BufferedWriter(osw);
bw.write(line);
bw.write("rn");
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("--- 文件分割完成 ---");
}
}
结果如下

?
?
