配置单元-将select语句的结果作为多条记录插入配置单元表,而不覆盖现有内容

68de4m5k  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(373)

我有一个来自以下命令的表:

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

我现在怀疑的是insert查询中的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

在执行insert查询之后,我的表的内容是否如下所示?

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
6rvt4ljy

6rvt4ljy1#

摘自Hive语言手册,
insert-into将附加到表或分区,保持现有数据完整。

INSERT INTO TABLE ...

不会覆盖表中已存在的任何数据。这个 INSERT 查询将运行mapreduce(基于引擎类型)作业,该作业将新生成的文件写入表位置,而不删除现有文件。

相关问题