从Hive表中删除源文件

时间:2013-06-14 06:21:28

标签: hive hdfs

当我将(csv)文件加载到配置单元表时,我可以在不覆盖的情况下加载,从而将新文件添加到表中。 在内部,文件只是复制到HDFS中的正确文件夹 (例如user / warehouse / dbname / tablName / datafile1.csv)。可能还会更新一些元数据。

在几次加载后,我想从表中删除特定文件的内容。

我确信我不能简单地删除该文件,因为还需要调整元数据。必须有某种内置功能。<​​/ p>

我该怎么做?

2 个答案:

答案 0 :(得分:0)

为什么你需要这个?我的意思是Hive被开发为一个仓库,你可以放置很多n个大量的数据而不是偶尔删除数据。这样的需求似乎是一个思维不周的架构或Hive的使用不当,至少对我而言。

如果您确实有这些需求,为什么不创建分区表?如果您需要删除某些特定数据,只需使用TRUNCATEALTER删除该特定分区。

TRUNCATE TABLE table_name [PARTITION partition_spec];

ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec, PARTITION partition_spec,...

答案 1 :(得分:0)

如果需要这个功能不止一次,你可以使用MapR的发行版,同时允许这种操作没有问题(甚至通过NFS)。否则,如果你没有分区,我认为你必须使用CTAS过滤掉坏文件中的数据来创建新表,或者只需将好文件复制回带有“hadoop fs -copyToLocal”的操作系统并将它们移回hdfs进入新表