Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
2daef385
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,发现更多精彩内容 >>
提交
2daef385
编写于
4月 02, 2020
作者:
N
Nikolai Kochetov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use SortedTransforms in merge.
上级
20fc52f0
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
94 addition
and
112 deletion
+94
-112
dbms/src/Processors/Merges/AggregatingSortedTransform.h
dbms/src/Processors/Merges/AggregatingSortedTransform.h
+1
-1
dbms/src/Processors/Merges/GraphiteRollupSortedTransform.cpp
dbms/src/Processors/Merges/GraphiteRollupSortedTransform.cpp
+1
-1
dbms/src/Processors/Merges/GraphiteRollupSortedTransform.h
dbms/src/Processors/Merges/GraphiteRollupSortedTransform.h
+1
-1
dbms/src/Processors/Merges/ReplacingSortedTransform.cpp
dbms/src/Processors/Merges/ReplacingSortedTransform.cpp
+1
-1
dbms/src/Processors/Merges/ReplacingSortedTransform.h
dbms/src/Processors/Merges/ReplacingSortedTransform.h
+1
-1
dbms/src/Processors/Merges/SummingSortedTransform.cpp
dbms/src/Processors/Merges/SummingSortedTransform.cpp
+1
-1
dbms/src/Processors/Merges/SummingSortedTransform.h
dbms/src/Processors/Merges/SummingSortedTransform.h
+1
-1
dbms/src/Processors/Merges/VersionedCollapsingTransform.cpp
dbms/src/Processors/Merges/VersionedCollapsingTransform.cpp
+1
-1
dbms/src/Processors/Merges/VersionedCollapsingTransform.h
dbms/src/Processors/Merges/VersionedCollapsingTransform.h
+5
-5
dbms/src/Storages/MergeTree/MergeTreeData.cpp
dbms/src/Storages/MergeTree/MergeTreeData.cpp
+1
-1
dbms/src/Storages/MergeTree/MergeTreeDataMergerMutator.cpp
dbms/src/Storages/MergeTree/MergeTreeDataMergerMutator.cpp
+46
-33
dbms/src/Storages/MergeTree/MergeTreeSequentialSource.cpp
dbms/src/Storages/MergeTree/MergeTreeSequentialSource.cpp
+24
-48
dbms/src/Storages/MergeTree/MergeTreeSequentialSource.h
dbms/src/Storages/MergeTree/MergeTreeSequentialSource.h
+10
-17
未找到文件。
dbms/src/Processors/Merges/AggregatingSortedTransform.h
浏览文件 @
2daef385
...
...
@@ -19,7 +19,7 @@ class AggregatingSortedTransform : public IMergingTransform
{
public:
AggregatingSortedTransform
(
size_t
num_inputs
,
const
Block
&
header
,
const
Block
&
header
,
size_t
num_inputs
,
SortDescription
description_
,
size_t
max_block_size
);
struct
SimpleAggregateDescription
;
...
...
dbms/src/Processors/Merges/GraphiteRollupSortedTransform.cpp
浏览文件 @
2daef385
...
...
@@ -22,7 +22,7 @@ static GraphiteRollupSortedTransform::ColumnsDefinition defineColumns(
}
GraphiteRollupSortedTransform
::
GraphiteRollupSortedTransform
(
size_t
num_inputs
,
const
Block
&
header
,
const
Block
&
header
,
size_t
num_inputs
,
SortDescription
description_
,
size_t
max_block_size
,
Graphite
::
Params
params_
,
time_t
time_of_merge_
)
:
IMergingTransform
(
num_inputs
,
header
,
header
,
true
)
...
...
dbms/src/Processors/Merges/GraphiteRollupSortedTransform.h
浏览文件 @
2daef385
...
...
@@ -151,7 +151,7 @@ class GraphiteRollupSortedTransform : public IMergingTransform
{
public:
GraphiteRollupSortedTransform
(
size_t
num_inputs
,
const
Block
&
header
,
const
Block
&
header
,
size_t
num_inputs
,
SortDescription
description_
,
size_t
max_block_size
,
Graphite
::
Params
params_
,
time_t
time_of_merge_
);
...
...
dbms/src/Processors/Merges/ReplacingSortedTransform.cpp
浏览文件 @
2daef385
...
...
@@ -10,7 +10,7 @@ namespace ErrorCodes
}
ReplacingSortedTransform
::
ReplacingSortedTransform
(
size_t
num_inputs
,
const
Block
&
header
,
const
Block
&
header
,
size_t
num_inputs
,
SortDescription
description_
,
const
String
&
version_column
,
size_t
max_block_size
,
WriteBuffer
*
out_row_sources_buf_
,
...
...
dbms/src/Processors/Merges/ReplacingSortedTransform.h
浏览文件 @
2daef385
...
...
@@ -17,7 +17,7 @@ class ReplacingSortedTransform final : public IMergingTransform
{
public:
ReplacingSortedTransform
(
size_t
num_inputs
,
const
Block
&
header
,
const
Block
&
header
,
size_t
num_inputs
,
SortDescription
description_
,
const
String
&
version_column
,
size_t
max_block_size
,
WriteBuffer
*
out_row_sources_buf_
=
nullptr
,
...
...
dbms/src/Processors/Merges/SummingSortedTransform.cpp
浏览文件 @
2daef385
...
...
@@ -366,7 +366,7 @@ namespace
}
SummingSortedTransform
::
SummingSortedTransform
(
size_t
num_inputs
,
const
Block
&
header
,
const
Block
&
header
,
size_t
num_inputs
,
SortDescription
description_
,
/// List of columns to be summed. If empty, all numeric columns that are not in the description are taken.
const
Names
&
column_names_to_sum
,
...
...
dbms/src/Processors/Merges/SummingSortedTransform.h
浏览文件 @
2daef385
...
...
@@ -19,7 +19,7 @@ class SummingSortedTransform final : public IMergingTransform
public:
SummingSortedTransform
(
size_t
num_inputs
,
const
Block
&
header
,
const
Block
&
header
,
size_t
num_inputs
,
SortDescription
description_
,
/// List of columns to be summed. If empty, all numeric columns that are not in the description are taken.
const
Names
&
column_names_to_sum
,
...
...
dbms/src/Processors/Merges/VersionedCollapsingTransform.cpp
浏览文件 @
2daef385
...
...
@@ -8,7 +8,7 @@ namespace DB
static
const
size_t
MAX_ROWS_IN_MULTIVERSION_QUEUE
=
8192
;
VersionedCollapsingTransform
::
VersionedCollapsingTransform
(
size_t
num_inputs
,
const
Block
&
header
,
const
Block
&
header
,
size_t
num_inputs
,
SortDescription
description_
,
const
String
&
sign_column_
,
size_t
max_block_size
,
WriteBuffer
*
out_row_sources_buf_
,
...
...
dbms/src/Processors/Merges/VersionedCollapsingTransform.h
浏览文件 @
2daef385
...
...
@@ -20,11 +20,11 @@ class VersionedCollapsingTransform final : public IMergingTransform
public:
/// Don't need version column. It's in primary key.
VersionedCollapsingTransform
(
size_t
num_inputs
,
const
Block
&
header
,
SortDescription
description_
,
const
String
&
sign_column_
,
size_t
max_block_size
,
WriteBuffer
*
out_row_sources_buf_
=
nullptr
,
bool
use_average_block_sizes
=
false
);
const
Block
&
header
,
size_t
num_inputs
,
SortDescription
description_
,
const
String
&
sign_column_
,
size_t
max_block_size
,
WriteBuffer
*
out_row_sources_buf_
=
nullptr
,
bool
use_average_block_sizes
=
false
);
String
getName
()
const
override
{
return
"VersionedCollapsingTransform"
;
}
void
work
()
override
;
...
...
dbms/src/Storages/MergeTree/MergeTreeData.cpp
浏览文件 @
2daef385
...
...
@@ -30,7 +30,7 @@
#include <Storages/MergeTree/MergeTreeData.h>
#include <Storages/MergeTree/MergeTreeDataPartCompact.h>
#include <Storages/MergeTree/MergeTreeDataPartWide.h>
#include <Storages/MergeTree/MergeTreeSequential
BlockInputStream
.h>
#include <Storages/MergeTree/MergeTreeSequential
Source
.h>
#include <Storages/MergeTree/MergedBlockOutputStream.h>
#include <Storages/MergeTree/MergedColumnOnlyOutputStream.h>
#include <Storages/MergeTree/checkDataPart.h>
...
...
dbms/src/Storages/MergeTree/MergeTreeDataMergerMutator.cpp
浏览文件 @
2daef385
#include "MergeTreeDataMergerMutator.h"
#include <Storages/MergeTree/MergeTreeSequential
BlockInputStream
.h>
#include <Storages/MergeTree/MergeTreeSequential
Source
.h>
#include <Storages/MergeTree/MergedBlockOutputStream.h>
#include <Storages/MergeTree/MergedColumnOnlyOutputStream.h>
#include <Disks/DiskSpaceMonitor.h>
...
...
@@ -12,16 +12,19 @@
#include <DataStreams/TTLBlockInputStream.h>
#include <DataStreams/DistinctSortedBlockInputStream.h>
#include <DataStreams/ExpressionBlockInputStream.h>
#include <DataStreams/MergingSortedBlockInputStream.h>
#include <DataStreams/CollapsingSortedBlockInputStream.h>
#include <DataStreams/SummingSortedBlockInputStream.h>
#include <DataStreams/ReplacingSortedBlockInputStream.h>
#include <DataStreams/GraphiteRollupSortedBlockInputStream.h>
#include <DataStreams/AggregatingSortedBlockInputStream.h>
#include <DataStreams/VersionedCollapsingSortedBlockInputStream.h>
#include <DataStreams/MaterializingBlockInputStream.h>
#include <DataStreams/ConcatBlockInputStream.h>
#include <DataStreams/ColumnGathererStream.h>
#include <Processors/Merges/MergingSortedTransform.h>
#include <Processors/Merges/CollapsingSortedTransform.h>
#include <Processors/Merges/SummingSortedTransform.h>
#include <Processors/Merges/ReplacingSortedTransform.h>
#include <Processors/Merges/GraphiteRollupSortedTransform.h>
#include <Processors/Merges/AggregatingSortedTransform.h>
#include <Processors/Merges/VersionedCollapsingTransform.h>
#include <Processors/Transforms/ExpressionTransform.h>
#include <Processors/Transforms/MaterializingTransform.h>
#include <Processors/Executors/TreeExecutorBlockInputStream.h>
#include <Interpreters/MutationsInterpreter.h>
#include <Common/SimpleIncrement.h>
#include <Common/interpolate.h>
...
...
@@ -660,7 +663,7 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mergePartsToTempor
/** Read from all parts, merge and write into a new one.
* In passing, we calculate expression for sorting.
*/
BlockInputStreams
src_stream
s
;
Pipes
pipe
s
;
UInt64
watch_prev_elapsed
=
0
;
/// We count total amount of bytes in parts
...
...
@@ -687,18 +690,24 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mergePartsToTempor
for
(
const
auto
&
part
:
parts
)
{
auto
input
=
std
::
make_unique
<
MergeTreeSequential
BlockInputStream
>
(
auto
input
=
std
::
make_unique
<
MergeTreeSequential
Source
>
(
data
,
part
,
merging_column_names
,
read_with_direct_io
,
true
);
input
->
setProgressCallback
(
MergeProgressCallback
(
merge_entry
,
watch_prev_elapsed
,
horizontal_stage_progress
));
BlockInputStreamPtr
stream
=
std
::
move
(
input
);
Pipe
pipe
(
std
::
move
(
input
));
if
(
data
.
hasPrimaryKey
()
||
data
.
hasSkipIndices
())
stream
=
std
::
make_shared
<
MaterializingBlockInputStream
>
(
std
::
make_shared
<
ExpressionBlockInputStream
>
(
stream
,
data
.
sorting_key_and_skip_indices_expr
));
{
auto
expr
=
std
::
make_shared
<
ExpressionTransform
>
(
pipe
.
getHeader
(),
data
.
sorting_key_and_skip_indices_expr
);
pipe
.
addSimpleTransform
(
std
::
move
(
expr
));
src_streams
.
emplace_back
(
stream
);
auto
materializing
=
std
::
make_shared
<
MaterializingTransform
>
(
pipe
.
getHeader
());
pipe
.
addSimpleTransform
(
std
::
move
(
materializing
));
}
pipes
.
emplace_back
(
std
::
move
(
pipe
));
}
Names
sort_columns
=
data
.
sorting_key_columns
;
...
...
@@ -706,14 +715,14 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mergePartsToTempor
size_t
sort_columns_size
=
sort_columns
.
size
();
sort_description
.
reserve
(
sort_columns_size
);
Block
header
=
src_streams
.
at
(
0
)
->
getHeader
();
Block
header
=
pipes
.
at
(
0
).
getHeader
();
for
(
size_t
i
=
0
;
i
<
sort_columns_size
;
++
i
)
sort_description
.
emplace_back
(
header
.
getPositionByName
(
sort_columns
[
i
]),
1
,
1
);
/// The order of the streams is important: when the key is matched, the elements go in the order of the source stream number.
/// In the merged part, the lines with the same key must be in the ascending order of the identifier of original part,
/// that is going in insertion order.
std
::
shared_ptr
<
IBlockInputStream
>
merged_strea
m
;
ProcessorPtr
merged_transfor
m
;
/// If merge is vertical we cannot calculate it
bool
blocks_are_granules_size
=
(
merge_alg
==
MergeAlgorithm
::
Vertical
);
...
...
@@ -722,45 +731,48 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mergePartsToTempor
switch
(
data
.
merging_params
.
mode
)
{
case
MergeTreeData
::
MergingParams
::
Ordinary
:
merged_
stream
=
std
::
make_unique
<
MergingSortedBlockInputStrea
m
>
(
src_streams
,
sort_description
,
merge_block_size
,
0
,
rows_sources_write_buf
.
get
(),
true
,
blocks_are_granules_size
);
merged_
transform
=
std
::
make_unique
<
MergingSortedTransfor
m
>
(
header
,
pipes
.
size
()
,
sort_description
,
merge_block_size
,
0
,
rows_sources_write_buf
.
get
(),
true
,
blocks_are_granules_size
);
break
;
case
MergeTreeData
::
MergingParams
::
Collapsing
:
merged_
stream
=
std
::
make_unique
<
CollapsingSortedBlockInputStrea
m
>
(
src_streams
,
sort_description
,
data
.
merging_params
.
sign_column
,
merged_
transform
=
std
::
make_unique
<
CollapsingSortedTransfor
m
>
(
header
,
pipes
.
size
()
,
sort_description
,
data
.
merging_params
.
sign_column
,
merge_block_size
,
rows_sources_write_buf
.
get
(),
blocks_are_granules_size
);
break
;
case
MergeTreeData
::
MergingParams
::
Summing
:
merged_
stream
=
std
::
make_unique
<
SummingSortedBlockInputStrea
m
>
(
src_streams
,
sort_description
,
data
.
merging_params
.
columns_to_sum
,
merge_block_size
);
merged_
transform
=
std
::
make_unique
<
SummingSortedTransfor
m
>
(
header
,
pipes
.
size
()
,
sort_description
,
data
.
merging_params
.
columns_to_sum
,
merge_block_size
);
break
;
case
MergeTreeData
::
MergingParams
::
Aggregating
:
merged_
stream
=
std
::
make_unique
<
AggregatingSortedBlockInputStrea
m
>
(
src_streams
,
sort_description
,
merge_block_size
);
merged_
transform
=
std
::
make_unique
<
AggregatingSortedTransfor
m
>
(
header
,
pipes
.
size
()
,
sort_description
,
merge_block_size
);
break
;
case
MergeTreeData
::
MergingParams
::
Replacing
:
merged_
stream
=
std
::
make_unique
<
ReplacingSortedBlockInputStrea
m
>
(
src_streams
,
sort_description
,
data
.
merging_params
.
version_column
,
merged_
transform
=
std
::
make_unique
<
ReplacingSortedTransfor
m
>
(
header
,
pipes
.
size
()
,
sort_description
,
data
.
merging_params
.
version_column
,
merge_block_size
,
rows_sources_write_buf
.
get
(),
blocks_are_granules_size
);
break
;
case
MergeTreeData
::
MergingParams
::
Graphite
:
merged_
stream
=
std
::
make_unique
<
GraphiteRollupSortedBlockInputStrea
m
>
(
src_streams
,
sort_description
,
merge_block_size
,
merged_
transform
=
std
::
make_unique
<
GraphiteRollupSortedTransfor
m
>
(
header
,
pipes
.
size
()
,
sort_description
,
merge_block_size
,
data
.
merging_params
.
graphite_params
,
time_of_merge
);
break
;
case
MergeTreeData
::
MergingParams
::
VersionedCollapsing
:
merged_
stream
=
std
::
make_unique
<
VersionedCollapsingSortedBlockInputStrea
m
>
(
src_streams
,
sort_description
,
data
.
merging_params
.
sign_column
,
merged_
transform
=
std
::
make_unique
<
VersionedCollapsingTransfor
m
>
(
header
,
pipes
.
size
()
,
sort_description
,
data
.
merging_params
.
sign_column
,
merge_block_size
,
rows_sources_write_buf
.
get
(),
blocks_are_granules_size
);
break
;
}
Pipe
merged_pipe
(
std
::
move
(
pipes
),
std
::
move
(
merged_transform
));
BlockInputStreamPtr
merged_stream
=
std
::
make_shared
<
TreeExecutorBlockInputStream
>
(
std
::
move
(
merged_pipe
));
if
(
deduplicate
)
merged_stream
=
std
::
make_shared
<
DistinctSortedBlockInputStream
>
(
merged_stream
,
SizeLimits
(),
0
/*limit_hint*/
,
Names
());
...
...
@@ -857,13 +869,14 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mergePartsToTempor
MergeStageProgress
column_progress
(
progress_before
,
column_sizes
->
columnWeight
(
column_name
));
for
(
size_t
part_num
=
0
;
part_num
<
parts
.
size
();
++
part_num
)
{
auto
column_part_s
tream
=
std
::
make_shared
<
MergeTreeSequentialBlockInputStream
>
(
auto
column_part_s
ource
=
std
::
make_shared
<
MergeTreeSequentialSource
>
(
data
,
parts
[
part_num
],
column_names
,
read_with_direct_io
,
true
);
column_part_s
tream
->
setProgressCallback
(
column_part_s
ource
->
setProgressCallback
(
MergeProgressCallback
(
merge_entry
,
watch_prev_elapsed
,
column_progress
));
column_part_streams
[
part_num
]
=
std
::
move
(
column_part_stream
);
column_part_streams
[
part_num
]
=
std
::
make_shared
<
TreeExecutorBlockInputStream
>
(
Pipe
(
std
::
move
(
column_part_source
)));
}
rows_sources_read_buf
.
seek
(
0
,
0
);
...
...
dbms/src/Storages/MergeTree/MergeTreeSequential
BlockInputStream
.cpp
→
dbms/src/Storages/MergeTree/MergeTreeSequential
Source
.cpp
浏览文件 @
2daef385
#include <Storages/MergeTree/MergeTreeSequential
BlockInputStream
.h>
#include <Storages/MergeTree/MergeTreeSequential
Source
.h>
#include <Storages/MergeTree/MergeTreeBlockReadUtils.h>
namespace
DB
...
...
@@ -8,16 +8,17 @@ namespace ErrorCodes
extern
const
int
MEMORY_LIMIT_EXCEEDED
;
}
MergeTreeSequential
BlockInputStream
::
MergeTreeSequentialBlockInputStream
(
MergeTreeSequential
Source
::
MergeTreeSequentialSource
(
const
MergeTreeData
&
storage_
,
const
MergeTreeData
::
DataPartPtr
&
data_part_
,
MergeTreeData
::
DataPartPtr
data_part_
,
Names
columns_to_read_
,
bool
read_with_direct_io_
,
bool
take_column_types_from_storage
,
bool
quiet
)
:
storage
(
storage_
)
,
data_part
(
data_part_
)
,
columns_to_read
(
columns_to_read_
)
:
SourceWithProgress
(
storage_
.
getSampleBlockForColumns
(
columns_to_read
))
,
storage
(
storage_
)
,
data_part
(
std
::
move
(
data_part_
))
,
columns_to_read
(
std
::
move
(
columns_to_read_
))
,
read_with_direct_io
(
read_with_direct_io_
)
,
mark_cache
(
storage
.
global_context
.
getMarkCache
())
{
...
...
@@ -33,8 +34,6 @@ MergeTreeSequentialBlockInputStream::MergeTreeSequentialBlockInputStream(
addTotalRowsApprox
(
data_part
->
rows_count
);
header
=
storage
.
getSampleBlockForColumns
(
columns_to_read
);
/// Add columns because we don't want to read empty blocks
injectRequiredColumns
(
storage
,
data_part
,
columns_to_read
);
NamesAndTypesList
columns_for_reader
;
...
...
@@ -62,33 +61,11 @@ MergeTreeSequentialBlockInputStream::MergeTreeSequentialBlockInputStream(
/* uncompressed_cache = */
nullptr
,
mark_cache
.
get
(),
reader_settings
);
}
void
MergeTreeSequentialBlockInputStream
::
fixHeader
(
Block
&
header_block
)
const
{
/// Types may be different during ALTER (when this stream is used to perform an ALTER).
for
(
const
auto
&
name_type
:
data_part
->
getColumns
())
{
if
(
header_block
.
has
(
name_type
.
name
))
{
auto
&
elem
=
header_block
.
getByName
(
name_type
.
name
);
if
(
!
elem
.
type
->
equals
(
*
name_type
.
type
))
{
elem
.
type
=
name_type
.
type
;
elem
.
column
=
elem
.
type
->
createColumn
();
}
}
}
}
Block
MergeTreeSequentialBlockInputStream
::
getHeader
()
const
{
return
header
;
}
Block
MergeTreeSequentialBlockInputStream
::
readImpl
()
Chunk
MergeTreeSequentialSource
::
generate
()
try
{
Block
res
;
auto
&
header
=
getPort
().
getHeader
();
if
(
!
isCancelled
()
&&
current_row
<
data_part
->
rows_count
)
{
size_t
rows_to_read
=
data_part
->
index_granularity
.
getMarkRows
(
current_mark
);
...
...
@@ -96,15 +73,15 @@ try
auto
&
sample
=
reader
->
getColumns
();
Columns
columns
(
sample
.
size
());
size_t
rows_read
ed
=
reader
->
readRows
(
current_mark
,
continue_reading
,
rows_to_read
,
columns
);
size_t
rows_read
=
reader
->
readRows
(
current_mark
,
continue_reading
,
rows_to_read
,
columns
);
if
(
rows_read
ed
)
if
(
rows_read
)
{
current_row
+=
rows_read
ed
;
current_mark
+=
(
rows_to_read
==
rows_read
ed
);
current_row
+=
rows_read
;
current_mark
+=
(
rows_to_read
==
rows_read
);
bool
should_evaluate_missing_defaults
=
false
;
reader
->
fillMissingColumns
(
columns
,
should_evaluate_missing_defaults
,
rows_read
ed
);
reader
->
fillMissingColumns
(
columns
,
should_evaluate_missing_defaults
,
rows_read
);
if
(
should_evaluate_missing_defaults
)
{
...
...
@@ -113,20 +90,21 @@ try
reader
->
performRequiredConversions
(
columns
);
res
=
header
.
cloneEmpty
();
/// Reorder columns and fill result block.
size_t
num_columns
=
sample
.
size
();
Columns
res_columns
;
res_columns
.
reserve
(
num_columns
);
auto
it
=
sample
.
begin
();
for
(
size_t
i
=
0
;
i
<
num_columns
;
++
i
)
{
if
(
res
.
has
(
it
->
name
))
res
.
getByName
(
it
->
name
).
column
=
std
::
move
(
columns
[
i
]
);
if
(
header
.
has
(
it
->
name
))
res
_columns
.
emplace_back
(
std
::
move
(
columns
[
i
])
);
++
it
;
}
re
s
.
checkNumberOfRows
(
);
re
turn
Chunk
(
std
::
move
(
res_columns
),
rows_read
);
}
}
else
...
...
@@ -134,7 +112,7 @@ try
finish
();
}
return
res
;
return
{}
;
}
catch
(...)
{
...
...
@@ -144,8 +122,7 @@ catch (...)
throw
;
}
void
MergeTreeSequentialBlockInputStream
::
finish
()
void
MergeTreeSequentialSource
::
finish
()
{
/** Close the files (before destroying the object).
* When many sources are created, but simultaneously reading only a few of them,
...
...
@@ -155,7 +132,6 @@ void MergeTreeSequentialBlockInputStream::finish()
data_part
.
reset
();
}
MergeTreeSequentialBlockInputStream
::~
MergeTreeSequentialBlockInputStream
()
=
default
;
MergeTreeSequentialSource
::~
MergeTreeSequentialSource
()
=
default
;
}
dbms/src/Storages/MergeTree/MergeTreeSequential
BlockInputStream
.h
→
dbms/src/Storages/MergeTree/MergeTreeSequential
Source
.h
浏览文件 @
2daef385
#pragma once
#include <
DataStreams/IBlockInputStream
.h>
#include <
Processors/Sources/SourceWithProgress
.h>
#include <Storages/MergeTree/MergeTreeData.h>
#include <Storages/MergeTree/IMergeTreeReader.h>
#include <Storages/MergeTree/MarkRange.h>
...
...
@@ -9,40 +9,33 @@ namespace DB
{
/// Lightweight (in terms of logic) stream for reading single part from MergeTree
class
MergeTreeSequential
BlockInputStream
:
public
IBlockInputStream
class
MergeTreeSequential
Source
:
public
SourceWithProgress
{
public:
MergeTreeSequential
BlockInputStream
(
MergeTreeSequential
Source
(
const
MergeTreeData
&
storage_
,
const
MergeTreeData
::
DataPartPtr
&
data_part_
,
MergeTreeData
::
DataPartPtr
data_part_
,
Names
columns_to_read_
,
bool
read_with_direct_io_
,
bool
take_column_types_from_storage
,
bool
quiet
=
false
);
~
MergeTreeSequential
BlockInputStream
()
override
;
~
MergeTreeSequential
Source
()
override
;
String
getName
()
const
override
{
return
"MergeTreeSequentialBlockInputStream"
;
}
Block
getHeader
()
const
override
;
/// Closes readers and unlock part locks
void
finish
();
String
getName
()
const
override
{
return
"MergeTreeSequentialSource"
;
}
size_t
getCurrentMark
()
const
{
return
current_mark
;
}
size_t
getCurrentRow
()
const
{
return
current_row
;
}
protected:
Block
readImpl
()
override
;
Chunk
generate
()
override
;
private:
const
MergeTreeData
&
storage
;
Block
header
;
/// Data part will not be removed if the pointer owns it
MergeTreeData
::
DataPartPtr
data_part
;
...
...
@@ -52,7 +45,7 @@ private:
/// Should read using direct IO
bool
read_with_direct_io
;
Logger
*
log
=
&
Logger
::
get
(
"MergeTreeSequential
BlockInputStream
"
);
Logger
*
log
=
&
Logger
::
get
(
"MergeTreeSequential
Source
"
);
std
::
shared_ptr
<
MarkCache
>
mark_cache
;
using
MergeTreeReaderPtr
=
std
::
unique_ptr
<
IMergeTreeReader
>
;
...
...
@@ -65,8 +58,8 @@ private:
size_t
current_row
=
0
;
private:
void
fixHeader
(
Block
&
header_block
)
const
;
/// Closes readers and unlock part locks
void
finish
();
};
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录