2016-08-09 1 views
1

Я пытаюсь изменить существующий улей внешней таблицы разделитель из запятой , для ctrl+A характера с помощью Hive ALTER TABLE заявленияHive изменяющих свойств serde не работает

ALTER TABLE table_name SET SERDEPROPERTIES ('field.delim' = '\u0001'); 

После DDL я мог видеть изменения

show create table table_name 

Но когда я выбираю из Hive, значения все NULL (базовые файлы в HDFS изменены, чтобы иметь ctrl + A-разделитель).

Я также отремонтировал таблицу, используя msck.

Единственный способ увидеть данные - сбросить и воссоздать внешний стол, может ли кто-нибудь помочь мне понять причину.

Таблица Синтаксис:

CREATE EXTERNAL TABLE `table_name`(
    col1, 
    col2, 
    col3) 
PARTITIONED BY ( 
    `ing_year` int, 
    `ing_month` int, 
    `ing_day` int) 
ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY '\n' 
STORED AS INPUTFORMAT 
    'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 
LOCATION 
    'hdfs://location/' 
+0

Что вы подразумеваете под «Но когда я выбираю из ** HDFS ** значения, все NULL»? Разве вы не имеете в виду «Улей» или «Импала»? – cheseaux

+0

В HIVE таблица Alter меняет разделитель, но не может правильно выбрать значения. он возвращает null. –

+0

Это также помогло бы увидеть утверждение, которое вы использовали для создания таблицы. – cheseaux

ответ

1

ALTER TABLE команда на секционированной таблице изменяет параметры по умолчанию для будущего разделов.

Но не будет применяться к существующим разделам, если эта конкретная команда не поддерживает CASCADE вариант - но that's not the case для SET SERDEPROPERTIES; сравнить с column management, например

Так вы должны изменить каждый существующий раздел с такой командой

ALTER TABLE table_name PARTITION (ing_year=2016,ing_month=8,ing_day=31) 
SET SERDEPROPERTIES ('field.delim' = '\u0001'); 

Так что теперь пришло время для вас, чтобы запустить SHOW PARTITIONS, нанесите пару RegEx на выход для генерации списка команд, запускать эти команды и быть счастливыми после этого.

Примечание стороны: Я могу сказать вам, что это было действительно больно переименовать столбец перед CASCADE материал был окончательно реализован ...

+0

, но я получаю сообщение об ошибке, FAILED: Ошибка выполнения, код возврата 1 из org.apache.hadoop.hive.ql.exec.DDLTask. Невозможно изменить раздел. alter невозможно –

+0

Черт, еще одна функция Hive, которая не работает ... Обходное решение: поскольку это таблица EXTERNAL, вы можете безопасно DROP каждый раздел, а затем снова добавить его с тем же «местоположением» - и он наследует новую по умолчанию 'SerDeProperties' из родительской таблицы. –

+0

... но, как всегда, проверьте этот трюк на разделе, который содержит только одноразовые файлы данных. Как вы знаете, команды Hive DDL имеют целую сущность ошибок, и неожиданное разрушение данных может время от времени происходить. –

-1

Поместите эту команду для изменения SERDEPROPERTIES.

alter table airlinetestcsv 
SET SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'; 

 Смежные вопросы

  • Нет связанных вопросов^_^