1、删除一张hive表的过程
(1)从数据库中将这张hive表删除。
(2)将hive表所拥有的列从hive_columns中删除。
(3)将hive表从hive_table中删除。
(4)判断元数据表是否对应着hive表
I:不对应:表示该元数据表不存在任务。更新t_tables中该元数据表的hive_state字段和task_state字段,使其的值代表已经没有任务。
II:对应:判断元数据所有hive表的task_state字段,若有一个hive表的task_state字段为2,即一个hive表有任务,则表示该元数据表存在任务;否则表示该元素据表不存在任务。仍然更新t_tables中该元数据表的hive_state字段和task_state字段。
(5)将任务从线程池中移除。
(6)从task_plan表中移除该hive表对应的所有任务。
2、问题
(1)父任务id(ftask_id)是什么?
当任务是库级的,才存在父任务id,父任务是虚的。例如一个库中有10张表,每张表上的任务是一个子任务,它们的父任务id是相同的。任务的默认ftask_id是-1,表示没有父任务。
(2)元数据表和hive表是1对多的关系,只要有一张hive表的task_state为2,就可以认为该元数据表是有任务的。