我是hadoop&hive的新手。我想删除我的数据库中的某些行-在HiveHadoop上。我知道它不支持开箱即用,而且hadoop是一个只读文件系统。我很好奇实现这一目标的最佳方法是什么。如果有人曾经这样做过,他们能分享他们的经验/程序吗?谢谢!
o3imoua41#
INSERT OVERWRITE TABLE mytable SELECT * FROM mytable WHERE 1=0;
上面的查询首先删除数据文件,如下所示 OVERWRITE 选项在查询中指定。接下来它将执行 SELECT 要从表中读取记录,当条件失败时, SELECT 查询将获得零条记录并将零条记录插入表中。
OVERWRITE
SELECT
wkyowqbh2#
最好的方法是对数据进行分区,以便要删除的行位于一个分区中。然后可以删除分区而不影响表的其余部分。这是一个相当可持续的模型,即使您的数据集变得相当大。
qncylg1j3#
在大数据中真的没有删除。也就是说,如果表或分区不太大,可以覆盖它,或者像jamcon建议的那样将删除的内容隔离到特定的分区。对于不是太大的数据集,可以执行以下操作
INSERT OVERWRITE TABLE mytable SELECT * FROM mytable WHERE ID NOT IN ( 'delete1', 'delete2', 'delete3');
bksxznpy4#
或者您可以将其余的行(即要保留的行)插入到另一个表中,然后删除旧表。
4条答案
按热度按时间o3imoua41#
上面的查询首先删除数据文件,如下所示
OVERWRITE
选项在查询中指定。接下来它将执行SELECT
要从表中读取记录,当条件失败时,SELECT
查询将获得零条记录并将零条记录插入表中。wkyowqbh2#
最好的方法是对数据进行分区,以便要删除的行位于一个分区中。然后可以删除分区而不影响表的其余部分。这是一个相当可持续的模型,即使您的数据集变得相当大。
qncylg1j3#
在大数据中真的没有删除。也就是说,如果表或分区不太大,可以覆盖它,或者像jamcon建议的那样将删除的内容隔离到特定的分区。
对于不是太大的数据集,可以执行以下操作
bksxznpy4#
或者您可以将其余的行(即要保留的行)插入到另一个表中,然后删除旧表。