Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
201e6318
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,发现更多精彩内容 >>
提交
201e6318
编写于
7月 01, 2014
作者:
M
Michael Kolupaev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
a bit more verbose exceptions when reading from merge tree. [#METR-10202]
上级
5f1fa12e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
49 addition
and
54 deletion
+49
-54
dbms/include/DB/Storages/MergeTree/MergeTreeReader.h
dbms/include/DB/Storages/MergeTree/MergeTreeReader.h
+49
-54
未找到文件。
dbms/include/DB/Storages/MergeTree/MergeTreeReader.h
浏览文件 @
201e6318
...
...
@@ -50,71 +50,69 @@ public:
* В блоке должно быть либо ни одного столбца из column_names, либо все, для которых есть файлы. */
void
readRange
(
size_t
from_mark
,
size_t
to_mark
,
Block
&
res
)
{
size_t
max_rows_to_read
=
(
to_mark
-
from_mark
)
*
storage
.
index_granularity
;
try
{
size_t
max_rows_to_read
=
(
to_mark
-
from_mark
)
*
storage
.
index_granularity
;
/** Для некоторых столбцов файлы с данными могут отсутствовать.
* Это бывает для старых кусков, после добавления новых столбцов в структуру таблицы.
*/
bool
has_missing_columns
=
false
;
/** Для некоторых столбцов файлы с данными могут отсутствовать.
* Это бывает для старых кусков, после добавления новых столбцов в структуру таблицы.
*/
bool
has_missing_columns
=
false
;
/// Указатели на столбцы смещений, общие для столбцов из вложенных структур данных
/// Если append, все значения nullptr, и offset_columns используется только для проверки, что столбец смещений уже прочитан.
OffsetColumns
offset_columns
;
/// Указатели на столбцы смещений, общие для столбцов из вложенных структур данных
/// Если append, все значения nullptr, и offset_columns используется только для проверки, что столбец смещений уже прочитан.
OffsetColumns
offset_columns
;
for
(
Names
::
const_iterator
it
=
column_names
.
begin
();
it
!=
column_names
.
end
();
++
it
)
{
if
(
streams
.
end
()
==
streams
.
find
(
*
it
))
for
(
Names
::
const_iterator
it
=
column_names
.
begin
();
it
!=
column_names
.
end
();
++
it
)
{
has_missing_columns
=
true
;
continue
;
}
if
(
streams
.
end
()
==
streams
.
find
(
*
it
))
{
has_missing_columns
=
true
;
continue
;
}
/// Все столбцы уже есть в блоке. Будем добавлять значения в конец.
bool
append
=
res
.
has
(
*
it
);
/// Все столбцы уже есть в блоке. Будем добавлять значения в конец.
bool
append
=
res
.
has
(
*
it
);
ColumnWithNameAndType
column
;
column
.
name
=
*
it
;
column
.
type
=
storage
.
getDataTypeByName
(
*
it
);
if
(
append
)
column
.
column
=
res
.
getByName
(
column
.
name
).
column
;
ColumnWithNameAndType
column
;
column
.
name
=
*
it
;
column
.
type
=
storage
.
getDataTypeByName
(
*
it
);
if
(
append
)
column
.
column
=
res
.
getByName
(
column
.
name
).
column
;
bool
read_offsets
=
true
;
bool
read_offsets
=
true
;
/// Для вложенных структур запоминаем указатели на столбцы со смещениями
if
(
const
DataTypeArray
*
type_arr
=
typeid_cast
<
const
DataTypeArray
*>
(
&*
column
.
type
))
{
String
name
=
DataTypeNested
::
extractNestedTableName
(
column
.
name
);
/// Для вложенных структур запоминаем указатели на столбцы со смещениями
if
(
const
DataTypeArray
*
type_arr
=
typeid_cast
<
const
DataTypeArray
*>
(
&*
column
.
type
))
{
String
name
=
DataTypeNested
::
extractNestedTableName
(
column
.
name
);
if
(
offset_columns
.
count
(
name
)
==
0
)
offset_columns
[
name
]
=
append
?
NULL
:
new
ColumnArray
::
ColumnOffsets_t
;
else
read_offsets
=
false
;
/// на предыдущих итерациях смещения уже считали вызовом readData
if
(
offset_columns
.
count
(
name
)
==
0
)
offset_columns
[
name
]
=
append
?
NULL
:
new
ColumnArray
::
ColumnOffsets_t
;
else
read_offsets
=
false
;
/// на предыдущих итерациях смещения уже считали вызовом readData
if
(
!
append
)
column
.
column
=
new
ColumnArray
(
type_arr
->
getNestedType
()
->
createColumn
(),
offset_columns
[
name
]);
}
else
if
(
!
append
)
column
.
column
=
column
.
type
->
createColumn
();
if
(
!
append
)
column
.
column
=
new
ColumnArray
(
type_arr
->
getNestedType
()
->
createColumn
(),
offset_columns
[
name
]);
}
else
if
(
!
append
)
column
.
column
=
column
.
type
->
createColumn
();
try
{
readData
(
column
.
name
,
*
column
.
type
,
*
column
.
column
,
from_mark
,
max_rows_to_read
,
0
,
read_offsets
);
}
catch
(
const
Exception
&
e
)
{
/// Более хорошая диагностика.
if
(
e
.
code
()
==
ErrorCodes
::
CHECKSUM_DOESNT_MATCH
||
e
.
code
()
==
ErrorCodes
::
TOO_LARGE_SIZE_COMPRESSED
)
throw
Exception
(
e
.
message
()
+
" (while reading column "
+
*
it
+
" from part "
+
path
+
")"
,
e
.
code
());
else
throw
;
if
(
!
append
&&
column
.
column
->
size
())
res
.
insert
(
column
);
}
if
(
!
append
&&
column
.
column
->
size
())
res
.
insert
(
column
);
if
(
has_missing_columns
&&
!
res
)
throw
Exception
(
"All requested columns are missing"
,
ErrorCodes
::
ALL_REQUESTED_COLUMNS_ARE_MISSING
);
}
catch
(
const
Exception
&
e
)
{
/// Более хорошая диагностика.
throw
Exception
(
e
.
message
()
+
" (while reading from part "
+
path
+
" from mark "
+
toString
(
from_mark
)
+
" to "
+
toString
(
to_mark
)
+
")"
,
e
.
code
());
}
if
(
has_missing_columns
&&
!
res
)
throw
Exception
(
"All requested columns are missing"
,
ErrorCodes
::
ALL_REQUESTED_COLUMNS_ARE_MISSING
);
}
/// Заполняет столбцы, которых нет в блоке, значениями по умолчанию.
...
...
@@ -178,10 +176,7 @@ public:
catch
(
const
Exception
&
e
)
{
/// Более хорошая диагностика.
if
(
e
.
code
()
==
ErrorCodes
::
SIZES_OF_COLUMNS_DOESNT_MATCH
)
throw
Exception
(
e
.
message
()
+
" (while reading from part "
+
path
+
")"
,
e
.
code
());
else
throw
;
throw
Exception
(
e
.
message
()
+
" (while reading from part "
+
path
+
")"
,
e
.
code
());
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录