对hive类型的行级权限设置字段和设置值慢,实现的新策略

之前说过行级权限的实质是在sql 上加条件(where)。具体可以参考:行级权限实质

在实际中对hive设置行级权限,因为hive 本身对查询就比较慢,所以在行级权限设置字段和设置值的时候,可能几乎读不出来。(读字段会去查询表结构,列表读值会去读表中内容,都涉及到sql 查询)

面对这种现象我们该如何处理?

建议添加一个维度表。

如之前讲的例子超市表现在是存在hive 中。此时设置行级权限响应就很慢。如果我们相对不同的人设置不同的地区权限。

我们需要创建一个维度表,这个表可以是excel 或者关系型数据库。

现在维度是地区,那么我们只要创建地区表就好了。我们只要对该维度表设置权限即可。

然后在数据模型中,原始模型和该表进行内连接。

1.最开始设置行级权限:

select * from 超市表

where 地区=xxx

2.现在加了纬度表,行级权限设置就成了:

select * from 超市表 ,地区表

where 超市表.地区=地区表.地区

and 地区表.地区=XXX

因为地区表是excel 或关系型数据库,查询很快,所以设置行级权限比较好。

还有一种方法:创建一个地区的维表设置行级权限。 (和上面相同)

然后做报表层把行级权限设置的表放入列表筛选器,最后利用筛选器的跨模型关联功能,和其他数据模型设置跨视图关联。

但是使用这个方法需要几个前提:①这个筛选器需要默认选择全部来影响 ②需要隐藏这个筛选器,以免通过清空选项来导致行级过滤无效