更新时间:2023-03-17 GMT+08:00

对同一目录创建多个外表,可能导致外表查询失败

问题

假设存在数据文件路径“/test_data_path”,用户userA对该目录创建外表tableA,用户userB对该目录创建外表tableB,当userB对tableB执行insert操作后,userA将查询tableA失败,出现Permission denied异常。

回答

当userB对tableB执行insert操作后,会在外表数据路径下生成新的数据文件,且文件属组是userB,当userA查询tableA时,会读取外表数据目录下的所有的文件,此时会因没有userB生成的文件的读取权限而查询失败。

实际上,不只是查询场景,还有其他场景也会出现问题。例如:inset overwrite操作将会把此目录下的其他表文件也一起复写。

由于Spark SQL当前的实现机制,如果对此种场景添加检查限制,会存在一致性问题和性能问题,因此未对此种场景添加限制,但是用户应避免此种用法,以避免此场景带来的各种问题。