Hive删除重复记录

时间:2016-05-07 06:39:46

标签: hadoop hive

在配置单元中,如何删除重复记录?以下是我的情况,

首先,我将数据从product表加载到products_rcfileformat。产品表上有25行记录

FROM products INSERT OVERWRITE TABLE products_rcfileformat         
SELECT *;

其次,我将数据从product表加载到products_rcfileformat。产品表上有25行记录。但这次我没有使用OVERWRITE子句

FROM products INSERT INTO TABLE products_rcfileformat         
SELECT *;

当我查询数据时,它给我总行数= 50,这是正确的

enter image description here

从hdfs检查,似乎hdfs制作文件xxx_copy_1的另一个副本而不是附加到000000_0

enter image description here

现在我要删除那些从xxx_copy_1读取的记录。如何在hive命令中实现此目的?如果我没弄错,我可以使用hdfs dfs -rm命令删除xxx_copy_1文件,然后重新运行insert overwrite命令。但是我想知道是否可以通过使用像delete命令这样的hive命令来完成它?

2 个答案:

答案 0 :(得分:1)

对数据进行分区,使得要删除的行(使用窗口函数row_number)位于分区中。然后,您可以删除分区而不会影响表的其余部分。这是一个相当可持续的模型,即使您的数据集变得非常大。

有关分区的详细信息。

www.tutorialspoint.com/hive/hive_partitioning.htm

答案 1 :(得分:0)

  

从hdfs检查,似乎hdfs制作文件xxx_copy_1的另一个副本   而不是追加到000000_0

原因是hdfs是只读的,不可编辑的,因为仍然在hdfs中的hive仓库文件(或任何可能的位置),因此它必须创建第二个文件。

  

现在我要删除那些从xxx_copy_1读取的记录。怎么能   我在hive命令中实现了这个目标吗?

请查看此帖子 - Removing DUPLICATE rows in hive based on columns

如果您对那里的答案感到满意,请告诉我。我有另一种方法,它删除重复的条目,但可能不是你想要的方式。