HiveQL 中的“如果存在 t1 则更改表重命名为 t2”?
Posted
技术标签:
【中文标题】HiveQL 中的“如果存在 t1 则更改表重命名为 t2”?【英文标题】:"ALTER TABLE IF EXISTS t1 RENAME TO t2" in HiveQL? 【发布时间】:2017-01-26 18:44:05 【问题描述】:如果 Hive 表存在,我想重命名它,如果不存在则不生成错误。
我需要类似的东西
ALTER TABLE IF EXISTS t1 重命名为 t2;
但这不会运行(“无法在 alter table 语句中识别 'if' 'exists' 'rename' 附近的输入”),我尝试过的变体也没有。这在文档 (https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-RenameTable) 中没有涉及,可能是因为这是不可能的。
有谁知道如何做到这一点,或解决方法(例如尝试/捕获,如果它存在于 Hive 中)?
我在 Hive 1.2 上。
【问题讨论】:
【参考方案1】:IF EXIST 子句目前在 Hive CLI 中不起作用。您可以编写类似下面的程序来进行条件检查。
公共类 HiveAlterRenameTo private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
public static void main(String[] args) 抛出 SQLException
// Register driver and create driver instance
Class.forName(driverName);
// get connection
Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", "");
// create statement
Statement stmt = con.createStatement();
// execute statement
Resultset res = stmt.executeQuery("SELECT count(*) FROM <Table_name> ;");
if (res > 0)
// execute statement
stmt.executeQuery("ALTER TABLE employee RENAME TO emp;");
System.out.println("Table Renamed Successfully");
else
System.out.println("Table Not exist");
con.close();
【讨论】:
以上是关于HiveQL 中的“如果存在 t1 则更改表重命名为 t2”?的主要内容,如果未能解决你的问题,请参考以下文章