【问题标题】:Hive S3 data insert keeps overwriting the dataHive S3 数据插入不断覆盖数据
【发布时间】:2013-04-12 06:09:17
【问题描述】:

这是我的场景:

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

    创建外部表 new_data (col1 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION 's3://some-bucket/folder'

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

    创建外部表 data_already_imported(col1 字符串) 以“\t”结尾的行格式分隔字段 LOCATION 's3://some-bucket/another-folder'

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

    创建表差异为 选择 * 从 ( SELECT n.* FROM new_data n 左外连接 data_already_imported old ON n.col1 = old.col1 old.col1 为空 ) 我;

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

INSERT INTO TABLE data_already_imported 
SELECT * FROM difference; 

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

【问题讨论】:

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


    【解决方案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 );
    

    【讨论】:

    • 感谢拉森的回复。这就是我的想法,但只是想检查是否有办法追加记录。无论如何,接受答案。谢谢!
    • 实际上可以通过手动将文件添加到包含表的 HDFS 目录来追加记录(可能类似于apps/hive/warehouse/table_name)。您必须小心执行此操作,尤其是在涉及分区的情况下,否则您可能会严重弄乱您的表。除非您绝对需要性能,否则请使用 larsen 的解决方案。
    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2019-01-02
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    相关资源
    最近更新 更多