如何生成hive的建表语句(批量)
问题场景
在一个hadoop 1的hive系统中,有很多表只有表结构没有数据,现在需要把这些表迁移到hadoop 2的hive上。
那么需要这些表的建表语句。
用show create table tb_name
可以解决一个表的建表脚本,那么如何获得多个表的建表脚本?
前提是表非常多。。
Java连接Hive
利用jdbc连接到hive,使用java程序写一个循环。
先获取全部表,然后show create table每个表。
没能尝试成功,一直连接不上:
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
public class HiveTestCase {
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
public static void main(String[] args)
throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
Connection con = DriverManager.getConnection("jdbc:hive2://10.1.69.170:10002/hn_dw", "hadoop", "1qaz@WSX");
Statement stmt = con.createStatement();
String tableName = "wyphao";
stmt.execute("drop table if exists " + tableName);
stmt.execute("create table " + tableName + " (key int, value string)");
System.out.println("Create table success!");
// show tables
String sql = "show tables "" + tableName + """;
System.out.println("Running: " + sql);
ResultSet res = stmt.executeQuery(sql);
if (res.next()) {
System.out.println(res.getString(1));
}
// describe table
sql = "describe " + tableName;
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(res.getString(1) + " " + res.getString(2));
}
sql = "select * from " + tableName;
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(String.valueOf(res.getInt(1)) + " " + res.getString(2));
}
sql = "select count(1) from " + tableName;
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(res.getString(1));
}
}
}
网上的资料
Hive的JDBC接口实现(Eclipse环境配置)
java 通过jdbc驱动连接hive操作实例
HIve的JavaAPI操作
配置HiveServer2的安全策略之自定义用户名密码验证
Hive:用Java代码通过JDBC连接Hiveserver介绍
HIVE JDBC连接详解
使用Hive执行hive命令输出到本地文件
hive -S -e "select package_name,count(1) from app_list group by package_name;"> grp_app_id.dat
这样就能使用生成的脚本了:(这里用到文本编辑器Sublime Text)
改造成shell脚本,头上加入#!/bin/bash
然后执行脚本:
导出完成。
然后再合并文件:
cat *.sql > create.sql
网上的参考链接
Hive中的三种不同的数据导出方式介绍
HIVE部署安装(笔记)
hive导出查询文件到本地文件的2种办法
遗留的问题
Java连接hive,还是不行,我觉得是卡在用户名密码不对。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: ThinkPHP5 清除runtime缓存文件
- 下一篇: php、ThinkPHP禁用浏览器缓存