Как объединить небольшие файлы из существующих разделов в кусте?

Как объединить существующие небольшие файлы раздела в один большой файл в одном разделе.

Например, у меня есть таблица user1, она содержит столбцы fname, lname и раздел столбца day.

Я создал таблицу с помощью сценария ниже

CREATE TABLE user1(строка fname, строка lname) с разделением на (день int);

После вставки данных в таблицу разделов это будет выглядеть ниже.

 fname  lname  day
.....................
AA      AAA   20170201     ....>partition 20170201
BB      BBB   20170201
...................
CC      CCC   20170202    ......>partition 20170202
DD      DDD   20170202
....................
EE      EEE   20170203    .......>partition 20170203
FF      FFF   20170203
.......................
GG      GGG   20170204    ........>partition 20170204         
HH      HHH   20170204
.......................

Когда я выполняю запрос выбора с помощью столбца раздела, т.е. день =20170201.

select * from user1 where day=20170201;

Это даст результат, как показано ниже

AA      AAA   20170201
BB      BBB   20170201

основываясь на приведенной выше таблице, я хочу объединить все маленькие файлы, то есть, день = 20170201 и день =20170202, и день =20170203, в день раздела =20170203 в моей таблице разделов (т. е. USer1).ie Это должно выглядеть так, как показано ниже.

fname  lname  day
.....................
AA      AAA   20170201
BB      BBB   20170201
CC      CCC   20170202    
DD      DDD   20170202
E       EEE   20170203    .......>partition 20170203
FF      FFF   20170203
.......................
GG      GGG   20170204    ........>partition 20170204         
HH      HHH   20170204
.......................

Можете ли вы предложить по этому вопросу, как я могу добиться этого?

Заранее спасибо.

1 ответ

  1. Создать новую таблицу, разделенную новым полем partition_day:
CREATE TABLE user_new(fname string,lname string, day int) parittioned By (partition_day int);
  1. Загрузите данные в новую таблицу (задайте условия для новых разделов в case)
   insert overwrite table user_new partition (partition_day)
    select fname,lname, day,
           case when day <= 20170203 then 20170203
                when day >  20170203 then 20170204
           end as partition_day
      from user1 ;
Другие вопросы по тегам