您的位置:首页 > 其它

如何生成hive的建表语句(批量)

2016-06-06 23:21 399 查看

问题场景

在一个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) + "\t" + res.getString(2));
}

sql = "select * from " + tableName;
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(String.valueOf(res.getInt(1)) + "\t" + 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,还是不行,我觉得是卡在用户名密码不对。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: