我正在尝试删除一个表并在Hive中重新创建它。删除表后,如果我在表上运行select查询,它会在删除之前显示表中的旧行。当表已经被删除时,这怎么可能?为什么即使在删除表并重新创建表之后它仍会保留行?
extension UIAlertController {
func createSettingsAlertController(title: String, message: String) {
let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
let cancelAction = UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel, handler: nil)
let settingsAction = UIAlertAction(title: NSLocalizedString("Settings", comment: ""), style: .default) { (UIAlertAction) in
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)! as URL, options: [:], completionHandler: nil)
}
alertController.addAction(cancelAction)
alertController.addAction(settingsAction)
self.present(alertController, animated: true, completion: nil)
}
}
答案 0 :(得分:6)
问题是你正在删除外部表,因此每当我们删除该表时,该表的源文件仍然存在于该路径上,因此每当我们要创建具有相同表名的新外部表时,数据就可以直接从源路径中提取,以解决此问题首先使用以下命令获取表的路径:
hive> describe formatted database_name.table_name;
然后复制描述中出现的整个位置,例如:
/user/hive/warehouse/database_name.db/table_name
在此之后使用以下命令截断给定表中的所有数据:
hive> dfs -rmr /user/hive/warehouse/database_name.db/table_name;
OR
hive> dfs -rm -r /user/hive/warehouse/database_name.db/table_name;
然后您可以使用DROP TABLE命令完全擦除它。
答案 1 :(得分:2)
我不知道Hive,但是如果它是任何就像Oracle(我有点知道),那么外部表指向<存储在磁盘上的strong>文件。
因此,一旦你放弃它,你当然不能使用它。但是后来你创建了另一个EXTERNAL TABLE(参见你的例子中的第5行),当然你可以再次从中进行选择。
因为,您没有删除作为该外部表的数据源的FILE。