Вставить данные двух внешних таблиц 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';

Теперь я хочу объединить данные из двух таблиц выше, так как они находятся в одной внешней таблице ульев со всеми теми же полями, что и в двух предыдущих таблицах, но с одним дополнительным столбцом, чтобы определить, какие данные из какой таблицы. Новая внешняя таблица с дополнительным столбцом в виде 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';

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

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;

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

Вы можете использовать пункт 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;

Вы можете очень хорошо сделать это, 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')
Другие вопросы по тегам