Невозможно вставить данные в секционированную таблицу из-за потери точности

Я создал внешнее разделение таблицы на два столбца. Два столбца - «страна» и «штат» хранятся как SEQUENCEFILE.

Теперь я пытаюсь загрузить данные в таблицу с помощью следующей команды в Impala, запущенной через редактор Hue -

load data inpath '/usr/temp/input.txt' 
into table partitioned_user
partition (country = 'US', state = 'CA');

Я получаю следующую ошибку -

AnalysisException: значение ключа раздела может привести к потере точности. Потребуется преобразовать "США" в "VARCHAR (64)" для столбца раздела: страна

Что я делаю неправильно? Таблица, которую я вставляю, имеет такие столбцы, как и все они имеют тип VARCHAR (64) - first_name, last_name, country, state.

Файл input.txt содержит данные только для первых двух столбцов. Где я ошибаюсь?


person VKarthik    schedule 19.07.2018    source источник
comment
1. Hive / Impala используют общий String, а поддержка Varchar(x) является поздним и косметическим дополнением 2. Ключи разделов управляются как метаданные (в Metastore DB + в именах каталогов HDFS), не хранятся в файлах данных, поэтому они используют другую кодовую базу и плохо поддерживают ничего, кроме простых String-with-alphanum-chars или Int 3. Impala и Hive имеют разную базу кода на разных языках, то, что работает в Hive, может не работать в Impala == ›используйте String для ключей разделения и попробуйте свои команды как в Hive, так и в Impala, чтобы увидеть, что работает.   -  person Samson Scharfrichter    schedule 19.07.2018


Ответы (1)


Impala не выполняет автоматическое преобразование из большего типа в меньший. Вы должны CAST() в VARCHAR(64) перед вставкой, чтобы избежать такого исключения в Impala.

partition (country = cast('US' as VARCHAR(64)), state = cast('CA' as VARCHAR(64)))

Или используйте вместо этого тип данных STRING в табличном DDL.

person leftjoin    schedule 19.07.2018
comment
Спасибо @leftjoin. Оно работает. Странно то, что я наложил гипс и попробовал, ничего не вышло. Я не знаю, как это было успешно выполнено сейчас. - person VKarthik; 20.07.2018