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

Mat*_*ttD 8 hadoop hive hdinsight

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

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

ALTER TABLE MyTable ADD COLUMNS (mycolumn string);
Run Code Online (Sandbox Code Playgroud)

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

Column 'mycolumn' exists
Run Code Online (Sandbox Code Playgroud)

当我尝试使用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
Run Code Online (Sandbox Code Playgroud)

我需要的是可以迭代执行的东西,所以我可以运行我的查询是否存在此列.

Jak*_*kul 5

您可以通过设置hive.cli.errors.ignore标志来部分解决它。在这种情况下,即使在途中的查询失败时,配置单元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);
Run Code Online (Sandbox Code Playgroud)

即使第二个查询中有错误,hive也会执行所有查询。