Как вставить / скопировать данные одного раздела в несколько разделов улья?

У меня есть данные day='2019-01-01' в моей таблице улья, я хочу скопировать те же данные на весь январь-2019 месяц. (т.е. в '2019-01-02', _3 _..._ 4_)

Я пытаюсь подписаться, но данные вставляются только в «2019-01-02», а не в «2019-01-03».

INSERT OVERWRITE TABLE db_t.students PARTITION(dt='2019-01-02', dt='2019-01-03')
SELECT id, name, marks FROM db_t.students WHERE dt='2019-01-01';

person praxnet    schedule 10.05.2019    source источник


Ответы (1)


Перекрестно объедините все свои данные с календарными датами для требуемого диапазона дат. Использовать динамическое разбиение:

set hivevar:start_date=2019-01-02; 
set hivevar:end_date=2019-01-31; 

set hive.exec.dynamic.partition=true; 
set hive.exec.dynamic.partition.mode=nonstrict;  

with date_range as 
(--this query generates date range
select date_add ('${hivevar:start_date}',s.i) as dt 
  from ( select posexplode(split(space(datediff('${hivevar:end_date}','${hivevar:start_date}')),' ')) as (i,x) ) s
)

INSERT OVERWRITE TABLE db_t.students PARTITION(dt)
SELECT id, name, marks, r.dt --partition column is the last one
  FROM db_t.students s 
       CROSS JOIN date_range r
 WHERE s.dt='2019-01-01'
DISTRIBUTE BY r.dt;

Еще одно возможное решение - скопировать данные раздела с помощью hadoop fs -cp или hadoop distcp (повторить для каждого раздела или использовать цикл в оболочке):

hadoop fs -cp '/usr/warehouse/students/dt=2019-01-01' '/usr/warehouse/students/dt=2019-01-02'

И еще одно решение с использованием UNION ALL:

    set hive.exec.dynamic.partition=true; 
    set hive.exec.dynamic.partition.mode=nonstrict;      

    INSERT OVERWRITE TABLE db_t.students PARTITION(dt)
    SELECT id, name, marks, '2019-01-02' as dt FROM db_t.students s WHERE s.dt='2019-01-01'
    UNION ALL
     SELECT id, name, marks, '2019-01-03' as dt FROM db_t.students s WHERE s.dt='2019-01-01'
    UNION ALL
     SELECT id, name, marks, '2019-01-04' as dt FROM db_t.students s WHERE s.dt='2019-01-01' 
    UNION ALL
    ... 
  ;
person leftjoin    schedule 10.05.2019
comment
Отличное объяснение с другим подходом. - person vikrant rana; 28.06.2019