Я новичок в Apache Hive. Во время работы с разделом внешней таблицы, если я добавляю новый раздел непосредственно в HDFS, новый раздел не добавляется после запуска таблицы MSCK REPAIR. Ниже приведены коды, которые я пробовал,
- создание внешней таблицы
hive> create external table factory(name string, empid int, age int) partitioned by(region string)
> row format delimited fields terminated by ',';
--Подробная информация о таблице
Location: hdfs://localhost.localdomain:8020/user/hive/warehouse/factory
Table Type: EXTERNAL_TABLE
Table Parameters:
EXTERNAL TRUE
transient_lastDdlTime 1438579844
- создание каталога в HDFS для загрузки данных для фабрики таблиц
[cloudera@localhost ~]$ hadoop fs -mkdir 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory1'
[cloudera@localhost ~]$ hadoop fs -mkdir 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory2'
- Табличные данные
cat factory1.txt
emp1,500,40
emp2,501,45
emp3,502,50
cat factory2.txt
EMP10,200,25
EMP11,201,27
EMP12,202,30
- копирование с локального в HDFS
[cloudera@localhost ~]$ hadoop fs -copyFromLocal '/home/cloudera/factory1.txt' 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory1'
[cloudera@localhost ~]$ hadoop fs -copyFromLocal '/home/cloudera/factory2.txt' 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory2'
- Изменение таблицы для обновления в хранилище метаданных
hive> alter table factory add partition(region='southregion') location '/user/hive/testing/testing1/factory2';
hive> alter table factory add partition(region='northregion') location '/user/hive/testing/testing1/factory1';
hive> select * from factory;
OK
emp1 500 40 northregion
emp2 501 45 northregion
emp3 502 50 northregion
EMP10 200 25 southregion
EMP11 201 27 southregion
EMP12 202 30 southregion
Теперь я создал новый файл factory3.txt, чтобы добавить его в качестве нового раздела для фабрики таблиц.
cat factory3.txt
user1,100,25
user2,101,27
user3,102,30
- создание пути и копирование данных таблицы
[cloudera@localhost ~]$ hadoop fs -mkdir 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory2'
[cloudera@localhost ~]$ hadoop fs -copyFromLocal '/home/cloudera/factory3.txt' 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory3'
теперь я выполнил приведенный ниже запрос, чтобы обновить хранилище метаданных для нового добавленного раздела
MSCK REPAIR TABLE factory;
Теперь таблица не отображает содержимое нового раздела файла factory3. Могу ли я узнать, где я делаю ошибку при добавлении раздела для фабрики таблиц?
тогда как, если я запускаю команду alter, она показывает новые данные раздела.
hive> alter table factory add partition(region='eastregion') location '/user/hive/testing/testing1/factory3';
Могу ли я узнать, почему команда MSCK REPAIR TABLE не работает?