在配置单元中,如何删除重复记录?以下是我的情况,
首先,我将数据从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,这是正确的
从hdfs检查,似乎hdfs制作文件xxx_copy_1的另一个副本而不是附加到000000_0
现在我要删除那些从xxx_copy_1读取的记录。如何在hive命令中实现此目的?如果我没弄错,我可以使用hdfs dfs -rm命令删除xxx_copy_1文件,然后重新运行insert overwrite命令。但是我想知道是否可以通过使用像delete命令这样的hive命令来完成它?
答案 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。
如果您对那里的答案感到满意,请告诉我。我有另一种方法,它删除重复的条目,但可能不是你想要的方式。