使用Hive自管理的表的时候都担心如果误drop了表怎么办,因此Hive除了外部表的方式还提供了一个功能:ProtectMode(保护模式).

细心的同学会发现文档里其实提到过alter table enable/disable no_drop/offline

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL),其中no_drop禁止直接drop tableoffline是禁止表被读取.其实这些过能在Hive里被称为ProtectMode.

查看源码是支持四种模式:

publicstaticString FLAG_OFFLINE= "OFFLINE";//禁止读
publicstaticString FLAG_NO_DROP= "NO_DROP";//不许删除表
publicstaticString FLAG_NO_DROP_CASCADE = "NO_DROP_CASCADE";//不许删除分区
publicstatic String FLAG_READ_ONLY= "READ_ONLY";//只读,不过测试了下实际还不支持

这个特性的实现其实是在数据库里的table_params表里支持的,param_key=’Protect_mode’,而param_value则设置相应的mode.因此批量做no_drop/offline通过SQL操作是最方便的了:)