To ensure correctness, in particular for operations that require exclusive (INSERT OVERWRITE) and semishared (UPDATE/DELETE) locks.
This is a temporary fix till lock acquisition is moved before analyze in HIVE-18948.
With this fix, system proceed as follows. The driver will acquire the snapshot, compile the query wrt that snapshot, and then, it will acquire locks. If snapshot is still valid, it will continue as usual. But if snapshot is not valid anymore, it will recompile the query.
This is easier to implement than full solution described in HIVE-18948 because we do not need to move the logic to extract the read/write entities from a query before compilation (actually while parsing).