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”?的主要内容,如果未能解决你的问题,请参考以下文章

CASE WHEN 在 HiveQL 中的条件

HIVEQL 中的 indexOf 相似函数

从 HiveQL 中的 url 字段解析和提取字段

MySQL 到 HiveQL 转换中的错误,包括 DATE_SUB 和 INTERVAL

从 hiveql 中的字符串中删除最后一个字符

将一年中的数字星期转换为 hiveql 中的日期 (yyyy-mm-dd)