首页 / 窗口
窗口函数对照
窗口函数在 MaxCompute、Hologres、StarRocks、Doris、Hive、Spark SQL、Flink SQL 中的写法对照,共 4 个函数。其中 0 个函数在部分引擎中需要改写或没有对应函数。
目录:first_value · lag · last_value · lead
FIRST_VALUE 窗口第一个值
FIRST_VALUE 返回窗口中第一行的值。七个引擎都同名可用,差异在“忽略 NULL”的写法:MaxCompute、Doris、Hive 和 Spark 传第二个布尔参数,StarRocks 用 IGNORE NULLS,Hologres 和 Flink 的文档没有对应写法。
| 引擎 | 支持 | 写法 |
|---|---|---|
| MaxCompute | 支持 | FIRST_VALUE(expr[, ignore_nulls]) OVER (...) |
| Hologres | 支持 | FIRST_VALUE(value) OVER (...) |
| StarRocks | 支持 | FIRST_VALUE(expr [IGNORE NULLS]) OVER (...) |
| Doris | 支持 | FIRST_VALUE(expr[, ignore_null]) OVER (...) |
| Hive | 支持 | first_value(col[, skip_nulls]) OVER (...) |
| Spark SQL | 支持 | first_value(expr[, isIgnoreNull]) OVER (...) |
| Flink SQL | 支持 | FIRST_VALUE(expression) |
LAG 取前第 N 行的值
LAG(expr[, offset[, default]]) 返回当前行前面第 offset 行的值,越界时返回 default。七个引擎写法相同,差异在 default 是否必须是常量、是否支持 IGNORE NULLS,以及 offset 能否为 0。
| 引擎 | 支持 | 写法 |
|---|---|---|
| MaxCompute | 支持 | LAG(expr[, offset[, default]]) OVER (...) |
| Hologres | 支持 | LAG(value[, offset[, default]]) OVER (...) |
| StarRocks | 支持 | LAG(expr [IGNORE NULLS] [, offset[, default]]) OVER (...) |
| Doris | 支持 | LAG(expr[, offset[, default]]) OVER (...) |
| Hive | 支持 | lag(col[, n[, default]]) OVER (...) |
| Spark SQL | 支持 | lag(input[, offset[, default]]) OVER (...) |
| Flink SQL | 支持 | LAG(expression[, offset][, default]) |
LAST_VALUE 窗口最后一个值
LAST_VALUE 返回窗口中最后一行的值。七个引擎都同名可用,差异在“忽略 NULL”的写法:MaxCompute、Doris、Hive 和 Spark 传第二个布尔参数,StarRocks 用 IGNORE NULLS,Hologres 和 Flink 的文档没有对应写法。LAST_VALUE 还要注意默认窗口只到当前行。
| 引擎 | 支持 | 写法 |
|---|---|---|
| MaxCompute | 支持 | LAST_VALUE(expr[, ignore_nulls]) OVER (...) |
| Hologres | 支持 | LAST_VALUE(value) OVER (...) |
| StarRocks | 支持 | LAST_VALUE(expr [IGNORE NULLS]) OVER (...) |
| Doris | 支持 | LAST_VALUE(expr[, ignore_null]) OVER (...) |
| Hive | 支持 | last_value(col[, skip_nulls]) OVER (...) |
| Spark SQL | 支持 | last_value(expr[, isIgnoreNull]) OVER (...) |
| Flink SQL | 支持 | LAST_VALUE(expression) |
LEAD 取后第 N 行的值
LEAD(expr[, offset[, default]]) 返回当前行后面第 offset 行的值,越界时返回 default。七个引擎写法相同,差异在 default 是否必须是常量、是否支持 IGNORE NULLS,以及 offset 能否为 0。
| 引擎 | 支持 | 写法 |
|---|---|---|
| MaxCompute | 支持 | LEAD(expr[, offset[, default]]) OVER (...) |
| Hologres | 支持 | LEAD(value[, offset[, default]]) OVER (...) |
| StarRocks | 支持 | LEAD(expr [IGNORE NULLS] [, offset[, default]]) OVER (...) |
| Doris | 支持 | LEAD(expr[, offset[, default]]) OVER (...) |
| Hive | 支持 | lead(col[, n[, default]]) OVER (...) |
| Spark SQL | 支持 | lead(input[, offset[, default]]) OVER (...) |
| Flink SQL | 支持 | LEAD(expression[, offset][, default]) |