更新时间:2024-12-11 GMT+08:00

FlinkSQL行级过滤

本章节适用于MRS 3.3.1及以后版本。

使用场景

使用FlinkSQL时支持设置行级别过滤条件,可以使指定用户只能访问授权过的行,隐藏未授权的行数据。

前提条件

  • 集群已启用Kerberos认证(安全模式),已安装Ranger、Hive、Flink等服务且服务运行正常。
  • 已创建需要配置权限的用户、用户组或Role,且用户已加入hive组。
  • 该特性仅支持在FlinkServer平台使用。
  • FlinkSQL需要使用default方言。
  • 过滤条件中的字段大小写要与FlinkSQL中字段大小写一致。
  • 该特性不支持Hive视图表。

配置FlinkSQL行过滤流程

  1. 配置FlinkServer自定义参数。

    1. 登录FusionInsight Manager。
    2. 选择“集群 > 服务 > Flink > 配置 > 全部配置 > FlinkServer(角色) > 自定义 > flink.customized.configs”。
    3. 添加名称为“table.ranger.security.authorization” ,值为“true”的自定义参数,单击“保存”,根据界面提示保存参数。
    4. 单击“实例”,勾选所有FlinkServer实例,选择“更多 > 重启实例”,根据界面提示重启FlinkServer实例。

  2. 为指定用户配置Hive行级别数据过滤,详情可参考Hive行级别数据过滤

    如为test用户在“default”库中的“datagen”表添加“a<>1”过滤条件。

  3. 使用权限配置完成的用户通过FlinkServer提交FlinkSQL作业,详情可参考如何创建FlinkServer作业

    SQL示例如下:
    CREATE CATALOG myhive WITH (
      'type' = 'hive',
      'hive-version' = '3.1.0',
      'default-database' = 'default',
      'cluster.name' = 'flink_hive'
    );
    CREATE TABLE print (a INT) WITH ('connector' = 'print');
    CREATE TABLE IF NOT EXISTS myhive.`default`.datagen (a INT) WITH (
      'connector' = 'datagen',
      'rows-per-second' = '1'
    );
    set table.sql-dialect = default;
    insert into
      print
    select
      *
    from
      myhive.`default`.datagen;

    在Flink作业原生界面可查看已设置的过滤条件,如下表示“a<>1”过滤条件。