Можно ли изменить метаданные раздела в HIVE? - PullRequest
3 голосов
/ 09 октября 2019

Это расширение предыдущего вопроса, который я задал: Как сравнить два столбца с разными группами типов данных

Мы изучаем идею изменения метаданных в таблице в противоположностьвыполнить операцию CAST над данными в инструкциях SELECT. Изменение метаданных в метастазах MySQL достаточно просто. Но возможно ли применить это изменение метаданных к разделам (они выполняются ежедневно)? В противном случае мы можем столкнуться с текущими и будущими данными, имеющими тип BIGINT, в то время как история имеет тип STRING.

Вопрос: Можно ли изменить метаданные раздела в HIVE? Если да, то как?

Ответы [ 3 ]

4 голосов
/ 09 октября 2019

Вы можете изменить тип столбца раздела, используя этот оператор:

alter table {table_name} partition column ({column_name} {column_type});

Также вы можете заново создать определение таблицы и изменить все типы столбцов, используя следующие шаги:

  1. Сделайте свою таблицу внешней, чтобы ее можно было отбрасывать без удаления данных

    ALTER TABLE abc SET TBLPROPERTIES('EXTERNAL'='TRUE');

  2. Удаление таблицы (будут удалены только метаданные).

  3. Создание таблицы EXTERNAL с использованием обновленного DDL с измененными типами и с тем же LOCATION.
  4. восстановление разделов:

    MSCK [REPAIR] TABLE tablename;

Эквивалентная команда в версии Hive для Amazon Elastic MapReduce (EMR):

ALTER TABLE tablename RECOVER PARTITIONS;

Это добавит метаданные разделов Hive. См. Руководство здесь: ВОССТАНОВЛЕНИЕ РАЗДЕЛЕЙ

И, наконец, при необходимости вы можете снова сделать таблицу MANAGED:

ALTER TABLE tablename SET TBLPROPERTIES('EXTERNAL'='FALSE');

Примечание. Все вышеперечисленные команды должны выполняться в HUE, а не в MySQL.

2 голосов
/ 14 октября 2019

После того, как я изменил схему Avro (avsc) (см. Ниже), я смог «исправить» (уже существующий) раздел, выполнив «ДОБАВИТЬ РАЗДЕЛ» на этом сайте:

http://hadooptutorial.info/partitioning-in-hive/

ALTER TABLE partitioned_user ADD PARTITION (country = 'US', state = 'CA')
LOCATION '/hive/external/tables/user/country=us/state=ca'

Я изменил схему avro, выполнив sqoop из MySQL (измените поле в MySQL или CAST() в SELECT) - это изменило файл avsc.

Я сделал несколько вещей, прежде чем сделать ADD PARTITION - я сделал DROP/CREATE/MSCK TABLE - поэтому я не уверен, нужны они или нет (но они не исправили раздел).

Простой.

2 голосов
/ 09 октября 2019

Вы не можете изменить столбец раздела в Hive Infact Hive не поддерживает изменение столбцов раздела

См .: Изменение типа столбца раздела в Hive

Вы можете подуматьтак - Hive сохраняет данные, создавая папку в формате hdf со значениями столбца раздела. - Так как если вы пытаетесь изменить раздел куста, это означает, что вы пытаетесь изменить всю структуру каталогов и данные таблицы кустов, что невозможно. если вы разбили на год, вот так выглядит структура каталогов

tab1/clientdata/2009/file2
tab1/clientdata/2010/file3

Если вы хотите изменить столбец раздела, вы можете выполнить следующие шаги:

  1. Создать еще один кусттаблица с необходимыми изменениями в столбце раздела

    Создать таблицу new_table (A int, B String .....)

  2. Загрузить данные из предыдущей таблицы

    Вставьте в раздел new_table (B) выберите A, B из таблицы Prev_table

...