Hive S3数据插入保持覆盖数据

时间:2013-04-12 06:09:17

标签: insert amazon-web-services amazon-s3 amazon hive

以下是我的情景:

  1. 我从S3存储桶中的一个文件夹加载数据。我们称这个桶为'new_data'。

    CREATE EXTERNAL TABLE new_data (col1字符串)由'\ t'终止的行格式删除字段 LOCATION的3:// some-bucket / folder'

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

    CREATE EXTERNAL TABLE data_already_imported(col1 string) 由'\ t'终止的行格式删除字段 LOCATION的3:// some-bucket / another-folder'

  3. 然后,我发现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;

  4. 现在,我想将这个'差异'移到data_already_imported文件夹中。目前我有

    INSERT INTO TABLE data_already_imported 
    SELECT * FROM difference; 
    

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

1 个答案:

答案 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 );