0

这是我的场景:

  1. 我从 S3 存储桶中的一个文件夹加载数据。让我们将此存储桶称为“new_data”。

    CREATE EXTERNAL TABLE new_data (col1 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION 's3://some-bucket/folder'

  2. 接下来,我从 S3 中的另一个文件夹加载数据,我们称之为“data_already_imported”。

    CREATE EXTERNAL TABLE data_already_imported (col1 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION 's3://some-bucket/another-folder'

  3. 然后,我发现 new_data 和 data_already_imported 之间的区别

    创建表差异为 SELECT * FROM ( SELECT n.* FROM new_data n LEFT OUTER JOIN data_already_imported old ON n.col1 = old.col1 WHERE old.col1 IS NULL ) i;

现在,我想将此“差异”移动到 data_already_imported 文件夹中。目前我有

INSERT INTO TABLE data_already_imported 
SELECT * FROM difference; 

问题是这会覆盖 data_already_imported 中已经存在的数据。注意:我也试过了INSERT OVERWRITE。有人可以指出我在这里做错了什么吗?

4

1 回答 1

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 );
于 2013-04-12T08:59:00.470 回答