HIVE - вставить результат оператора select в виде нескольких записей в таблицу улья, не перезаписывая существующее содержимое - PullRequest
1 голос
/ 14 апреля 2020

У меня есть таблица из следующей команды:

CREATE TABLE treatment_costs AS SELECT * FROM 
(SELECT r.patient_id, r.transaction_date, r.paid_transaction_amount, o.dob, o.department_name, o.reason_of_visit FROM ReceiptTransactions r
LEFT OUTER JOIN OpdPatientQ o ON (r.patient_id = o.patient_id)
);

Теперь я хочу вставить все записи, которые вставлены сегодня (в данный день) в приведенную выше таблицу. Для этого я написал:

INSERT INTO TABLE treatment_costs SELECT * FROM
(SELECT r.patient_id, r.transaction_date, r.paid_transaction_amount, o.dob, o.department_name, o.reason_of_visit FROM ReceiptTransactions r WHERE timestamp_column = today_date
LEFT OUTER JOIN OpdPatientQ o ON (r.patient_id = o.patient_id)
);

это правильный способ вставить несколько запросов в таблицу?

РЕДАКТИРОВАТЬ 1: Например, содержимое моей таблицы treatment_costs эти строки:

patient_id, transaction_date, paid_transaction_amount, dob, department_name, reason_of_visit
001 01/01/2014 30000 01/01/1985 Cardiology reason_1
002 01/01/2014 35000 01/01/1975 Cardiology reason_2
003 02/01/2014 40000 01/01/1965 Oncology   reason_3
004 02/01/2014 30000 01/01/1985 Cardiology reason_4
005 02/01/2014 20000 01/01/1975 Gynecology reason_5

, и теперь я сомневаюсь, что в моем запросе вставки есть оператор select, например:

SELECT * FROM
(SELECT r.patient_id, r.transaction_date, r.paid_transaction_amount, o.dob, o.department_name, o.reason_of_visit FROM ReceiptTransactions r WHERE timestamp_column = today_date
LEFT OUTER JOIN OpdPatientQ o ON (r.patient_id = o.patient_id)
);

, например, дает следующий результат:

patient_id, transaction_date, paid_transaction_amount, dob, department_name, reason_of_visit
011 01/01/2015 30000 01/01/1986 Cardiology reason_11
012 01/01/2015 35000 01/01/1976 Cardiology reason_21
013 02/01/2015 40000 01/01/1966 Oncology   reason_31
014 02/01/2015 30000 01/01/1986 Cardiology reason_41
015 02/01/2015 20000 01/01/1976 Gynecology reason_51

И будет ли содержимое моей таблицы после выполнения запроса вставки таким, как показано ниже?

patient_id, transaction_date, paid_transaction_amount, dob, department_name, reason_of_visit
001 01/01/2014 30000 01/01/1985 Cardiology reason_1
002 01/01/2014 35000 01/01/1975 Cardiology reason_2
003 02/01/2014 40000 01/01/1965 Oncology   reason_3
004 02/01/2014 30000 01/01/1985 Cardiology reason_4
005 02/01/2014 20000 01/01/1975 Gynecology reason_5
011 01/01/2015 30000 01/01/1986 Cardiology reason_11
012 01/01/2015 35000 01/01/1976 Cardiology reason_21
013 02/01/2015 40000 01/01/1966 Oncology   reason_31
014 02/01/2015 30000 01/01/1986 Cardiology reason_41
015 02/01/2015 20000 01/01/1976 Gynecology reason_51

1 Ответ

2 голосов
/ 14 апреля 2020

Выдержка из Hive Language Manual ,

INSERT INTO добавит таблицу или раздел, сохраняя существующие данные в целости.

INSERT INTO TABLE ...

не будет перезаписывать любые данные, которые уже присутствуют в таблице. В запросе INSERT вы запустите задание MapReduce (в зависимости от типа движка), которое запишет вновь созданные файлы в расположение таблицы, не удаляя существующие.

...