Files
2026-10-19 13:19:38 +00:00

36 lines
3.9 KiB
XML

<test>
<create_query>CREATE TABLE array_join_sorted (id UInt64, tags Array(String), payload String) ENGINE = MergeTree ORDER BY id</create_query>
<fill_query>INSERT INTO array_join_sorted SELECT number, arrayMap(i -> concat('t', toString(i)), range(number % 4)), repeat('p', 100) FROM numbers(10000000)</fill_query>
<create_query>CREATE TABLE array_join_wide_chain (A Array(String), B Array(String), C Array(String)) ENGINE = MergeTree ORDER BY tuple()</create_query>
<fill_query>INSERT INTO array_join_wide_chain SELECT arrayMap(i -> concat('a', toString(number), '_', toString(i)), range(100)), arrayMap(i -> concat('b', toString(number), '_', toString(i)), range(100)), arrayMap(i -> concat('c', toString(number), '_', toString(i)), range(100)) FROM numbers(100000)</fill_query>
<query>SELECT count() FROM (SELECT [number] a, [number * 2] b FROM numbers(10000000)) AS t ARRAY JOIN a, b WHERE NOT ignore(a + b)</query>
<query>SELECT count() FROM (SELECT [number] a, [number * 2] b FROM numbers(10000000)) AS t LEFT ARRAY JOIN a, b WHERE NOT ignore(a + b)</query>
<query>SELECT count() FROM (SELECT [number] a, [number * 2] b FROM numbers(10000000)) AS t ARRAY JOIN a, b WHERE NOT ignore(a + b) SETTINGS enable_unaligned_array_join = 1</query>
<query>SELECT count() FROM (SELECT [number] a, [number * 2] b FROM numbers(10000000)) AS t LEFT ARRAY JOIN a, b WHERE NOT ignore(a + b) SETTINGS enable_unaligned_array_join = 1</query>
<query>SELECT count() FROM (SELECT [number] a, [number * 2, number] b FROM numbers(10000000)) AS t ARRAY JOIN a, b WHERE NOT ignore(a + b) SETTINGS enable_unaligned_array_join = 1</query>
<query>SELECT count() FROM (SELECT [number] a, [number * 2, number] b FROM numbers(10000000)) AS t LEFT ARRAY JOIN a, b WHERE NOT ignore(a + b) SETTINGS enable_unaligned_array_join = 1</query>
<!-- The arrayJoin function form expands in ExpressionActions, which by default wraps a String passenger in
a lazy ColumnReplicated; enable_lazy_columns_replication = 0 is what replicates it eagerly, and format Null keeps the result off the wire. -->
<query>with 'clickhouse' as str select arrayJoin(range(number % 10)), materialize(str) from numbers(10000000) settings enable_lazy_columns_replication = 0 format Null</query>
<!-- Same with lazy replication on and a wide passenger. -->
<query>SELECT x, str FROM (SELECT materialize(repeat('clickhouse', 20)) AS str, range(number % 10) AS arr FROM numbers(10000000)) ARRAY JOIN arr AS x FORMAT Null</query>
<!-- Sorting decides whether to materialize the passenger, it must stay lazy here. -->
<query>SELECT x, str FROM (SELECT materialize(repeat('clickhouse', 20)) AS str, range(number % 10) AS arr FROM numbers(3000000)) ARRAY JOIN arr AS x ORDER BY x FORMAT Null</query>
<!-- The later joins get their arrays lazily replicated from the previous one. -->
<query>SELECT a, b, c FROM array_join_wide_chain ARRAY JOIN A AS a ARRAY JOIN B AS b ARRAY JOIN C AS c LIMIT 31 SETTINGS max_threads = 1 FORMAT Null</query>
<query>SELECT a, b, c FROM array_join_wide_chain LEFT ARRAY JOIN A AS a LEFT ARRAY JOIN B AS b LEFT ARRAY JOIN C AS c LIMIT 31 SETTINGS max_threads = 1 FORMAT Null</query>
<!-- LEFT ARRAY JOIN keeps the row count, so reading in order stops early for the function form too. -->
<query>SELECT id, arrayJoin(emptyArrayToSingle(tags)) AS tag, payload FROM array_join_sorted ORDER BY id LIMIT 10 OFFSET 1000000 SETTINGS max_threads = 1 FORMAT Null</query>
<!-- a selective filter is fused into LEFT ARRAY JOIN, so the eager passenger is copied only for the elements it keeps -->
<query>SELECT id, arrayJoin(emptyArrayToSingle(tags)) AS tag, payload FROM array_join_sorted WHERE tag = 't2' SETTINGS max_threads = 1, enable_lazy_columns_replication = 0 FORMAT Null</query>
<drop_query>DROP TABLE IF EXISTS array_join_wide_chain</drop_query>
<drop_query>DROP TABLE IF EXISTS array_join_sorted</drop_query>
</test>