Вы можете использовать функцию динамического разделения в Hive , чтобы автоматически заполнять разделы на основе входящих данных. Ниже приведен пример автоматического разделения необработанных данных на основе информации country
.
Создание файла необработанных данных (country1.csv), который содержит данные для нескольких стран
1,USA
2,Canada
3,USA
4,Brazil
5,Brazil
6,USA
7,Canada
Загрузить этот файл в папку в HDFS
hadoop fs -mkdir /example_hive
hadoop fs -mkdir /example_hive/country
hadoop fs -put country1.csv /example_hive/country
Создание однораздельной таблицы Hive поверх данных
CREATE EXTERNAL TABLE country
(
id int,
country string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
LOCATION 'hdfs:///example_hive/country';
Убедитесь, что таблица Hive создана правильно
hive (default)> select * from country;
1 USA
2 Canada
3 USA
4 Brazil
5 Brazil
6 USA
7 Canada
Создание многораздельной таблицы Hive с разделением страны на страны
hive (default)> CREATE TABLE country_par
(
id int
)
PARTITIONED BY (country string);
Включить динамическое разбиение
hive (default)> SET hive.exec.dynamic.partition = true;
hive (default)> SET hive.exec.dynamic.partition.mode = nonstrict;
Заполните секционированную таблицу, Hive автоматически поместит данные в правильный раздел страны
hive (default)> INSERT INTO TABLE country_par
PARTITION(country)
SELECT id,country FROM country;
Убедитесь, что разделы были созданы и правильно заполнены
hive (default)> show partitions country_par;
country=Brazil
country=Canada
country=USA
hive (default)> select * from country_par where country='Brazil';
4 Brazil
5 Brazil
hive (default)> select * from country_par where country='USA';
1 USA
3 USA
6 USA
hive (default)> select * from country_par where country='Canada';
2 Canada
7 Canada
hive (default)> select country,count(*) from country_par group by country;
Brazil 2
Canada 2
USA 3