我想在表中添加一个新列,但前提是该列尚不存在。
如果列不存在,则此方法有效:
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
我需要的是可以迭代执行的东西,这样我就可以运行我的查询,无论该列是否存在。
答案 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.
希望它有所帮助...... !!!