使用 Lateral Join 实现列转行
本文介绍如何使用 Lateral Join 功能。
「行列转化」是 ETL 处理过程中常见的操作。Lateral Join 功能能够将每行数据和内部的子查询或者 Table Function 关联。通过 Lateral Join 与 Unnest 功能配合,您可以实现一行转多行的功能。Unnest 是一种 Table Function,可以把数组类型转化成 Table 的多行。更多信息,参见 unnest。
注意
- 当前版本中,Lateral Join 仅用于和 Unnest 函数配合使用,实现列转行的功能。后续会支持配合其他 Table Function 或 UDTF。
- 当前版本中,Lateral Join 暂不支持子查询。
使用 Lateral Join
Lateral Join 功能的语法如下:
from table_reference join [lateral] table_reference;
您可以结合 Lateral Join 功能与 Unnest 功能实现常见的行展开逻辑。
-- 完整 SQL 语句。
SELECT student, score, t.unnest
FROM tests
CROSS JOIN LATERAL UNNEST(scores) AS t;
-- 简化 SQL 语句。您可以使用 Unnest 关键字省略 Lateral Join 关键字。
SELECT student, score, t.unnest
FROM tests, UNNEST(scores) AS t;
注意
多列 Unnest 操作需要指定别名。例如:
select v1, t1.unnest as v2, t2.unnest as v3 from lateral_test, unnest(v2) t1 ,unnest(v3) t2;
。
StarRocks 支持的 BITMAP、STRING、ARRAY、Column 之间的类型转化关系如下。