以下是我的情景:
我从S3存储桶中的一个文件夹加载数据。我们称这个桶为'new_data'。
CREATE EXTERNAL TABLE new_data (col1字符串)由'\ t'终止的行格式删除字段 LOCATION的3:// some-bucket / folder'
接下来,我从S3中的另一个文件夹加载数据,让我们称之为'data_already_imported'。
CREATE EXTERNAL TABLE data_already_imported(col1 string) 由'\ t'终止的行格式删除字段 LOCATION的3:// some-bucket / another-folder'
然后,我发现new_data和data_already_imported之间的区别
CREATE TABLE差异AS SELECT * FROM ( SELECT n。* FROM new_data n LEFT OUTER JOIN data_already_imported old ON n.col1 = old.col1 WHERE old.col1是NULL )i;
现在,我想将这个'差异'移到data_already_imported文件夹中。目前我有
INSERT INTO TABLE data_already_imported
SELECT * FROM difference;
问题是这会覆盖data_already_imported中已存在的数据。注意:我也尝试过使用INSERT OVERWRITE
。请问有人请指出我在这里做错了什么?
答案 0 :(得分:1)
在Hive中,没有将记录附加到已填充的表中的事情。你必须创建另一个表(假设它将被称为new_data_already_imported
),然后执行以下操作:
INSERT OVERWRITE TABLE new_data_already_imported
SELECT * FROM (
SELECT * FROM data_already_imported UNION ALL
SELECT * FROM difference );