9

テーブルに新しい列を追加したいのですが、その列がまだ存在しない場合に限ります。

これは、列が存在しない場合に機能します。

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

必要なのは、この列が存在するかどうかに関係なくクエリを実行できるように、アイテムを強力に実行できるものです。

4

2 に答える 2

6

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

2 番目のクエリでエラーが発生しても、ハイブはすべてのクエリを実行します。

于 2015-10-06T10:33:25.500 に答える
1

それを行う直接的な方法はありません。私は単一のクエリを意味します。他に 2 つの方法があります。

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.

それが役に立てば幸い...!!!

于 2014-08-14T20:44:13.957 に答える