Ranger支持对Hive数据按行进行过滤(Row Level Filter),即可以对Select返回的结果按行进行过滤,只显示满足指定条件的行。本文以EMR-4.9.0版本(Ranger 2.1.0)为例,介绍如何将Hive数据按行进行过滤。

前提条件

  • 已创建集群,并选择了Ranger服务,详情请参见创建集群
  • 已创建按行过滤的表。

使用限制

该功能仅适用于HiveServer2的场景。例如,Beeline、JDBC和Hue等途径执行的Select语句。

配置Row Level Filter Policy

  1. Hive组件配置Ranger,详情请参见文档 Hive配置
  2. 在Ranger WebUI页面,单击已创建的emr-hive
    emr-hive
  3. 单击上方的Row Level Filter
    Row Level
  4. 单击右上角的Add New Policy
  5. Create Policy页面,配置相关参数。
    Create Policy
    参数 说明 示例
    Policy Name Policy的名称。您可以自定义。 test-row-filter
    Hive Database 添加Hive中的数据库。 default
    Hive Table 添加表。 test_row_filter
    Select User 选择配置按行过滤的用户。 testc
    Access Types 选择授予的权限。 select
    Row Level Filter 填写过滤的函数。 id>=10
  6. 单击add

测试

  • 场景:testc用户使用select语句,查看表default.test_row_filter中的数据时,只显示符合过滤条件的行。
  • 流程:
    1. 没有配置按行过滤且有权限访问表的用户(例如hadoop用户)使用Beeline连接HiveServer2,执行select * from default.test_row_filter;命令,查询default.test_row_filter表的数据,可以显示所有的行。table_all
    2. testc用户使用Beeline连接HiveServer2,执行select * from default.test_row_filter;命令,查询default.test_row_filter表的数据,只能显示id≥10的行。table_id