Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
b0fd9157
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,发现更多精彩内容 >>
提交
b0fd9157
编写于
3月 28, 2019
作者:
M
Martijn Bakker
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
remove the ASOFSplit struct
上级
ac68fc80
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
31 addition
and
34 deletion
+31
-34
dbms/src/Common/ColumnsHashing.h
dbms/src/Common/ColumnsHashing.h
+5
-0
dbms/src/Interpreters/Join.cpp
dbms/src/Interpreters/Join.cpp
+26
-34
dbms/tests/queries/0_stateless/00927_asof_joins.reference
dbms/tests/queries/0_stateless/00927_asof_joins.reference
+0
-0
dbms/tests/queries/0_stateless/00927_asof_joins.sql
dbms/tests/queries/0_stateless/00927_asof_joins.sql
+0
-0
未找到文件。
dbms/src/Common/ColumnsHashing.h
浏览文件 @
b0fd9157
...
...
@@ -36,6 +36,11 @@ struct HashMethodOneNumber
vec
=
key_columns
[
0
]
->
getRawData
().
data
;
}
HashMethodOneNumber
(
const
IColumn
*
column
)
{
vec
=
column
->
getRawData
().
data
;
}
/// Creates context. Method is called once and result context is used in all threads.
using
Base
::
createContext
;
/// (const HashMethodContext::Settings &) -> HashMethodContextPtr
...
...
dbms/src/Interpreters/Join.cpp
浏览文件 @
b0fd9157
...
...
@@ -119,33 +119,24 @@ Join::Type Join::chooseMethod(const ColumnRawPtrs & key_columns, Sizes & key_siz
return
Type
::
hashed
;
}
struct
ASOFSplit
static
const
IColumn
*
extractAsofColumn
(
const
ColumnRawPtrs
&
key_columns
)
{
ColumnRawPtrs
key_columns
;
Sizes
key_sizes
;
ColumnRawPtrs
asof_columns
;
Sizes
asof_sizes
;
};
return
key_columns
.
back
();
}
template
<
ASTTableJoin
::
Strictness
STRICTNESS
>
ASOFSplit
split_asof_columns
(
const
ColumnRawPtrs
&
key_columns
,
const
Sizes
&
key_sizes
)
template
<
typename
KeyGetter
,
ASTTableJoin
::
Strictness
STRICTNESS
>
static
KeyGetter
createKeyGetter
(
const
ColumnRawPtrs
&
key_columns
,
const
Sizes
&
key_sizes
)
{
ASOFSplit
spl
;
spl
.
key_columns
=
key_columns
;
spl
.
key_sizes
=
key_sizes
;
if
constexpr
(
STRICTNESS
==
ASTTableJoin
::
Strictness
::
Asof
)
{
spl
.
asof_columns
.
push_back
(
spl
.
key_columns
.
back
())
;
spl
.
key_columns
.
pop_back
()
;
spl
.
asof_sizes
.
push_back
(
spl
.
key_sizes
.
back
()
);
spl
.
key_sizes
.
pop_back
(
);
auto
key_column_copy
=
key_columns
;
auto
key_size_copy
=
key_sizes
;
key_column_copy
.
pop_back
();
key_size_copy
.
pop_back
(
);
return
KeyGetter
(
key_column_copy
,
key_size_copy
,
nullptr
);
}
return
spl
;
else
return
KeyGetter
(
key_columns
,
key_sizes
,
nullptr
)
;
}
template
<
Join
::
Type
type
,
typename
Value
,
typename
Mapped
>
...
...
@@ -283,9 +274,7 @@ void Join::setSampleBlock(const Block & block)
if
(
strictness
==
ASTTableJoin
::
Strictness
::
Asof
)
{
if
(
kind
!=
ASTTableJoin
::
Kind
::
Left
)
{
throw
Exception
(
"ASOF only supports LEFT as base join"
,
ErrorCodes
::
NOT_IMPLEMENTED
);
}
if
(
key_columns
.
back
()
->
sizeOfValueIfFixed
()
!=
sizeof
(
ASOFTimeType
))
{
...
...
@@ -296,9 +285,7 @@ void Join::setSampleBlock(const Block & block)
key_columns
.
pop_back
();
if
(
key_columns
.
empty
())
{
throw
Exception
(
"ASOF join cannot be done without a joining column"
,
ErrorCodes
::
LOGICAL_ERROR
);
}
/// this is going to set up the appropriate hash table for the direct lookup part of the join
/// However, this does not depend on the size of the asof join key (as that goes into the BST)
...
...
@@ -438,7 +425,7 @@ namespace
}
auto
k
=
asof_getter
.
getKey
(
i
,
pool
);
time_series_map
->
insert
(
k
,
stored_block
,
i
);
std
::
cout
<<
"inserted key into time series map="
<<
k
<<
" result="
<<
time_series_map
->
dumpStructure
()
<<
std
::
endl
;
//
std::cout << "inserted key into time series map=" << k << " result=" << time_series_map->dumpStructure() << std::endl;
}
};
...
...
@@ -448,8 +435,11 @@ namespace
Map
&
map
,
size_t
rows
,
const
ColumnRawPtrs
&
key_columns
,
const
Sizes
&
key_sizes
,
Block
*
stored_block
,
ConstNullMapPtr
null_map
,
Arena
&
pool
)
{
auto
spl
=
split_asof_columns
<
STRICTNESS
>
(
key_columns
,
key_sizes
);
KeyGetter
key_getter
(
spl
.
key_columns
,
spl
.
key_sizes
,
nullptr
);
const
IColumn
*
asof_column
[[
maybe_unused
]]
=
nullptr
;
if
constexpr
(
STRICTNESS
==
ASTTableJoin
::
Strictness
::
Asof
)
asof_column
=
extractAsofColumn
(
key_columns
);
auto
key_getter
=
createKeyGetter
<
KeyGetter
,
STRICTNESS
>
(
key_columns
,
key_sizes
);
for
(
size_t
i
=
0
;
i
<
rows
;
++
i
)
{
...
...
@@ -458,10 +448,9 @@ namespace
if
constexpr
(
STRICTNESS
==
ASTTableJoin
::
Strictness
::
Asof
)
{
Join
::
AsofGetterType
asof_getter
(
spl
.
asof_columns
,
spl
.
asof_sizes
,
nullptr
);
auto
asof_getter
=
Join
::
AsofGetterType
(
asof_column
);
Inserter
<
STRICTNESS
,
Map
,
KeyGetter
>::
insert
(
map
,
key_getter
,
asof_getter
,
stored_block
,
i
,
pool
);
}
else
}
else
Inserter
<
STRICTNESS
,
Map
,
KeyGetter
>::
insert
(
map
,
key_getter
,
stored_block
,
i
,
pool
);
}
}
...
...
@@ -705,8 +694,11 @@ std::unique_ptr<IColumn::Offsets> NO_INLINE joinRightIndexedColumns(
Arena
pool
;
auto
spl
=
split_asof_columns
<
STRICTNESS
>
(
key_columns
,
key_sizes
);
KeyGetter
key_getter
(
spl
.
key_columns
,
spl
.
key_sizes
,
nullptr
);
const
IColumn
*
asof_column
[[
maybe_unused
]]
=
nullptr
;
if
constexpr
(
STRICTNESS
==
ASTTableJoin
::
Strictness
::
Asof
)
asof_column
=
extractAsofColumn
(
key_columns
);
auto
key_getter
=
createKeyGetter
<
KeyGetter
,
STRICTNESS
>
(
key_columns
,
key_sizes
);
IColumn
::
Offset
current_offset
=
0
;
...
...
@@ -726,7 +718,7 @@ std::unique_ptr<IColumn::Offsets> NO_INLINE joinRightIndexedColumns(
if
constexpr
(
STRICTNESS
==
ASTTableJoin
::
Strictness
::
Asof
)
{
Join
::
AsofGetterType
asof_getter
(
spl
.
asof_columns
,
spl
.
asof_sizes
,
nullptr
);
Join
::
AsofGetterType
asof_getter
(
asof_column
);
auto
asof_key
=
asof_getter
.
getKey
(
i
,
pool
);
bool
actually_found
=
addFoundRowAsof
<
Map
>
(
mapped
,
added_columns
,
current_offset
,
asof_key
);
...
...
dbms/tests/queries/0_stateless/0092
6
_asof_joins.reference
→
dbms/tests/queries/0_stateless/0092
7
_asof_joins.reference
浏览文件 @
b0fd9157
文件已移动
dbms/tests/queries/0_stateless/0092
6
_asof_joins.sql
→
dbms/tests/queries/0_stateless/0092
7
_asof_joins.sql
浏览文件 @
b0fd9157
文件已移动
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录