arrayJoin 関数
これは非常に珍しい関数です。
通常の関数は行のセットを変更することはなく、各行の値を変更するだけです(マップ)。
集約関数は行のセットを圧縮します(フォールドまたはリデュース)。
arrayJoin
関数は、各行を取り、行のセットを生成します(アンフォールド)。
この関数は配列を引数に取り、配列の要素の数に応じて元の行を複数の行に伝播させます。 すべてのカラムの値は単純にコピーされますが、この関数が適用されるカラムの値は、対応する配列の値に置き換えられます。
例:
arrayJoin
関数は WHERE
セクションを含むクエリのすべてのセクションに影響します。サブクエリが1行を返したにもかかわらず、結果は2です。
例:
クエリは複数の arrayJoin
関数を使用できます。この場合、変換は複数回行われ、行は増加します。
例:
注意事項!
同じ式で複数の arrayJoin
を使用すると、最適化により期待される結果が得られないことがあります。
その場合は、結合結果に影響を与えない追加の操作で繰り返される配列の式を変更することを検討してください - 例: arrayJoin(arraySort(arr))
, arrayJoin(arrayConcat(arr, []))
例:
SELECT クエリの ARRAY JOIN 構文に注意してください。これはより広い可能性を提供します。
ARRAY JOIN
を使用すると、同じ数の要素を持つ複数の配列を同時に変換できます。
例:
または、Tuple を使用することもできます。
例: