本文将介绍数据授权中关于行过滤器(Row Filter)的配置规范、支持的表达式及相关限制。
行过滤器表达式
行过滤器表达式用于限制查询结果的数据范围。表达式分为简单表达式(Simple Expression)和复合表达式(Composite Expression)。
简单表达式
简单表达式定义了针对单个列的基础比较逻辑。
语法格式:
<Column Name> <Comparison Operator> <Value>
参数说明:
Column Name(列名):指定用于过滤的列。支持的数据类型如下:
逻辑型:BOOLEAN
字符串:CHAR, VARCHAR
数值型:DECIMAL, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE
时间型:TIME, TIMESTAMP
Comparison Operator(比较运算符):定义比较的方式。支持的运算符请参阅下文对照表。
Value(值):用于比较的常量。该值的类型必须与指定列的数据类型一致。
复合表达式
复合表达式通过逻辑运算符组合多个简单表达式,以实现更复杂的过滤逻辑。
语法格式:
(<Simple Expression>) <AND/OR> (<Simple Expression>)
复合表达式支持嵌套,可使用逻辑运算符AND或OR进一步组合。
运算符对照表
支持的运算符及其在 Apache Paimon 中的对应谓词实现。
运算符 | 说明 | Paimon Predicate | 示例 |
AND | 逻辑与 | PredicateBuilder.and | year > 2010 AND country <> 'US' |
OR | 逻辑或 | PredicateBuilder.or | (year > 2010) OR (month < 8) |
IS NULL | 为空 | PredicateBuilder.isNull | country IS NULL |
IS NOT NULL | 不为空 | PredicateBuilder.isNotNull | country IS NOT NULL |
IN | 集合包含 | PredicateBuilder.in | id IN (1, 2, 3) |
NOT IN | 集合不包含 | PredicateBuilder.notIn | id NOT IN (1, 2, 3) |
= | 等于 | PredicateBuilder.equal | year = 2010 |
<> | 不等于 | PredicateBuilder.notEqual | year <> 2010 |
< | 小于 | PredicateBuilder.lessThan | year < 2010 |
<= | 小于等于 | PredicateBuilder.lessOrEqual | year <= 2010 |
> | 大于 | PredicateBuilder.greaterThan | year > 2010 |
>= | 大于等于 | PredicateBuilder.greaterOrEqual | year >= 2010 |
BETWEEN | 范围 | PredicateBuilder.between | year BETWEEN 2010 AND 2025 |
限制与约束
配置行过滤器时,必须遵循以下限制:
引擎版本:仅支持已对接DLF ROW Filter的计算引擎。
Serverless Spark,请联系值班人员开启白名单使用最新版本。
其他计算引擎暂不支持。
单一规则限制:对于同一张表,一个用户仅能设置一条复合表达式。
Schema 变更影响:若重命名或删除列名,原有的过滤器表达式将失效,必须重新设置。
多策略合并:当同时配置了基于 Role(角色)和 User(用户)的过滤器时,系统将使用 AND 逻辑对多个过滤器进行合并。