数仓 SQL 函数对照

首页 / 分区

MAX_PT 取最新分区

MAX_PT 返回分区表中有数据的最大一级分区,常用于“只读最新一天”。只有阿里云的 MaxCompute 和 Hologres 提供,迁移到其他引擎时必须改写为子查询。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute 支持 MAX_PT(table_full_name) 按字母顺序返回有数据的最大一级分区,只看一级分区。OSS 外部表也支持。所有分区都为空时会报错。 官方文档
Hologres 支持 MAX_PT('table_name') 返回 Hologres 分区表的最大分区。文档没有说明版本要求和是否支持外部表。 官方文档
StarRocks 不支持 — 在 StarRocks 官方文档中搜索不到 MAX_PT。改写为 WHERE pt = (SELECT MAX(pt) FROM t)。 官方文档
Doris 不支持 — 在 Doris 官方文档中搜索不到 MAX_PT。改写为 WHERE pt = (SELECT MAX(pt) FROM t)。 官方文档
Hive 不支持 — 函数手册中没有 MAX_PT。改写为 WHERE pt = (SELECT MAX(pt) FROM t)。 官方文档
Spark SQL 不支持 — 函数索引中没有 MAX_PT。改写为 WHERE pt = (SELECT MAX(pt) FROM t)。 官方文档
Flink SQL 不支持 — 内置函数中没有 MAX_PT。流式作业没有“最新分区”的概念,批模式下可以用子查询改写。 官方文档

迁移注意事项

示例

只读最新分区

MaxCompute
SELECT * FROM dim_store WHERE pt = MAX_PT('project.dim_store');
StarRocks
SELECT * FROM dim_store WHERE pt = (SELECT MAX(pt) FROM dim_store);

最后核对日期: