Добавление столбца на уровне раздела в улье - PullRequest
0 голосов
/ 27 сентября 2018

Я новичок в кусте. У нас было требование добавить столбцы в существующую таблицу улья.Я сделал это с помощью команды ниже.alter table tableName добавить столбцы (тип данных colName) каскад;

Но в документации по кустам у нас есть команда alter для добавления столбцов на уровне раздела.Я попробовал приведенные ниже команды.

hive> SET hive.exec.dynamic.partition = true;
hive> alter table test_alter_col partition(c=1) add columns (d1 int);
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Duplicate column name: d1
hive> select d1 from test_alter_col where c=1;
FAILED: SemanticException [Error 10004]: Line 1:7 Invalid table alias or column reference 'd1': (possible column names are: a1, b1, d, c)
hive> alter table test_alter_col partition(c=1) add columns (d2 int);
OK
Time taken: 0.178 seconds
hive> select d2 from test_alter_col where c=1;
FAILED: SemanticException [Error 10004]: Line 1:7 Invalid table alias or column reference 'd2': (possible column names are: a1, b1, d, c)
hive>

Что именно делает вышеуказанная команда, и есть ли варианты использования команды alter на уровне раздела.

Edit 1 -

Я тоже пробовал приведенные ниже команды, но до сих пор не могу ни запросить вновь добавленный столбец, ни вставить данные.

create table test_partn (a int, b int, c int) partitioned by (d int) row format delimited fields terminated by '\t' stored as textfile;

insert into table test_partn partition(d) values (1, 11, 111, 1111), (2, 22, 222, 2222), (3, 33, 333, 3333);

SET hive.exec.dynamic.partition = true;

alter table test_partn partition(d=1111) add columns (e int);
insert into test_partn partition(d=1111) values (1, 12, 13, 14);
FAILED: SemanticException [Error 10044]: Line 1:12 Cannot insert into target table because column number/types are different '1111': Table insclause-0 has 3 columns, but query has 4 columns.

alter table test_partn partition(d=3333) add columns (e int) restrict;
insert into test_partn partition(d=3333) values (1, 12, 13, 14);

Спасибо, Виджай

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Я думаю, что добавление столбцов на уровне раздела только добавит имена столбцов на уровне метаданных.

Я попытался с запросом - describe extended tablename partition (keycol=value)

Ниже приведены результаты.

hive> describe extended test_partn partition(d=1111);
OK
a                       int
b                       int
c                       int
e                       int
d                       int

# Partition Information
# col_name              data_type               comment

d                       int

Detailed Partition Information  Partition(values:[1111], dbName:test, tableName:test_partn, createTime:1539261860, lastAccessTime:0, sd:StorageDescriptor(cols:[FieldSchema(name:a, type:int, comment:null), FieldSchema(name:b, type:int, comment:null), FieldSchema(name:c, type:int, comment:null), FieldSchema(name:e, type:int, comment:null), FieldSchema(name:d, type:int, comment:null)], location:maprfs:/user/hive/warehouse/test.db/test_partn/d=1111, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters:{serialization.format=     , field.delim=
Time taken: 0.139 seconds, Fetched: 12 row(s)
hive>

Я вижу только что добавленные столбцы только для этого раздела

0 голосов
/ 27 сентября 2018

hive> изменить таблицу test_alter_col раздел (c = 1) добавить столбцы (d1 int);СБОЙ: Ошибка выполнения, код возврата 1 из org.apache.hadoop.hive.ql.exec.DDLTask.Повторяющееся имя столбца: d1 h

Что касается вашей первой команды, то, похоже, в вашей таблице кустов уже есть повторяющееся имя столбца.Вам нужно использовать другой столбец.

В качестве альтернативы, если вы хотите добавить столбец к уже разбитой таблице кустов, вы можете использовать следующую команду:

ALTER TABLE <table name> ADD columns (column1 string) CASCADE;

Вышеприведенное должно помочь вам добавить столбец в уже разбитую таблицу.Поймайте здесь ключевое слово CASCADE, которое будет каскадно вносить изменения во все разделы в кусте.

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...