Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
30ece2c2
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
30ece2c2
编写于
4月 03, 2021
作者:
A
alexey-milovidov
提交者:
GitHub
4月 03, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #22510 from vdimir/merge-join-lc-bug-fix
Convert right block to full in MergeJoin
上级
143f4b59
840ecb5e
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
25 addition
and
1 deletion
+25
-1
src/Interpreters/MergeJoin.cpp
src/Interpreters/MergeJoin.cpp
+4
-1
src/Interpreters/MergeJoin.h
src/Interpreters/MergeJoin.h
+3
-0
tests/queries/0_stateless/01785_pmj_lc_bug.reference
tests/queries/0_stateless/01785_pmj_lc_bug.reference
+4
-0
tests/queries/0_stateless/01785_pmj_lc_bug.sql
tests/queries/0_stateless/01785_pmj_lc_bug.sql
+14
-0
未找到文件。
src/Interpreters/MergeJoin.cpp
浏览文件 @
30ece2c2
...
...
@@ -76,6 +76,7 @@ int nullableCompareAt(const IColumn & left_column, const IColumn & right_column,
return
left_column
.
compareAt
(
lhs_pos
,
rhs_pos
,
right_column
,
null_direction_hint
);
}
/// Get first and last row from sorted block
Block
extractMinMax
(
const
Block
&
block
,
const
Block
&
keys
)
{
if
(
block
.
rows
()
==
0
)
...
...
@@ -86,7 +87,7 @@ Block extractMinMax(const Block & block, const Block & keys)
for
(
size_t
i
=
0
;
i
<
columns
.
size
();
++
i
)
{
const
auto
&
src_column
=
block
.
getByName
(
keys
.
getByPosition
(
i
).
name
);
const
auto
&
src_column
=
block
.
getByName
(
min_max
.
getByPosition
(
i
).
name
);
columns
[
i
]
->
insertFrom
(
*
src_column
.
column
,
0
);
columns
[
i
]
->
insertFrom
(
*
src_column
.
column
,
block
.
rows
()
-
1
);
...
...
@@ -465,6 +466,7 @@ MergeJoin::MergeJoin(std::shared_ptr<TableJoin> table_join_, const Block & right
table_join
->
splitAdditionalColumns
(
right_sample_block
,
right_table_keys
,
right_columns_to_add
);
JoinCommon
::
removeLowCardinalityInplace
(
right_table_keys
);
JoinCommon
::
removeLowCardinalityInplace
(
right_sample_block
,
table_join
->
keyNamesRight
());
const
NameSet
required_right_keys
=
table_join
->
requiredRightKeys
();
for
(
const
auto
&
column
:
right_table_keys
)
...
...
@@ -485,6 +487,7 @@ MergeJoin::MergeJoin(std::shared_ptr<TableJoin> table_join_, const Block & right
left_blocks_buffer
=
std
::
make_shared
<
SortedBlocksBuffer
>
(
left_sort_description
,
max_bytes
);
}
/// Has to be called even if totals are empty
void
MergeJoin
::
setTotals
(
const
Block
&
totals_block
)
{
totals
=
totals_block
;
...
...
src/Interpreters/MergeJoin.h
浏览文件 @
30ece2c2
...
...
@@ -76,12 +76,15 @@ private:
Block
right_table_keys
;
Block
right_columns_to_add
;
SortedBlocksWriter
::
Blocks
right_blocks
;
/// Each block stores first and last row from corresponding sorted block on disk
Blocks
min_max_right_blocks
;
std
::
shared_ptr
<
SortedBlocksBuffer
>
left_blocks_buffer
;
std
::
shared_ptr
<
RowBitmaps
>
used_rows_bitmap
;
mutable
std
::
unique_ptr
<
Cache
>
cached_right_blocks
;
std
::
vector
<
std
::
shared_ptr
<
Block
>>
loaded_right_blocks
;
std
::
unique_ptr
<
SortedBlocksWriter
>
disk_writer
;
/// Set of files with sorted blocks
SortedBlocksWriter
::
SortedFiles
flushed_right_blocks
;
Block
totals
;
std
::
atomic
<
bool
>
is_in_memory
{
true
};
...
...
tests/queries/0_stateless/01785_pmj_lc_bug.reference
0 → 100644
浏览文件 @
30ece2c2
1
1
1
1
tests/queries/0_stateless/01785_pmj_lc_bug.sql
0 → 100644
浏览文件 @
30ece2c2
SET
join_algorithm
=
'partial_merge'
;
SET
max_bytes_in_join
=
'100'
;
CREATE
TABLE
foo_lc
(
n
LowCardinality
(
String
))
ENGINE
=
Memory
;
CREATE
TABLE
foo
(
n
String
)
ENGINE
=
Memory
;
INSERT
INTO
foo
SELECT
toString
(
number
)
AS
n
FROM
system
.
numbers
LIMIT
1025
;
INSERT
INTO
foo_lc
SELECT
toString
(
number
)
AS
n
FROM
system
.
numbers
LIMIT
1025
;
SELECT
1025
==
count
(
n
)
FROM
foo_lc
AS
t1
ANY
LEFT
JOIN
foo_lc
AS
t2
ON
t1
.
n
==
t2
.
n
;
SELECT
1025
==
count
(
n
)
FROM
foo
AS
t1
ANY
LEFT
JOIN
foo_lc
AS
t2
ON
t1
.
n
==
t2
.
n
;
SELECT
1025
==
count
(
n
)
FROM
foo_lc
AS
t1
ANY
LEFT
JOIN
foo
AS
t2
ON
t1
.
n
==
t2
.
n
;
SELECT
1025
==
count
(
n
)
FROM
foo_lc
AS
t1
ALL
LEFT
JOIN
foo_lc
AS
t2
ON
t1
.
n
==
t2
.
n
;
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录