功能:java通过配置文件生成hive建表语句
1.配置文件示例:
cat hive_tabcols.txt
test01|id,name
test02|id,name,create_date
2.生成结果示例:
cat result.txt
create table test01 (
id string
,name string
)
row format delimited
fields terminated by '\001'
lines terminated by '\n'
stored as textfile;
create table test02 (
id string
,name string
,create_date timestamp
)
row format delimited
fields terminated by '\001'
lines terminated by '\n'
stored as textfile;
3.代码处理逻辑:
package com.ods.sqoop.common;
import java.io.*;
public class DealHiveCreateTable {
public static void main(String[] args) throws Exception {
FileInputStream fileInputStream = new FileInputStream(args[0]);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(args[1])));
String line;
StringBuilder sb = new StringBuilder();
while ((line = bufferedReader.readLine()) != null) {
String table_name = line.split("\\|")[0];
String[] columns = line.split("\\|")[1].split(",");
sb.append("create table " + table_name + " (");
for (int i = 0; i < columns.length; i++) {
if (columns[i].contains("date") || columns[i].contains("time")){
sb.append("," + columns[i] + " timestamp\n");
} else {
sb.append("," + columns[i] + " string\n");
}
}
sb.append(")\n" +
"row format delimited \n" +
"fields terminated by '\\001'\n" +
"lines terminated by '\\n'\n" +
"stored as textfile;\n\n");
}
bufferedWriter.write(sb.toString().replaceAll("\\(,","\\(\n "));
bufferedReader.close();
bufferedWriter.close();
}
}
- 执行jar包生成最终需要的数据字典
# 传参: 配置文件名, 生成结果文件名
java -cp ods_etl.jar com.tpiods.sqoop.common.DealHiveCreateTable hive_tabcols.txt result.txt