arrayJoin 函数
这是一个非常独特的函数。
普通函数不改变行集,只是改变每行中的值(映射)。
聚合函数压缩一组行(折叠或减少)。
arrayJoin
函数则获取每一行并生成一组行(展开)。
该函数以数组作为参数,并将源行传播到数组中元素数量的多个行。 所有列中的值都被简单地复制,除了此函数应用的列中的值;该值将被对应的数组值替换。
示例:
arrayJoin
函数影响查询的所有部分,包括 WHERE
部分。请注意结果是 2,尽管子查询返回 1 行。
示例:
一个查询可以使用多个 arrayJoin
函数。在这种情况下,转换将多次执行,并且行数将被放大。
示例:
重要说明!
使用相同表达式的多个 arrayJoin
可能会由于优化而未能产生预期结果。
对于这种情况,请考虑通过额外的操作修改重复的数组表达式,这些操作不会影响连接结果 - 例如 arrayJoin(arraySort(arr))
、arrayJoin(arrayConcat(arr, []))
示例:
请注意 SELECT 查询中的 ARRAY JOIN 语法,它提供了更广泛的可能性。
ARRAY JOIN
允许你一次性转换多个具有相同元素数量的数组。
示例:
或者你可以使用 Tuple
示例: