本文將介紹資料授權中關於行過濾器(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 邏輯對多個過濾器進行合并。