在hive中,如何仅在列不存在时添加该列?

q5iwbnjs  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(740)

我想向表中添加一个新列,但前提是该列不存在。
如果列不存在,则此操作有效:

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

我需要的是可以逐项执行的东西,这样我就可以运行我的查询,不管这个列是否存在。

2wnc66cl

2wnc66cl1#

通过设置 hive.cli.errors.ignore 旗帜。在这种情况下,hivecli将强制执行进一步的查询,即使查询失败。
在本例中:

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);

配置单元将执行所有查询,即使第二个查询中有错误。

jfewjypa

jfewjypa2#

没有直接的方法。我是说通过一个查询。还有两种方法:
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.)使用配置单元元存储客户端:

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.

希望对你有帮助。。。!!!

相关问题