1.函数简介
(1)arrayJoin函数
先把官方的文档贴上来
Array JOIN 子句允许在数据表的内部,与数组或者嵌套的字段进行JOIN操作,从而将一行数据变多行。适用于行转列操作
示例:
CREATE TABLE arrays_test
(
s String,
arr Array(UInt8)
) ENGINE = Memory;
INSERT INTO arrays_test
VALUES ('Hello', [1,2]), ('World', [3,4,5]), ('Goodbye', []);
┌─s───────────┬─arr─────┐
│ Hello │ [1,2] │
│ World │ [3,4,5] │
│ Goodbye │ [] │
└─────────────┴─────────┘
array join
SELECT s, arr
FROM arrays_test
ARRAY JOIN arr;
┌─s─────┬─arr─┐
│ Hello │ 1 │
│ Hello │ 2 │
│ World │ 3 │
│ World │ 4 │
│ World │ 5 │
└───────┴─────┘
left array join
SELECT s, arr
FROM arrays_test
LEFT ARRAY JOIN arr;
┌─s───────────┬─arr─┐
│ Hello │ 1 │
│ Hello │ 2 │
│ World │ 3 │
│ World │ 4 │
│ World │ 5 │
│ Goodbye │ 0 │
└─────────────┴─────┘
(2)arrayMap函数
arrayMap(fun1,arr1)
参数1:这是一个高阶函数,您必须将 lambda 函数作为第一个参数传递给它,并且不能省略它,它规定了对于数组中元素的操作
参数2:要执行的数组
示例:对数组中每个元素+2
SELECT arrayMap(x -> (x + 2), [1, 2, 3]) as arr;
┌─res─────┐
│ [3,4,5] │
└─────────┘
从不同的数组创建元素元组:
SELECT arrayMap((x, y) -> (x, y), [1, 2, 3], [4, 5, 6]) AS res
┌─res─────────────────┐
│ [(1,4),(2,5),(3,6)] │
└─────────────────────┘
2.使用场景
先看数据:
┌─dept──┬─budget_name─┬─type──┬────money─┬─posting_date─┐
│ 部门1 │ 主营收入 │ type1 │ 3654.32 │ 2023-04-10 │
│ 部门1 │ 所得税 │ type1 │ 300 │ 2023-04-10 │
│ 部门1 │ 成本