Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
963bc578
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,发现更多精彩内容 >>
未验证
提交
963bc578
编写于
10月 19, 2020
作者:
A
alesapin
提交者:
GitHub
10月 19, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #16011 from ClickHouse/fix_alter_add_and_modify_order_by
Fix alter sorting key for ReplicatedVersionedCollapsingMergeTree
上级
d1c705d4
20022890
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
55 addition
and
5 deletion
+55
-5
src/Storages/StorageReplicatedMergeTree.cpp
src/Storages/StorageReplicatedMergeTree.cpp
+11
-5
tests/queries/0_stateless/01526_alter_add_and_modify_order_zookeeper.reference
...less/01526_alter_add_and_modify_order_zookeeper.reference
+6
-0
tests/queries/0_stateless/01526_alter_add_and_modify_order_zookeeper.sql
..._stateless/01526_alter_add_and_modify_order_zookeeper.sql
+38
-0
未找到文件。
src/Storages/StorageReplicatedMergeTree.cpp
浏览文件 @
963bc578
...
...
@@ -833,7 +833,7 @@ void StorageReplicatedMergeTree::checkTableStructure(const String & zookeeper_pr
}
void
StorageReplicatedMergeTree
::
setTableStructure
(
ColumnsDescription
new_columns
,
const
ReplicatedMergeTreeTableMetadata
::
Diff
&
metadata_diff
)
ColumnsDescription
new_columns
,
const
ReplicatedMergeTreeTableMetadata
::
Diff
&
metadata_diff
)
{
StorageInMemoryMetadata
new_metadata
=
getInMemoryMetadata
();
StorageInMemoryMetadata
old_metadata
=
getInMemoryMetadata
();
...
...
@@ -856,7 +856,7 @@ ColumnsDescription new_columns, const ReplicatedMergeTreeTableMetadata::Diff & m
if
(
!
metadata_diff
.
empty
())
{
auto
parse_key_expr
=
[](
const
String
&
key_expr
)
auto
parse_key_expr
=
[]
(
const
String
&
key_expr
)
{
ParserNotEmptyExpressionList
parser
(
false
);
auto
new_sorting_key_expr_list
=
parseQuery
(
parser
,
key_expr
,
0
,
DBMS_DEFAULT_MAX_PARSER_DEPTH
);
...
...
@@ -3936,13 +3936,19 @@ void StorageReplicatedMergeTree::alter(
ReplicatedMergeTreeTableMetadata
future_metadata_in_zk
(
*
this
,
current_metadata
);
if
(
ast_to_str
(
future_metadata
.
sorting_key
.
definition_ast
)
!=
ast_to_str
(
current_metadata
->
sorting_key
.
definition_ast
))
future_metadata_in_zk
.
sorting_key
=
serializeAST
(
*
future_metadata
.
sorting_key
.
expression_list_ast
);
{
/// We serialize definition_ast as list, because code which apply ALTER (setTableStructure) expect serialized non empty expression
/// list here and we cannot change this representation for compatibility. Also we have preparsed AST `sorting_key.expression_list_ast`
/// in KeyDescription, but it contain version column for VersionedCollapsingMergeTree, which shouldn't be defined as a part of key definition AST.
/// So the best compatible way is just to convert definition_ast to list and serialize it. In all other places key.expression_list_ast should be used.
future_metadata_in_zk
.
sorting_key
=
serializeAST
(
*
extractKeyExpressionList
(
future_metadata
.
sorting_key
.
definition_ast
));
}
if
(
ast_to_str
(
future_metadata
.
sampling_key
.
definition_ast
)
!=
ast_to_str
(
current_metadata
->
sampling_key
.
definition_ast
))
future_metadata_in_zk
.
sampling_expression
=
serializeAST
(
*
future_metadata
.
sampling_key
.
expression_list_ast
);
future_metadata_in_zk
.
sampling_expression
=
serializeAST
(
*
extractKeyExpressionList
(
future_metadata
.
sampling_key
.
definition_ast
)
);
if
(
ast_to_str
(
future_metadata
.
partition_key
.
definition_ast
)
!=
ast_to_str
(
current_metadata
->
partition_key
.
definition_ast
))
future_metadata_in_zk
.
partition_key
=
serializeAST
(
*
future_metadata
.
partition_key
.
expression_list_ast
);
future_metadata_in_zk
.
partition_key
=
serializeAST
(
*
extractKeyExpressionList
(
future_metadata
.
partition_key
.
definition_ast
)
);
if
(
ast_to_str
(
future_metadata
.
table_ttl
.
definition_ast
)
!=
ast_to_str
(
current_metadata
->
table_ttl
.
definition_ast
))
{
...
...
tests/queries/0_stateless/01526_alter_add_and_modify_order_zookeeper.reference
0 → 100644
浏览文件 @
963bc578
2019-10-01 a 1 aa 1 1 1
2019-10-01 a 1 aa 1 1 1 0
CREATE TABLE default.table_for_alter\n(\n `d` Date,\n `a` String,\n `b` UInt8,\n `x` String,\n `y` Int8,\n `version` UInt64,\n `sign` Int8 DEFAULT 1,\n `order` UInt32\n)\nENGINE = ReplicatedVersionedCollapsingMergeTree(\'/clickhouse/tables/01526_alter_add/t1\', \'1\', sign, version)\nPARTITION BY y\nPRIMARY KEY d\nORDER BY (d, order)\nSETTINGS index_granularity = 8192
2019-10-01 a 1 aa 1 1 1 0 0
2019-10-02 b 2 bb 2 2 2 1 2
CREATE TABLE default.table_for_alter\n(\n `d` Date,\n `a` String,\n `b` UInt8,\n `x` String,\n `y` Int8,\n `version` UInt64,\n `sign` Int8 DEFAULT 1,\n `order` UInt32,\n `datum` UInt32\n)\nENGINE = ReplicatedVersionedCollapsingMergeTree(\'/clickhouse/tables/01526_alter_add/t1\', \'1\', sign, version)\nPARTITION BY y\nPRIMARY KEY d\nORDER BY (d, order, datum)\nSETTINGS index_granularity = 8192
tests/queries/0_stateless/01526_alter_add_and_modify_order_zookeeper.sql
0 → 100644
浏览文件 @
963bc578
DROP
TABLE
IF
EXISTS
table_for_alter
;
SET
replication_alter_partitions_sync
=
2
;
CREATE
TABLE
table_for_alter
(
`d`
Date
,
`a`
String
,
`b`
UInt8
,
`x`
String
,
`y`
Int8
,
`version`
UInt64
,
`sign`
Int8
DEFAULT
1
)
ENGINE
=
ReplicatedVersionedCollapsingMergeTree
(
'/clickhouse/tables/01526_alter_add/t1'
,
'1'
,
sign
,
version
)
PARTITION
BY
y
ORDER
BY
d
SETTINGS
index_granularity
=
8192
;
INSERT
INTO
table_for_alter
VALUES
(
toDate
(
'2019-10-01'
),
'a'
,
1
,
'aa'
,
1
,
1
,
1
);
SELECT
*
FROM
table_for_alter
;
ALTER
TABLE
table_for_alter
ADD
COLUMN
order
UInt32
,
MODIFY
ORDER
BY
(
d
,
order
);
SELECT
*
FROM
table_for_alter
;
SHOW
CREATE
TABLE
table_for_alter
;
ALTER
TABLE
table_for_alter
ADD
COLUMN
datum
UInt32
,
MODIFY
ORDER
BY
(
d
,
order
,
datum
);
INSERT
INTO
table_for_alter
VALUES
(
toDate
(
'2019-10-02'
),
'b'
,
2
,
'bb'
,
2
,
2
,
2
,
1
,
2
);
SELECT
*
FROM
table_for_alter
ORDER
BY
d
;
SHOW
CREATE
TABLE
table_for_alter
;
DROP
TABLE
IF
EXISTS
table_for_alter
;
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录