some tests with full_sorting_merge

This commit is contained in:
vdimir 2022-04-06 14:40:17 +00:00
parent ba787db0bb
commit 075a706583
No known key found for this signature in database
GPG Key ID: 6EE4CE2BEDC51862
4 changed files with 371 additions and 1 deletions

View File

@ -1,3 +1,5 @@
{% for join_algorithm in ['hash', 'full_sorting_merge'] -%}
join_algorithm: {{ join_algorithm }}
any left
0 a1 0
1 a2 0
@ -24,3 +26,4 @@ any right (rev)
2 a3 2 b1
3 a4 0
4 a5 4 b3
{% endfor -%}

View File

@ -10,7 +10,10 @@ INSERT INTO t2 (x, s) VALUES (2, 'b1'), (4, 'b3'), (5, 'b6');
SET join_use_nulls = 0;
SET any_join_distinct_right_table_keys = 0;
SET join_algorithm = 'full_sorting_merge';
{% for join_algorithm in ['hash', 'full_sorting_merge'] -%}
SET join_algorithm = '{{ join_algorithm }}';
SELECT 'join_algorithm: {{ join_algorithm }}';
SELECT 'any left';
SELECT t1.*, t2.* FROM t1 ANY LEFT JOIN t2 USING(x) ORDER BY t1.x, t2.x;
@ -30,5 +33,7 @@ SELECT t1.*, t2.* FROM t1 ANY RIGHT JOIN t2 USING(x) ORDER BY t1.x, t2.x;
SELECT 'any right (rev)';
SELECT t1.*, t2.* FROM t2 ANY RIGHT JOIN t1 USING(x) ORDER BY t1.x, t2.x;
{% endfor -%}
DROP TABLE t1;
DROP TABLE t2;

View File

@ -0,0 +1,286 @@
simple cases, block size = 1
ANY INNER
8 8
2 2
ANY LEFT
1 0 val0
9 0 val1
8 8 val2
5 0 val3
9 0 val4
1 0 val5
10 0 val6
1 0 val7
5 0 val8
2 2 val9
ANY RIGHT
2 2 val0
8 8 val1
8 8 val2
0 7 val3
8 8 val4
0 4 val5
0 6 val6
0 4 val7
2 2 val8
2 2 val9
simple cases, block size = 2
ANY INNER
8 8
2 2
ANY LEFT
1 0 val0
9 0 val1
8 8 val2
5 0 val3
9 0 val4
1 0 val5
10 0 val6
1 0 val7
5 0 val8
2 2 val9
ANY RIGHT
2 2 val0
8 8 val1
8 8 val2
0 7 val3
8 8 val4
0 4 val5
0 6 val6
0 4 val7
2 2 val8
2 2 val9
simple cases, block size = 3
ANY INNER
8 8
2 2
ANY LEFT
1 0 val0
9 0 val1
8 8 val2
5 0 val3
9 0 val4
1 0 val5
10 0 val6
1 0 val7
5 0 val8
2 2 val9
ANY RIGHT
2 2 val0
8 8 val1
8 8 val2
0 7 val3
8 8 val4
0 4 val5
0 6 val6
0 4 val7
2 2 val8
2 2 val9
simple cases, block size = 4
ANY INNER
8 8
2 2
ANY LEFT
1 0 val0
9 0 val1
8 8 val2
5 0 val3
9 0 val4
1 0 val5
10 0 val6
1 0 val7
5 0 val8
2 2 val9
ANY RIGHT
2 2 val0
8 8 val1
8 8 val2
0 7 val3
8 8 val4
0 4 val5
0 6 val6
0 4 val7
2 2 val8
2 2 val9
simple cases, block size = 5
ANY INNER
8 8
2 2
ANY LEFT
1 0 val0
9 0 val1
8 8 val2
5 0 val3
9 0 val4
1 0 val5
10 0 val6
1 0 val7
5 0 val8
2 2 val9
ANY RIGHT
2 2 val0
8 8 val1
8 8 val2
0 7 val3
8 8 val4
0 4 val5
0 6 val6
0 4 val7
2 2 val8
2 2 val9
simple cases, block size = 6
ANY INNER
8 8
2 2
ANY LEFT
1 0 val0
9 0 val1
8 8 val2
5 0 val3
9 0 val4
1 0 val5
10 0 val6
1 0 val7
5 0 val8
2 2 val9
ANY RIGHT
2 2 val0
8 8 val1
8 8 val2
0 7 val3
8 8 val4
0 4 val5
0 6 val6
0 4 val7
2 2 val8
2 2 val9
simple cases, block size = 7
ANY INNER
8 8
2 2
ANY LEFT
1 0 val0
9 0 val1
8 8 val2
5 0 val3
9 0 val4
1 0 val5
10 0 val6
1 0 val7
5 0 val8
2 2 val9
ANY RIGHT
2 2 val0
8 8 val1
8 8 val2
0 7 val3
8 8 val4
0 4 val5
0 6 val6
0 4 val7
2 2 val8
2 2 val9
simple cases, block size = 8
ANY INNER
8 8
2 2
ANY LEFT
1 0 val0
9 0 val1
8 8 val2
5 0 val3
9 0 val4
1 0 val5
10 0 val6
1 0 val7
5 0 val8
2 2 val9
ANY RIGHT
2 2 val0
8 8 val1
8 8 val2
0 7 val3
8 8 val4
0 4 val5
0 6 val6
0 4 val7
2 2 val8
2 2 val9
simple cases, block size = 9
ANY INNER
8 8
2 2
ANY LEFT
1 0 val0
9 0 val1
8 8 val2
5 0 val3
9 0 val4
1 0 val5
10 0 val6
1 0 val7
5 0 val8
2 2 val9
ANY RIGHT
2 2 val0
8 8 val1
8 8 val2
0 7 val3
8 8 val4
0 4 val5
0 6 val6
0 4 val7
2 2 val8
2 2 val9
simple cases, block size = 10
ANY INNER
8 8
2 2
ANY LEFT
1 0 val0
9 0 val1
8 8 val2
5 0 val3
9 0 val4
1 0 val5
10 0 val6
1 0 val7
5 0 val8
2 2 val9
ANY RIGHT
2 2 val0
8 8 val1
8 8 val2
0 7 val3
8 8 val4
0 4 val5
0 6 val6
0 4 val7
2 2 val8
2 2 val9
simple cases: join_use_nulls
ANY INNER
8 8
2 2
ANY LEFT
1 \N val0
9 \N val1
8 8 val2
5 \N val3
9 \N val4
1 \N val5
10 \N val6
1 \N val7
5 \N val8
2 2 val9
ANY RIGHT
2 2 val0
8 8 val1
8 8 val2
\N 7 val3
8 8 val4
\N 4 val5
\N 6 val6
\N 4 val7
2 2 val8
2 2 val9

View File

@ -0,0 +1,76 @@
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
CREATE TABLE t1 (key UInt32, s String) engine = MergeTree ORDER BY key;
CREATE TABLE t2 (key UInt32, s String) engine = MergeTree ORDER BY key;
{% set table_size = 10 %}
INSERT INTO t1
SELECT
sipHash64(number, 'x') % {{ table_size }} + 1 as key,
'val' || toString(number) as s
FROM numbers_mt({{ table_size }});
INSERT INTO t2
SELECT
sipHash64(number, 'y') % {{ table_size }} + 1 as key,
'val' || toString(number) as s
FROM numbers_mt({{ table_size }});
SET join_algorithm = 'full_sorting_merge';
{% for block_size in range (1, table_size + 1) %}
SET max_block_size = {{ block_size }};
SELECT 'simple cases, block size = {{ block_size }}';
SELECT 'ANY INNER';
SELECT t1.key, t2.key FROM t1
ANY INNER JOIN t2
ON t1.key == t2.key
ORDER BY t1.s, t2.s
;
SELECT 'ANY LEFT';
SELECT t1.key, t2.key, t1.s FROM t1
ANY LEFT JOIN t2
ON t1.key == t2.key
ORDER BY t1.s
;
SELECT 'ANY RIGHT';
SELECT t1.key, t2.key, t2.s FROM t1
ANY RIGHT JOIN t2
ON t1.key == t2.key
ORDER BY t2.s
;
{% endfor %}
SET join_use_nulls = 1;
SELECT 'simple cases: join_use_nulls';
SELECT 'ANY INNER';
SELECT t1.key, t2.key FROM t1
ANY INNER JOIN t2
ON t1.key == t2.key
ORDER BY t1.s, t2.s
;
SELECT 'ANY LEFT';
SELECT t1.key, t2.key, t1.s FROM t1
ANY LEFT JOIN t2
ON t1.key == t2.key
ORDER BY t1.s
;
SELECT 'ANY RIGHT';
SELECT t1.key, t2.key, t2.s FROM t1
ANY RIGHT JOIN t2
ON t1.key == t2.key
ORDER BY t2.s
;