Вставьте данные двух внешних таблиц Hive в новую внешнюю таблицу с дополнительным столбцом.

У меня есть 2 внешние таблицы кустов следующим образом. Я заполнил их данными из оракула, используя sqoop.

create external table transaction_usa
(
tran_id int,
acct_id int,
tran_date string,
amount double,
description string,
branch_code string,
tran_state string,
tran_city string,
speendby string,
tran_zip int
)
row format delimited
stored as textfile
location '/user/stg/bank_stg/tran_usa';

create external table transaction_canada
(
tran_id int,
acct_id int,
tran_date string,
amount double,
description string,
branch_code string,
tran_state string,
tran_city string,
speendby string,
tran_zip int
)
row format delimited
stored as textfile
location '/user/stg/bank_stg/tran_canada';

Теперь я хочу объединить данные из двух вышеприведенных таблиц, как они есть в 1 внешней таблице улья со всеми теми же полями, что и в приведенных выше 2 таблицах, но с 1 дополнительным столбцом, чтобы определить, какие данные взяты из какой таблицы. Новая внешняя таблица с дополнительным столбцом source_table. Новая внешняя таблица выглядит следующим образом.

create external table transaction_usa_canada
(
tran_id int,
acct_id int,
tran_date string,
amount double,
description string,
branch_code string,
tran_state string,
tran_city string,
speendby string,
tran_zip int,
source_table string
)
row format delimited
stored as textfile
location '/user/gds/bank_ds/tran_usa_canada';

как мне это сделать.?


person user2998990    schedule 18.05.2016    source источник


Ответы (3)


Вы делаете SELECT из каждой таблицы и выполняете UNION ALL операцию над этими результатами и, наконец, вставляете результат в свою третью таблицу.

Ниже приведен окончательный запрос улья:

INSERT INTO TABLE transaction_usa_canada
SELECT tran_id, acct_id, tran_date, amount, description, branch_code, tran_state, tran_city, speendby, tran_zip, 'transaction_usa' AS source_table FROM transaction_usa
UNION ALL
SELECT tran_id, acct_id, tran_date, amount, description, branch_code, tran_state, tran_city, speendby, tran_zip, 'transaction_canada' AS source_table FROM transaction_canada;

Надеюсь, это поможет вам!!!

person Farooque    schedule 18.05.2016
comment
Это сработало ... можете ли вы также обновить информацию о том, как я могу разделить данные с помощью (запятая) - person user2998990; 19.05.2016

Вы можете сделать это и с помощью manual partitioning.

CREATE TABLE transaction_new_table (
tran_id int,
acct_id int,
tran_date string,
amount double,
description string,
branch_code string,
tran_state string,
tran_city string,
speendby string,
tran_zip int
)
PARTITIONED BY (sourcetablename String)

Затем запустите команду ниже,

load data inpath 'hdfspath' into table transaction_new_table   partition(sourcetablename='1')
person shankarsh15    schedule 18.05.2016
comment
привет, Шанкар... спасибо... но мне нужно только объединить данные из 2 таблиц с последним и новым полем как source_table. Я использую вставку в столбцы выбора new_table из ext_table1, source_table_value. Но это дает мне ошибку - person user2998990; 18.05.2016
comment
Это в основном поможет вам в более быстром поиске данных. ну в таком случае вы и делаете Union All. - person shankarsh15; 18.05.2016

Вы можете использовать пункт INSERT INTO Hive

INSERT INTO TABLE table transaction_usa_canada 
SELECT tran_id, acct_id, tran_date, ...'transaction_usa' FROM transaction_usa;

INSERT INTO TABLE table transaction_usa_canada 
SELECT tran_id, acct_id, tran_date, ...'transaction_canada' FROM transaction_canada;
person ZeusNet    schedule 18.05.2016