在Hive中,如果该列不存在,我该如何添加列?

时间:2014-08-13 17:57:28

标签: hadoop hive hdinsight

我想在表中添加一个新列,但前提是该列尚不存在。

如果列不存在,则此方法有效:

ALTER TABLE MyTable ADD COLUMNS (mycolumn string);

但是当我第二次执行它时,我收到错误。

Column 'mycolumn' exists

当我尝试使用CREATE TABLE和ADD PARTITION支持的“IF NOT EXISTS”语法时,出现语法错误:

ALTER TABLE MyTable ADD IF NOT EXISTS COLUMNS (mycolumn string);
FAILED: ParseException line 3:42 required (...)+ loop did not match anything at input 'COLUMNS' in add partition statement

我需要的是可以迭代执行的东西,这样我就可以运行我的查询,无论该列是否存在。

2 个答案:

答案 0 :(得分:4)

您可以通过设置hive.cli.errors.ignore标记来部分解决问题。在这种情况下,即使在路上的查询失败时,hive CLI也会强制执行进一步的查询。

在这个例子中:

SET hive.cli.errors.ignore=true;
ALTER TABLE MyTable ADD COLUMNS (mycolumn string);
ALTER TABLE MyTable ADD COLUMNS (mycolumn string);
ALTER TABLE MyTable ADD COLUMNS (mycolumn2 string);

hive将执行所有查询,即使在第二个查询中出现错误。

答案 1 :(得分:1)

没有直接的方法可以做到这一点。我的意思是通过一个查询。 还有另外两种方式:

1。)使用JDBC:

1.1) Do describe on the table name.
1.2) You will get a list of columns in result set.
1.3) Check if your columns exists or not by iterating through the result set.

2.。)使用hive Metastore客户端:

2.1) Create a object of HiveMetastoreClient
2.2) HiveMetastoreClient.getFields(<>db_name, <table_name>).get(index).getName() will give you the column name.
2.3) Check if your column exists of not by comparing the list.

希望它有所帮助...... !!!