Как создать секционированную таблицу кустов в динамических каталогах hdfs - PullRequest
1 голос
/ 25 октября 2019

У меня возникают трудности при получении куста для обнаружения разделов, созданных в HDFS

Вот структура каталогов в HDFS

warehouse/database/table_name/A
warehouse/database/table_name/B
warehouse/database/table_name/C
warehouse/database/table_name/D

A, B, C, D являются значениями изстолбец type

, когда я создаю таблицу кустов с использованием следующего синтаксиса

CREATE EXTERNAL TABLE IF NOT EXISTS 
table_name(`name` string, `description` string) 
PARTITIONED BY (`type` string) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' 
LOCATION 'hdfs:///tmp/warehouse/database/table_name'

Я не вижу записей при запросе к таблице.

Но когдаЯ создаю каталоги в HDFS, как показано ниже:

warehouse/database/table_name/type=A
warehouse/database/table_name/type=B
warehouse/database/table_name/type=C
warehouse/database/table_name/type=D

Он работает и обнаруживает разделы, когда я проверяю, используя show partitions table_name

Есть ли в кусте какая-то конфигурация, позволяющая определять динамические каталоги как разделы?

1 Ответ

1 голос
/ 26 октября 2019

Создание внешней таблицы поверх некоторого каталога недостаточно, необходимо также смонтировать разделы. Обнаружение разделов добавлена ​​функция в Hive 4.0.0. Используйте MSCK REPAIR TABLE для более ранних версий:

MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];

или его эквивалент по EMR:

ALTER TABLE table_name RECOVER PARTITIONS;

И при создании динамических разделов с использованием insert overwrite, разделметаданные создаются автоматически, а папки разделов имеют вид key=value.

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