mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-19 16:20:50 +00:00
Merge pull request #64535 from ClickHouse/add-tests-24.5-release
Add tests for experimental unequal joins and randomize new settings in clickhouse-test
This commit is contained in:
commit
f38c5db995
@ -19,3 +19,7 @@ charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
# Some SQL results have trailing whitespace which is removed by IDEs
|
||||
[tests/queries/**.reference]
|
||||
trim_trailing_whitespace = false
|
||||
|
@ -808,10 +808,10 @@ class SettingsRandomizer:
|
||||
"merge_tree_coarse_index_granularity": lambda: random.randint(2, 32),
|
||||
"optimize_distinct_in_order": lambda: random.randint(0, 1),
|
||||
"max_bytes_before_external_sort": threshold_generator(
|
||||
0.3, 0.5, 1, 10 * 1024 * 1024 * 1024
|
||||
0.3, 0.5, 0, 10 * 1024 * 1024 * 1024
|
||||
),
|
||||
"max_bytes_before_external_group_by": threshold_generator(
|
||||
0.3, 0.5, 1, 10 * 1024 * 1024 * 1024
|
||||
0.3, 0.5, 0, 10 * 1024 * 1024 * 1024
|
||||
),
|
||||
"max_bytes_before_remerge_sort": lambda: random.randint(1, 3000000000),
|
||||
"min_compress_block_size": lambda: random.randint(1, 1048576 * 3),
|
||||
@ -850,6 +850,11 @@ class SettingsRandomizer:
|
||||
"merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_injection_probability": lambda: round(
|
||||
random.random(), 2
|
||||
),
|
||||
"prefer_external_sort_block_bytes": lambda: random.choice([0, 1, 100000000]),
|
||||
"cross_join_min_rows_to_compress": lambda: random.choice([0, 1, 100000000]),
|
||||
"cross_join_min_bytes_to_compress": lambda: random.choice([0, 1, 100000000]),
|
||||
"min_external_table_block_size_bytes": lambda: random.choice([0, 1, 100000000]),
|
||||
"max_parsing_threads": lambda: random.choice([0, 1, 10]),
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
|
@ -4,10 +4,10 @@ CREATE TABLE nested (x UInt64, filter UInt8, n Nested(a UInt64)) ENGINE = MergeT
|
||||
INSERT INTO nested SELECT number, number % 2, range(number % 10) FROM system.numbers LIMIT 100000;
|
||||
|
||||
ALTER TABLE nested ADD COLUMN n.b Array(UInt64);
|
||||
SELECT DISTINCT n.b FROM nested PREWHERE filter;
|
||||
SELECT DISTINCT n.b FROM nested PREWHERE filter ORDER BY ALL;
|
||||
|
||||
ALTER TABLE nested ADD COLUMN n.c Array(UInt64) DEFAULT arrayMap(x -> x * 2, n.a);
|
||||
SELECT DISTINCT n.c FROM nested PREWHERE filter;
|
||||
SELECT DISTINCT n.a, n.c FROM nested PREWHERE filter;
|
||||
SELECT DISTINCT n.c FROM nested PREWHERE filter ORDER BY ALL;
|
||||
SELECT DISTINCT n.a, n.c FROM nested PREWHERE filter ORDER BY ALL;
|
||||
|
||||
DROP TABLE nested;
|
||||
|
@ -7,6 +7,6 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
|
||||
${CLICKHOUSE_CLIENT} -q "create table insert_big_json(a String, b String) engine=MergeTree() order by tuple()";
|
||||
|
||||
python3 -c "[print('{{\"a\":\"{}\", \"b\":\"{}\"'.format('clickhouse'* 1000000, 'dbms' * 1000000)) for i in range(10)]; [print('{{\"a\":\"{}\", \"b\":\"{}\"}}'.format('clickhouse'* 100000, 'dbms' * 100000)) for i in range(10)]" 2>/dev/null | ${CLICKHOUSE_CLIENT} --min_chunk_bytes_for_parallel_parsing=10485760 --max_threads=0 --input_format_parallel_parsing=1 --max_memory_usage=0 -q "insert into insert_big_json FORMAT JSONEachRow" 2>&1 | grep -q "min_chunk_bytes_for_parallel_parsing" && echo "Ok." || echo "FAIL" ||:
|
||||
python3 -c "[print('{{\"a\":\"{}\", \"b\":\"{}\"'.format('clickhouse'* 1000000, 'dbms' * 1000000)) for i in range(10)]; [print('{{\"a\":\"{}\", \"b\":\"{}\"}}'.format('clickhouse'* 100000, 'dbms' * 100000)) for i in range(10)]" 2>/dev/null | ${CLICKHOUSE_CLIENT} --min_chunk_bytes_for_parallel_parsing=10485760 --max_threads=0 --input_format_parallel_parsing=1 --max_memory_usage=0 --max_parsing_threads=2 -q "insert into insert_big_json FORMAT JSONEachRow" 2>&1 | grep -q "min_chunk_bytes_for_parallel_parsing" && echo "Ok." || echo "FAIL" ||:
|
||||
|
||||
${CLICKHOUSE_CLIENT} -q "drop table insert_big_json"
|
||||
|
@ -0,0 +1,290 @@
|
||||
-- { echoOn }
|
||||
-- inequality operation
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 0 0
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 0 0
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
0 0 2 10 beta
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
0 0 2 10 beta
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
0 0 2 10 beta
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 0 0
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
0 0 2 10 beta
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 0 0
|
||||
3 20 gamma 0 0
|
||||
--
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND t1.a > t2.key AND t1.key + t2.a > 1 ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND t1.a > t2.key AND t1.key + t2.a > 1 ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND t1.a > t2.key AND t1.key + t2.a > 1 ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND t1.a > t2.key AND t1.key + t2.a > 1 ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND t1.a > t2.key AND t1.key + t2.a > 1 ORDER BY ALL;
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND t1.a > t2.key AND t1.key + t2.a > 1 ORDER BY ALL;
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND t1.a > t2.key AND t1.key + t2.a > 1 ORDER BY ALL;
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND t1.a > t2.key AND t1.key + t2.a > 1 ORDER BY ALL;
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
--
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.key < t2.a OR t1.a % 2 = 0) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.key < t2.a OR t1.a % 2 = 0) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.key < t2.a OR t1.a % 2 = 0) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.key < t2.a OR t1.a % 2 = 0) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.key < t2.a OR t1.a % 2 = 0) ORDER BY ALL;
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.key < t2.a OR t1.a % 2 = 0) ORDER BY ALL;
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.key < t2.a OR t1.a % 2 = 0) ORDER BY ALL;
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.key < t2.a OR t1.a % 2 = 0) ORDER BY ALL;
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
-- BETWEEN
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t2.a BETWEEN 8 AND t1.a) ORDER BY ALL;
|
||||
1 10 alpha 0 0
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t2.a BETWEEN 8 AND t1.a) ORDER BY ALL;
|
||||
1 10 alpha 0 0
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t2.a BETWEEN 8 AND t1.a) ORDER BY ALL;
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t2.a BETWEEN 8 AND t1.a) ORDER BY ALL;
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t2.a BETWEEN 8 AND t1.a) ORDER BY ALL;
|
||||
0 0 1 5 ALPHA
|
||||
0 0 4 25 delta
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t2.a BETWEEN 8 AND t1.a) ORDER BY ALL;
|
||||
0 0 1 5 ALPHA
|
||||
0 0 4 25 delta
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t2.a BETWEEN 8 AND t1.a) ORDER BY ALL;
|
||||
0 0 1 5 ALPHA
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 0 0
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t2.a BETWEEN 8 AND t1.a) ORDER BY ALL;
|
||||
0 0 1 5 ALPHA
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 0 0
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
--
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.a IN (SELECT a FROM t2 WHERE a = 10)) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 0 0
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.a IN (SELECT a FROM t2 WHERE a = 10)) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 0 0
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.a IN (SELECT a FROM t2 WHERE a = 10)) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.a IN (SELECT a FROM t2 WHERE a = 10)) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.a IN (SELECT a FROM t2 WHERE a = 10)) ORDER BY ALL;
|
||||
0 0 2 10 beta
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.a IN (SELECT a FROM t2 WHERE a = 10)) ORDER BY ALL;
|
||||
0 0 2 10 beta
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.a IN (SELECT a FROM t2 WHERE a = 10)) ORDER BY ALL;
|
||||
0 0 2 10 beta
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 0 0
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.a IN (SELECT a FROM t2 WHERE a = 10)) ORDER BY ALL;
|
||||
0 0 2 10 beta
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 0 0
|
||||
3 20 gamma 0 0
|
||||
-- Stupid condition
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 2 10 beta
|
||||
3 20 gamma 0 0
|
||||
-- Window functions with stupid condition
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.*, AVG(t1.a) OVER () AS avg_b, SUM(t2.key) OVER () AS sum_c FROM t1 LEFT JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA 15 3
|
||||
2 15 beta 2 10 beta 15 3
|
||||
3 20 gamma 0 0 15 3
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.*, AVG(t1.a) OVER () AS avg_b, SUM(t2.key) OVER () AS sum_c FROM t1 LEFT JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA 15 3
|
||||
2 15 beta 2 10 beta 15 3
|
||||
3 20 gamma 0 0 15 3
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.*, AVG(t1.a) OVER () AS avg_b, SUM(t2.key) OVER () AS sum_c FROM t1 INNER JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA 12.5 3
|
||||
2 15 beta 2 10 beta 12.5 3
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.*, AVG(t1.a) OVER () AS avg_b, SUM(t2.key) OVER () AS sum_c FROM t1 INNER JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA 12.5 3
|
||||
2 15 beta 2 10 beta 12.5 3
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.*, AVG(t1.a) OVER () AS avg_b, SUM(t2.key) OVER () AS sum_c FROM t1 RIGHT JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
0 0 4 25 delta 8.333333333333334 7
|
||||
1 10 alpha 1 5 ALPHA 8.333333333333334 7
|
||||
2 15 beta 2 10 beta 8.333333333333334 7
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.*, AVG(t1.a) OVER () AS avg_b, SUM(t2.key) OVER () AS sum_c FROM t1 RIGHT JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
0 0 4 25 delta 8.333333333333334 7
|
||||
1 10 alpha 1 5 ALPHA 8.333333333333334 7
|
||||
2 15 beta 2 10 beta 8.333333333333334 7
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.*, AVG(t1.a) OVER () AS avg_b, SUM(t2.key) OVER () AS sum_c FROM t1 FULL JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
0 0 4 25 delta 11.25 7
|
||||
1 10 alpha 1 5 ALPHA 11.25 7
|
||||
2 15 beta 2 10 beta 11.25 7
|
||||
3 20 gamma 0 0 11.25 7
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.*, AVG(t1.a) OVER () AS avg_b, SUM(t2.key) OVER () AS sum_c FROM t1 FULL JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
0 0 4 25 delta 11.25 7
|
||||
1 10 alpha 1 5 ALPHA 11.25 7
|
||||
2 15 beta 2 10 beta 11.25 7
|
||||
3 20 gamma 0 0 11.25 7
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
@ -0,0 +1,82 @@
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
|
||||
|
||||
CREATE TABLE t1 (
|
||||
key UInt32,
|
||||
a UInt32,
|
||||
attr String
|
||||
) ENGINE = MergeTree ORDER BY key;
|
||||
|
||||
CREATE TABLE t2 (
|
||||
key UInt32,
|
||||
a UInt32,
|
||||
attr String
|
||||
) ENGINE = MergeTree ORDER BY key;
|
||||
|
||||
INSERT INTO t1 (key, a, attr) VALUES (1, 10, 'alpha'), (2, 15, 'beta'), (3, 20, 'gamma');
|
||||
INSERT INTO t2 (key, a, attr) VALUES (1, 5, 'ALPHA'), (2, 10, 'beta'), (4, 25, 'delta');
|
||||
|
||||
|
||||
SET allow_experimental_analyzer=1;
|
||||
SET allow_experimental_join_condition=1;
|
||||
SET join_use_nulls=0;
|
||||
-- { echoOn }
|
||||
-- inequality operation
|
||||
{% for join_type in ['LEFT', 'INNER', 'RIGHT', 'FULL'] -%}
|
||||
{% for algorithm in ['hash', 'grace_hash'] -%}
|
||||
SET join_algorithm='{{ algorithm }}';
|
||||
SELECT t1.*, t2.* FROM t1 {{ join_type }} JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
||||
|
||||
--
|
||||
{% for join_type in ['LEFT', 'INNER', 'RIGHT', 'FULL'] -%}
|
||||
{% for algorithm in ['hash', 'grace_hash'] -%}
|
||||
SET join_algorithm='{{ algorithm }}';
|
||||
SELECT t1.*, t2.* FROM t1 {{ join_type }} JOIN t2 ON t1.key = t2.key AND t1.a > t2.key AND t1.key + t2.a > 1 ORDER BY ALL;
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
||||
|
||||
--
|
||||
{% for join_type in ['LEFT', 'INNER', 'RIGHT', 'FULL'] -%}
|
||||
{% for algorithm in ['hash', 'grace_hash'] -%}
|
||||
SET join_algorithm='{{ algorithm }}';
|
||||
SELECT t1.*, t2.* FROM t1 {{ join_type }} JOIN t2 ON t1.key = t2.key AND (t1.key < t2.a OR t1.a % 2 = 0) ORDER BY ALL;
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
||||
|
||||
-- BETWEEN
|
||||
{% for join_type in ['LEFT', 'INNER', 'RIGHT', 'FULL'] -%}
|
||||
{% for algorithm in ['hash', 'grace_hash'] -%}
|
||||
SET join_algorithm='{{ algorithm }}';
|
||||
SELECT t1.*, t2.* FROM t1 {{ join_type }} JOIN t2 ON t1.key = t2.key AND (t2.a BETWEEN 8 AND t1.a) ORDER BY ALL;
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
||||
|
||||
--
|
||||
{% for join_type in ['LEFT', 'INNER', 'RIGHT', 'FULL'] -%}
|
||||
{% for algorithm in ['hash', 'grace_hash'] -%}
|
||||
SET join_algorithm='{{ algorithm }}';
|
||||
SELECT t1.*, t2.* FROM t1 {{ join_type }} JOIN t2 ON t1.key = t2.key AND (t1.a IN (SELECT a FROM t2 WHERE a = 10)) ORDER BY ALL;
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
||||
|
||||
-- Stupid condition
|
||||
{% for join_type in ['LEFT', 'INNER', 'RIGHT', 'FULL'] -%}
|
||||
{% for algorithm in ['hash', 'grace_hash'] -%}
|
||||
SET join_algorithm='{{ algorithm }}';
|
||||
SELECT t1.*, t2.* FROM t1 {{ join_type }} JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
||||
|
||||
-- Window functions with stupid condition
|
||||
{% for join_type in ['LEFT', 'INNER', 'RIGHT', 'FULL'] -%}
|
||||
{% for algorithm in ['hash', 'grace_hash'] -%}
|
||||
SET join_algorithm='{{ algorithm }}';
|
||||
SELECT t1.*, t2.*, AVG(t1.a) OVER () AS avg_b, SUM(t2.key) OVER () AS sum_c FROM t1 {{ join_type }} JOIN t2 ON t1.key == t2.key AND (t1.a * length(t2.attr) / length(t1.attr) <> t2.a + t1.key - t2.key) ORDER BY ALL;
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
||||
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
@ -0,0 +1,90 @@
|
||||
-- { echoOn }
|
||||
|
||||
-- Support for query lower
|
||||
SET join_algorithm='hash';
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 0 0
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 0 0
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT * FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT * FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA
|
||||
SET join_algorithm='hash';
|
||||
SELECT * FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
0 0 2 10 beta
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT * FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
0 0 2 10 beta
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
SET join_algorithm='hash';
|
||||
SELECT * FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
0 0 2 10 beta
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 0 0
|
||||
3 20 gamma 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT * FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
0 0 2 10 beta
|
||||
0 0 4 25 delta
|
||||
1 10 alpha 1 5 ALPHA
|
||||
2 15 beta 0 0
|
||||
3 20 gamma 0 0
|
||||
-- Subquery JOIN
|
||||
SET join_algorithm='hash';
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) LEFT JOIN (SELECT * FROM VALUES('key UInt64, a UInt64', (0, 10), (1, 100), (2, 1000))) t3 ON t1.key=t3.key AND t2.key=t3.key AND t3.a!=t1.a AND t3.a!=t2.a ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA 1 100
|
||||
2 15 beta 0 0 0 0
|
||||
3 20 gamma 0 0 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) LEFT JOIN (SELECT * FROM VALUES('key UInt64, a UInt64', (0, 10), (1, 100), (2, 1000))) t3 ON t1.key=t3.key AND t2.key=t3.key AND t3.a!=t1.a AND t3.a!=t2.a ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA 1 100
|
||||
2 15 beta 0 0 0 0
|
||||
3 20 gamma 0 0 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT * FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) INNER JOIN (SELECT * FROM VALUES('key UInt64, a UInt64', (0, 10), (1, 100), (2, 1000))) t3 ON t1.key=t3.key AND t2.key=t3.key AND t3.a!=t1.a AND t3.a!=t2.a ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA 1 100
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT * FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) INNER JOIN (SELECT * FROM VALUES('key UInt64, a UInt64', (0, 10), (1, 100), (2, 1000))) t3 ON t1.key=t3.key AND t2.key=t3.key AND t3.a!=t1.a AND t3.a!=t2.a ORDER BY ALL;
|
||||
1 10 alpha 1 5 ALPHA 1 100
|
||||
SET join_algorithm='hash';
|
||||
SELECT * FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) RIGHT JOIN (SELECT * FROM VALUES('key UInt64, a UInt64', (0, 10), (1, 100), (2, 1000))) t3 ON t1.key=t3.key AND t2.key=t3.key AND t3.a!=t1.a AND t3.a!=t2.a ORDER BY ALL;
|
||||
0 0 0 0 0 10
|
||||
0 0 0 0 2 1000
|
||||
1 10 alpha 1 5 ALPHA 1 100
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT * FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) RIGHT JOIN (SELECT * FROM VALUES('key UInt64, a UInt64', (0, 10), (1, 100), (2, 1000))) t3 ON t1.key=t3.key AND t2.key=t3.key AND t3.a!=t1.a AND t3.a!=t2.a ORDER BY ALL;
|
||||
0 0 0 0 0 10
|
||||
0 0 0 0 2 1000
|
||||
1 10 alpha 1 5 ALPHA 1 100
|
||||
SET join_algorithm='hash';
|
||||
SELECT * FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) FULL JOIN (SELECT * FROM VALUES('key UInt64, a UInt64', (0, 10), (1, 100), (2, 1000))) t3 ON t1.key=t3.key AND t2.key=t3.key AND t3.a!=t1.a AND t3.a!=t2.a ORDER BY ALL;
|
||||
0 0 0 0 0 10
|
||||
0 0 0 0 2 1000
|
||||
0 0 2 10 beta 0 0
|
||||
0 0 4 25 delta 0 0
|
||||
1 10 alpha 1 5 ALPHA 1 100
|
||||
2 15 beta 0 0 0 0
|
||||
3 20 gamma 0 0 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT * FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) FULL JOIN (SELECT * FROM VALUES('key UInt64, a UInt64', (0, 10), (1, 100), (2, 1000))) t3 ON t1.key=t3.key AND t2.key=t3.key AND t3.a!=t1.a AND t3.a!=t2.a ORDER BY ALL;
|
||||
0 0 0 0 0 10
|
||||
0 0 0 0 2 1000
|
||||
0 0 2 10 beta 0 0
|
||||
0 0 4 25 delta 0 0
|
||||
1 10 alpha 1 5 ALPHA 1 100
|
||||
2 15 beta 0 0 0 0
|
||||
3 20 gamma 0 0 0 0
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
@ -0,0 +1,44 @@
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
|
||||
|
||||
CREATE TABLE t1 (
|
||||
key UInt32,
|
||||
a UInt32,
|
||||
attr String
|
||||
) ENGINE = MergeTree ORDER BY key;
|
||||
|
||||
CREATE TABLE t2 (
|
||||
key UInt32,
|
||||
a UInt32,
|
||||
attr String
|
||||
) ENGINE = MergeTree ORDER BY key;
|
||||
|
||||
INSERT INTO t1 (key, a, attr) VALUES (1, 10, 'alpha'), (2, 15, 'beta'), (3, 20, 'gamma');
|
||||
INSERT INTO t2 (key, a, attr) VALUES (1, 5, 'ALPHA'), (2, 10, 'beta'), (4, 25, 'delta');
|
||||
|
||||
|
||||
SET allow_experimental_analyzer=1;
|
||||
SET allow_experimental_join_condition=1;
|
||||
SET join_use_nulls=0;
|
||||
-- { echoOn }
|
||||
|
||||
-- Support for query lower
|
||||
{% for join_type in ['LEFT', 'INNER', 'RIGHT', 'FULL'] -%}
|
||||
{% for algorithm in ['hash', 'grace_hash'] -%}
|
||||
SET join_algorithm='{{ algorithm }}';
|
||||
SELECT * FROM t1 {{ join_type }} JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) ORDER BY ALL;
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
||||
|
||||
|
||||
-- Subquery JOIN
|
||||
{% for join_type in ['LEFT', 'INNER', 'RIGHT', 'FULL'] -%}
|
||||
{% for algorithm in ['hash', 'grace_hash'] -%}
|
||||
SET join_algorithm='{{ algorithm }}';
|
||||
SELECT * FROM t1 {{ join_type }} JOIN t2 ON t1.key = t2.key AND (t1.attr != t2.attr) {{ join_type }} JOIN (SELECT * FROM VALUES('key UInt64, a UInt64', (0, 10), (1, 100), (2, 1000))) t3 ON t1.key=t3.key AND t2.key=t3.key AND t3.a!=t1.a AND t3.a!=t2.a ORDER BY ALL;
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
||||
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
@ -0,0 +1,163 @@
|
||||
-- { echoOn }
|
||||
|
||||
-- These queries work
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND ((t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
1 10 0 0
|
||||
2 15 2 10
|
||||
3 20 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND ((t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
1 10 0 0
|
||||
2 15 2 10
|
||||
3 20 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND ((t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
2 15 2 10
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND ((t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
2 15 2 10
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND ((t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 4 25
|
||||
2 15 2 10
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND ((t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 4 25
|
||||
2 15 2 10
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND ((t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 4 25
|
||||
1 10 0 0
|
||||
2 15 2 10
|
||||
3 20 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND ((t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 4 25
|
||||
1 10 0 0
|
||||
2 15 2 10
|
||||
3 20 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.a=2 AND (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
1 10 0 0
|
||||
2 15 0 0
|
||||
3 20 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.a=2 AND (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
1 10 0 0
|
||||
2 15 0 0
|
||||
3 20 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.a=2 AND (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.a=2 AND (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.a=2 AND (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 2 10
|
||||
0 0 4 25
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.a=2 AND (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 2 10
|
||||
0 0 4 25
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.a=2 AND (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 2 10
|
||||
0 0 4 25
|
||||
1 10 0 0
|
||||
2 15 0 0
|
||||
3 20 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.a=2 AND (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 2 10
|
||||
0 0 4 25
|
||||
1 10 0 0
|
||||
2 15 0 0
|
||||
3 20 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a = (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
1 10 0 0
|
||||
2 15 2 10
|
||||
3 20 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a = (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
1 10 0 0
|
||||
2 15 2 10
|
||||
3 20 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a = (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
2 15 2 10
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a = (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
2 15 2 10
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a = (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 4 25
|
||||
2 15 2 10
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a = (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 4 25
|
||||
2 15 2 10
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a = (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 4 25
|
||||
1 10 0 0
|
||||
2 15 2 10
|
||||
3 20 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a = (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 4 25
|
||||
1 10 0 0
|
||||
2 15 2 10
|
||||
3 20 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
1 10 0 0
|
||||
2 15 2 10
|
||||
3 20 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
1 10 0 0
|
||||
2 15 2 10
|
||||
3 20 0 0
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
2 15 2 10
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
2 15 2 10
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 4 25
|
||||
2 15 2 10
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 4 25
|
||||
2 15 2 10
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 4 25
|
||||
1 10 0 0
|
||||
2 15 2 10
|
||||
3 20 0 0
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
0 0 1 5
|
||||
0 0 4 25
|
||||
1 10 0 0
|
||||
2 15 2 10
|
||||
3 20 0 0
|
@ -0,0 +1,51 @@
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
|
||||
|
||||
CREATE TABLE t1 (
|
||||
key UInt32,
|
||||
a UInt32
|
||||
) ENGINE = MergeTree ORDER BY key;
|
||||
|
||||
CREATE TABLE t2 (
|
||||
key UInt32,
|
||||
a UInt32
|
||||
) ENGINE = MergeTree ORDER BY key;
|
||||
|
||||
INSERT INTO t1 (key, a) VALUES (1, 10), (2, 15), (3, 20);
|
||||
INSERT INTO t2 (key, a) VALUES (1, 5), (2, 10), (4, 25);
|
||||
|
||||
SET allow_experimental_analyzer=1;
|
||||
SET allow_experimental_join_condition=1;
|
||||
SET join_algorithm='hash';
|
||||
-- { echoOn }
|
||||
|
||||
-- These queries work
|
||||
{% for join_type in ['LEFT', 'INNER', 'RIGHT', 'FULL'] -%}
|
||||
{% for algorithm in ['hash', 'grace_hash'] -%}
|
||||
SET join_algorithm='{{ algorithm }}';
|
||||
SELECT t1.*, t2.* FROM t1 {{ join_type }} JOIN t2 ON t1.key = t2.key AND ((t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
||||
|
||||
{% for join_type in ['LEFT', 'INNER', 'RIGHT', 'FULL'] -%}
|
||||
{% for algorithm in ['hash', 'grace_hash'] -%}
|
||||
SET join_algorithm='{{ algorithm }}';
|
||||
SELECT t1.*, t2.* FROM t1 {{ join_type }} JOIN t2 ON t1.key = t2.key AND (t1.a=2 AND (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
||||
|
||||
{% for join_type in ['LEFT', 'INNER', 'RIGHT', 'FULL'] -%}
|
||||
{% for algorithm in ['hash', 'grace_hash'] -%}
|
||||
SET join_algorithm='{{ algorithm }}';
|
||||
SELECT t1.*, t2.* FROM t1 {{ join_type }} JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a = (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
||||
|
||||
|
||||
{% for join_type in ['LEFT', 'INNER', 'RIGHT', 'FULL'] -%}
|
||||
{% for algorithm in ['hash', 'grace_hash'] -%}
|
||||
SET join_algorithm='{{ algorithm }}';
|
||||
SELECT t1.*, t2.* FROM t1 {{ join_type }} JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 10))) ORDER BY ALL;
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
Loading…
Reference in New Issue
Block a user