Объедините две разделенные таблицы в одну таблицу, но в два разных раздела - PullRequest
1 голос
/ 21 июня 2019

Я новичок в Улье, и буду признателен, если кто-то сможет помочь с запросом на улей, с которым я имею дело.

Есть две таблицы A и B с точно такой же схемой, но разными данными с 4 разделами. Мне нужно объединить эти две таблицы в одну таблицу с (4 + 1 = 5) разделами. Добавленные разделы сообщают, из каких таблиц поступают данные. Например, скажем, новый раздел называется «источник». Если данные поступают из таблицы A, источник будет равен «from_A», а если данные поступают из таблицы B, источник будет равен «from_B».

hive> desc A;
OK
col1 string,
col2 string,
DD   string,                                    
EE   string,                                    
FF   string,                                    
GG   string 

# Partition Information      
# col_name              data_type               

DD              string                                      
EE              string                                      
FF                  string                                      
GG              string 

и

hive> desc B;
OK
col1 string,
col2 string,
DD   string,                                    
EE   string,                                    
FF   string,                                    
GG   string

# Partition Information      
# col_name              data_type               comment             

DD              string                                      
EE              string                                      
FF                  string                                      
GG              string

1 Ответ

1 голос
/ 21 июня 2019

Создать новую секционированную таблицу

Create table C (
col1 string,
col2 string
)
partitioned by (
source string,
DD   string,                                    
EE   string,                                    
FF   string,                                    
GG   string
);

Затем загрузить данные в новую таблицу:

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

insert overwrite table C partition(source,DD,EE,FF,GG)
select col1, col2, 
       --partitions
      'from_A' source, DD, EE, FF, GG 
  from A
distribute by DD, EE, FF, GG;

И параллельно загружать данные из таблицы B:

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

insert overwrite table C partition(source,DD,EE,FF,GG)
select col1, col2, 
      --partitions
      'from_B' source, DD, EE, FF, GG 
 from B
distribute by DD, EE, FF, GG;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...