mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-23 08:02:02 +00:00
CLICKHOUSE-784: reset merge tree setting
Add an ability to reset custom setting to default and remove it from table's metadata. This will allow to rollback the change without knowing the system/config's default. Signed-off-by: Aleksei Semiglazov <asemiglazov@cloudflare.com>
This commit is contained in:
parent
011ed015fa
commit
9a5365fc41
@ -66,7 +66,7 @@ enum class AccessType
|
|||||||
M(ALTER_TTL, "ALTER MODIFY TTL, MODIFY TTL", TABLE, ALTER_TABLE) /* allows to execute ALTER MODIFY TTL */\
|
M(ALTER_TTL, "ALTER MODIFY TTL, MODIFY TTL", TABLE, ALTER_TABLE) /* allows to execute ALTER MODIFY TTL */\
|
||||||
M(ALTER_MATERIALIZE_TTL, "MATERIALIZE TTL", TABLE, ALTER_TABLE) /* allows to execute ALTER MATERIALIZE TTL;
|
M(ALTER_MATERIALIZE_TTL, "MATERIALIZE TTL", TABLE, ALTER_TABLE) /* allows to execute ALTER MATERIALIZE TTL;
|
||||||
enabled implicitly by the grant ALTER_TABLE */\
|
enabled implicitly by the grant ALTER_TABLE */\
|
||||||
M(ALTER_SETTINGS, "ALTER SETTING, ALTER MODIFY SETTING, MODIFY SETTING", TABLE, ALTER_TABLE) /* allows to execute ALTER MODIFY SETTING */\
|
M(ALTER_SETTINGS, "ALTER SETTING, ALTER MODIFY SETTING, MODIFY SETTING, RESET SETTING", TABLE, ALTER_TABLE) /* allows to execute ALTER MODIFY SETTING */\
|
||||||
M(ALTER_MOVE_PARTITION, "ALTER MOVE PART, MOVE PARTITION, MOVE PART", TABLE, ALTER_TABLE) \
|
M(ALTER_MOVE_PARTITION, "ALTER MOVE PART, MOVE PARTITION, MOVE PART", TABLE, ALTER_TABLE) \
|
||||||
M(ALTER_FETCH_PARTITION, "ALTER FETCH PART, FETCH PARTITION", TABLE, ALTER_TABLE) \
|
M(ALTER_FETCH_PARTITION, "ALTER FETCH PART, FETCH PARTITION", TABLE, ALTER_TABLE) \
|
||||||
M(ALTER_FREEZE_PARTITION, "FREEZE PARTITION, UNFREEZE", TABLE, ALTER_TABLE) \
|
M(ALTER_FREEZE_PARTITION, "FREEZE PARTITION, UNFREEZE", TABLE, ALTER_TABLE) \
|
||||||
|
@ -269,6 +269,7 @@ AccessRightsElements InterpreterAlterQuery::getRequiredAccessForCommand(const AS
|
|||||||
required_access.emplace_back(AccessType::ALTER_MATERIALIZE_TTL, database, table);
|
required_access.emplace_back(AccessType::ALTER_MATERIALIZE_TTL, database, table);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ASTAlterCommand::RESET_SETTING: [[fallthrough]];
|
||||||
case ASTAlterCommand::MODIFY_SETTING:
|
case ASTAlterCommand::MODIFY_SETTING:
|
||||||
{
|
{
|
||||||
required_access.emplace_back(AccessType::ALTER_SETTINGS, database, table);
|
required_access.emplace_back(AccessType::ALTER_SETTINGS, database, table);
|
||||||
|
@ -52,6 +52,11 @@ ASTPtr ASTAlterCommand::clone() const
|
|||||||
res->settings_changes = settings_changes->clone();
|
res->settings_changes = settings_changes->clone();
|
||||||
res->children.push_back(res->settings_changes);
|
res->children.push_back(res->settings_changes);
|
||||||
}
|
}
|
||||||
|
if (settings_resets)
|
||||||
|
{
|
||||||
|
res->settings_resets = settings_resets->clone();
|
||||||
|
res->children.push_back(res->settings_resets);
|
||||||
|
}
|
||||||
if (values)
|
if (values)
|
||||||
{
|
{
|
||||||
res->values = values->clone();
|
res->values = values->clone();
|
||||||
@ -378,6 +383,11 @@ void ASTAlterCommand::formatImpl(
|
|||||||
settings.ostr << (settings.hilite ? hilite_keyword : "") << indent_str << "MODIFY SETTING " << (settings.hilite ? hilite_none : "");
|
settings.ostr << (settings.hilite ? hilite_keyword : "") << indent_str << "MODIFY SETTING " << (settings.hilite ? hilite_none : "");
|
||||||
settings_changes->formatImpl(settings, state, frame);
|
settings_changes->formatImpl(settings, state, frame);
|
||||||
}
|
}
|
||||||
|
else if (type == ASTAlterCommand::RESET_SETTING)
|
||||||
|
{
|
||||||
|
settings.ostr << (settings.hilite ? hilite_keyword : "") << indent_str << "RESET SETTING " << (settings.hilite ? hilite_none : "");
|
||||||
|
settings_resets->formatImpl(settings, state, frame);
|
||||||
|
}
|
||||||
else if (type == ASTAlterCommand::MODIFY_QUERY)
|
else if (type == ASTAlterCommand::MODIFY_QUERY)
|
||||||
{
|
{
|
||||||
settings.ostr << (settings.hilite ? hilite_keyword : "") << indent_str << "MODIFY QUERY " << settings.nl_or_ws << (settings.hilite ? hilite_none : "");
|
settings.ostr << (settings.hilite ? hilite_keyword : "") << indent_str << "MODIFY QUERY " << settings.nl_or_ws << (settings.hilite ? hilite_none : "");
|
||||||
|
@ -36,6 +36,7 @@ public:
|
|||||||
MODIFY_TTL,
|
MODIFY_TTL,
|
||||||
MATERIALIZE_TTL,
|
MATERIALIZE_TTL,
|
||||||
MODIFY_SETTING,
|
MODIFY_SETTING,
|
||||||
|
RESET_SETTING,
|
||||||
MODIFY_QUERY,
|
MODIFY_QUERY,
|
||||||
REMOVE_TTL,
|
REMOVE_TTL,
|
||||||
|
|
||||||
@ -141,6 +142,9 @@ public:
|
|||||||
/// FOR MODIFY_SETTING
|
/// FOR MODIFY_SETTING
|
||||||
ASTPtr settings_changes;
|
ASTPtr settings_changes;
|
||||||
|
|
||||||
|
/// FOR RESET_SETTING
|
||||||
|
ASTPtr settings_resets;
|
||||||
|
|
||||||
/// For MODIFY_QUERY
|
/// For MODIFY_QUERY
|
||||||
ASTPtr select;
|
ASTPtr select;
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@ bool ParserAlterCommand::parseImpl(Pos & pos, ASTPtr & node, Expected & expected
|
|||||||
ParserKeyword s_modify_ttl("MODIFY TTL");
|
ParserKeyword s_modify_ttl("MODIFY TTL");
|
||||||
ParserKeyword s_materialize_ttl("MATERIALIZE TTL");
|
ParserKeyword s_materialize_ttl("MATERIALIZE TTL");
|
||||||
ParserKeyword s_modify_setting("MODIFY SETTING");
|
ParserKeyword s_modify_setting("MODIFY SETTING");
|
||||||
|
ParserKeyword s_reset_setting("RESET SETTING");
|
||||||
ParserKeyword s_modify_query("MODIFY QUERY");
|
ParserKeyword s_modify_query("MODIFY QUERY");
|
||||||
|
|
||||||
ParserKeyword s_add_index("ADD INDEX");
|
ParserKeyword s_add_index("ADD INDEX");
|
||||||
@ -115,6 +116,9 @@ bool ParserAlterCommand::parseImpl(Pos & pos, ASTPtr & node, Expected & expected
|
|||||||
std::make_unique<ParserAssignment>(), std::make_unique<ParserToken>(TokenType::Comma),
|
std::make_unique<ParserAssignment>(), std::make_unique<ParserToken>(TokenType::Comma),
|
||||||
/* allow_empty = */ false);
|
/* allow_empty = */ false);
|
||||||
ParserSetQuery parser_settings(true);
|
ParserSetQuery parser_settings(true);
|
||||||
|
ParserList parser_reset_setting(
|
||||||
|
std::make_unique<ParserIdentifier>(), std::make_unique<ParserToken>(TokenType::Comma),
|
||||||
|
/* allow_empty = */ false);
|
||||||
ParserNameList values_p;
|
ParserNameList values_p;
|
||||||
ParserSelectWithUnionQuery select_p;
|
ParserSelectWithUnionQuery select_p;
|
||||||
ParserTTLExpressionList parser_ttl_list;
|
ParserTTLExpressionList parser_ttl_list;
|
||||||
@ -703,6 +707,12 @@ bool ParserAlterCommand::parseImpl(Pos & pos, ASTPtr & node, Expected & expected
|
|||||||
return false;
|
return false;
|
||||||
command->type = ASTAlterCommand::MODIFY_SETTING;
|
command->type = ASTAlterCommand::MODIFY_SETTING;
|
||||||
}
|
}
|
||||||
|
else if (s_reset_setting.ignore(pos, expected))
|
||||||
|
{
|
||||||
|
if (!parser_reset_setting.parse(pos, command->settings_resets, expected))
|
||||||
|
return false;
|
||||||
|
command->type = ASTAlterCommand::RESET_SETTING;
|
||||||
|
}
|
||||||
else if (s_modify_query.ignore(pos, expected))
|
else if (s_modify_query.ignore(pos, expected))
|
||||||
{
|
{
|
||||||
if (!select_p.parse(pos, command->select, expected))
|
if (!select_p.parse(pos, command->select, expected))
|
||||||
|
@ -15,6 +15,7 @@ namespace DB
|
|||||||
* [RENAME COLUMN [IF EXISTS] col_name TO col_name]
|
* [RENAME COLUMN [IF EXISTS] col_name TO col_name]
|
||||||
* [MODIFY PRIMARY KEY (a, b, c...)]
|
* [MODIFY PRIMARY KEY (a, b, c...)]
|
||||||
* [MODIFY SETTING setting_name=setting_value, ...]
|
* [MODIFY SETTING setting_name=setting_value, ...]
|
||||||
|
* [RESET SETTING setting_name, ...]
|
||||||
* [COMMENT COLUMN [IF EXISTS] col_name string]
|
* [COMMENT COLUMN [IF EXISTS] col_name string]
|
||||||
* [DROP|DETACH|ATTACH PARTITION|PART partition, ...]
|
* [DROP|DETACH|ATTACH PARTITION|PART partition, ...]
|
||||||
* [FETCH PARTITION partition FROM ...]
|
* [FETCH PARTITION partition FROM ...]
|
||||||
|
@ -311,6 +311,21 @@ std::optional<AlterCommand> AlterCommand::parse(const ASTAlterCommand * command_
|
|||||||
command.settings_changes = command_ast->settings_changes->as<ASTSetQuery &>().changes;
|
command.settings_changes = command_ast->settings_changes->as<ASTSetQuery &>().changes;
|
||||||
return command;
|
return command;
|
||||||
}
|
}
|
||||||
|
else if (command_ast->type == ASTAlterCommand::RESET_SETTING)
|
||||||
|
{
|
||||||
|
AlterCommand command;
|
||||||
|
command.ast = command_ast->clone();
|
||||||
|
command.type = AlterCommand::RESET_SETTING;
|
||||||
|
for (const ASTPtr & identifier_ast : command_ast->settings_resets->children)
|
||||||
|
{
|
||||||
|
const auto & identifier = identifier_ast->as<ASTIdentifier &>();
|
||||||
|
auto insertion = command.settings_resets.emplace(identifier.name());
|
||||||
|
if (!insertion.second)
|
||||||
|
throw Exception("Duplicate setting name " + backQuote(identifier.name()),
|
||||||
|
ErrorCodes::BAD_ARGUMENTS);
|
||||||
|
}
|
||||||
|
return command;
|
||||||
|
}
|
||||||
else if (command_ast->type == ASTAlterCommand::MODIFY_QUERY)
|
else if (command_ast->type == ASTAlterCommand::MODIFY_QUERY)
|
||||||
{
|
{
|
||||||
AlterCommand command;
|
AlterCommand command;
|
||||||
@ -570,6 +585,20 @@ void AlterCommand::apply(StorageInMemoryMetadata & metadata, ContextPtr context)
|
|||||||
settings_from_storage.push_back(change);
|
settings_from_storage.push_back(change);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (type == RESET_SETTING)
|
||||||
|
{
|
||||||
|
auto & settings_from_storage = metadata.settings_changes->as<ASTSetQuery &>().changes;
|
||||||
|
for (const auto & setting_name : settings_resets)
|
||||||
|
{
|
||||||
|
auto finder = [&setting_name](const SettingChange & c) { return c.name == setting_name; };
|
||||||
|
auto it = std::find_if(settings_from_storage.begin(), settings_from_storage.end(), finder);
|
||||||
|
|
||||||
|
if (it != settings_from_storage.end())
|
||||||
|
settings_from_storage.erase(it);
|
||||||
|
|
||||||
|
/// Intentionally ignore if there is no such setting name
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (type == RENAME_COLUMN)
|
else if (type == RENAME_COLUMN)
|
||||||
{
|
{
|
||||||
metadata.columns.rename(column_name, rename_to);
|
metadata.columns.rename(column_name, rename_to);
|
||||||
@ -678,7 +707,7 @@ bool isMetadataOnlyConversion(const IDataType * from, const IDataType * to)
|
|||||||
|
|
||||||
bool AlterCommand::isSettingsAlter() const
|
bool AlterCommand::isSettingsAlter() const
|
||||||
{
|
{
|
||||||
return type == MODIFY_SETTING;
|
return type == MODIFY_SETTING || type == RESET_SETTING;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AlterCommand::isRequireMutationStage(const StorageInMemoryMetadata & metadata) const
|
bool AlterCommand::isRequireMutationStage(const StorageInMemoryMetadata & metadata) const
|
||||||
@ -838,6 +867,8 @@ String alterTypeToString(const AlterCommand::Type type)
|
|||||||
return "MODIFY TTL";
|
return "MODIFY TTL";
|
||||||
case AlterCommand::Type::MODIFY_SETTING:
|
case AlterCommand::Type::MODIFY_SETTING:
|
||||||
return "MODIFY SETTING";
|
return "MODIFY SETTING";
|
||||||
|
case AlterCommand::Type::RESET_SETTING:
|
||||||
|
return "RESET SETTING";
|
||||||
case AlterCommand::Type::MODIFY_QUERY:
|
case AlterCommand::Type::MODIFY_QUERY:
|
||||||
return "MODIFY QUERY";
|
return "MODIFY QUERY";
|
||||||
case AlterCommand::Type::RENAME_COLUMN:
|
case AlterCommand::Type::RENAME_COLUMN:
|
||||||
@ -1123,7 +1154,7 @@ void AlterCommands::validate(const StorageInMemoryMetadata & metadata, ContextPt
|
|||||||
ErrorCodes::NOT_FOUND_COLUMN_IN_BLOCK};
|
ErrorCodes::NOT_FOUND_COLUMN_IN_BLOCK};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (command.type == AlterCommand::MODIFY_SETTING)
|
else if (command.type == AlterCommand::MODIFY_SETTING || command.type == AlterCommand::RESET_SETTING)
|
||||||
{
|
{
|
||||||
if (metadata.settings_changes == nullptr)
|
if (metadata.settings_changes == nullptr)
|
||||||
throw Exception{"Cannot alter settings, because table engine doesn't support settings changes", ErrorCodes::BAD_ARGUMENTS};
|
throw Exception{"Cannot alter settings, because table engine doesn't support settings changes", ErrorCodes::BAD_ARGUMENTS};
|
||||||
|
@ -38,6 +38,7 @@ struct AlterCommand
|
|||||||
DROP_PROJECTION,
|
DROP_PROJECTION,
|
||||||
MODIFY_TTL,
|
MODIFY_TTL,
|
||||||
MODIFY_SETTING,
|
MODIFY_SETTING,
|
||||||
|
RESET_SETTING,
|
||||||
MODIFY_QUERY,
|
MODIFY_QUERY,
|
||||||
RENAME_COLUMN,
|
RENAME_COLUMN,
|
||||||
REMOVE_TTL,
|
REMOVE_TTL,
|
||||||
@ -80,7 +81,7 @@ struct AlterCommand
|
|||||||
/// For ADD_COLUMN, MODIFY_COLUMN - Add to the begin if it is true.
|
/// For ADD_COLUMN, MODIFY_COLUMN - Add to the begin if it is true.
|
||||||
bool first = false;
|
bool first = false;
|
||||||
|
|
||||||
/// For DROP_COLUMN, MODIFY_COLUMN, COMMENT_COLUMN
|
/// For DROP_COLUMN, MODIFY_COLUMN, COMMENT_COLUMN, RESET_SETTING
|
||||||
bool if_exists = false;
|
bool if_exists = false;
|
||||||
|
|
||||||
/// For ADD_COLUMN
|
/// For ADD_COLUMN
|
||||||
@ -127,6 +128,9 @@ struct AlterCommand
|
|||||||
/// For MODIFY SETTING
|
/// For MODIFY SETTING
|
||||||
SettingsChanges settings_changes;
|
SettingsChanges settings_changes;
|
||||||
|
|
||||||
|
/// For RESET SETTING
|
||||||
|
std::set<String> settings_resets;
|
||||||
|
|
||||||
/// For MODIFY_QUERY
|
/// For MODIFY_QUERY
|
||||||
ASTPtr select = nullptr;
|
ASTPtr select = nullptr;
|
||||||
|
|
||||||
|
@ -1802,6 +1802,31 @@ void MergeTreeData::checkAlterIsPossible(const AlterCommands & commands, Context
|
|||||||
if (setting_name == "storage_policy")
|
if (setting_name == "storage_policy")
|
||||||
checkStoragePolicy(getContext()->getStoragePolicy(new_value.safeGet<String>()));
|
checkStoragePolicy(getContext()->getStoragePolicy(new_value.safeGet<String>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Check if it is safe to reset the settings
|
||||||
|
for (const auto & current_setting : current_changes)
|
||||||
|
{
|
||||||
|
const auto & setting_name = current_setting.name;
|
||||||
|
const Field * new_value = new_changes.tryGet(setting_name);
|
||||||
|
/// Prevent unsetting readonly setting
|
||||||
|
if (MergeTreeSettings::isReadonlySetting(setting_name) && !new_value)
|
||||||
|
{
|
||||||
|
throw Exception{"Setting '" + setting_name + "' is readonly for storage '" + getName() + "'",
|
||||||
|
ErrorCodes::READONLY_SETTING};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (MergeTreeSettings::isPartFormatSetting(setting_name) && !new_value)
|
||||||
|
{
|
||||||
|
/// Use default settings + new and check if doesn't affect part format settings
|
||||||
|
MergeTreeSettings copy = *getSettings();
|
||||||
|
copy.resetToDefault();
|
||||||
|
copy.applyChanges(new_changes);
|
||||||
|
String reason;
|
||||||
|
if (!canUsePolymorphicParts(copy, &reason) && !reason.empty())
|
||||||
|
throw Exception("Can't change settings. Reason: " + reason, ErrorCodes::NOT_IMPLEMENTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto & part : getDataPartsVector())
|
for (const auto & part : getDataPartsVector())
|
||||||
@ -1960,6 +1985,8 @@ void MergeTreeData::changeSettings(
|
|||||||
}
|
}
|
||||||
|
|
||||||
MergeTreeSettings copy = *getSettings();
|
MergeTreeSettings copy = *getSettings();
|
||||||
|
/// reset to default settings before applying existing
|
||||||
|
copy.resetToDefault();
|
||||||
copy.applyChanges(new_changes);
|
copy.applyChanges(new_changes);
|
||||||
|
|
||||||
copy.sanityCheck(getContext()->getSettingsRef());
|
copy.sanityCheck(getContext()->getSettingsRef());
|
||||||
|
@ -4,3 +4,9 @@ CREATE TABLE default.table_for_alter\n(\n `id` UInt64,\n `Data` String\n)\
|
|||||||
2
|
2
|
||||||
CREATE TABLE default.table_for_alter\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = MergeTree\nORDER BY id\nSETTINGS index_granularity = 4096, parts_to_throw_insert = 100, parts_to_delay_insert = 100, check_delay_period = 30
|
CREATE TABLE default.table_for_alter\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = MergeTree\nORDER BY id\nSETTINGS index_granularity = 4096, parts_to_throw_insert = 100, parts_to_delay_insert = 100, check_delay_period = 30
|
||||||
CREATE TABLE default.table_for_alter\n(\n `id` UInt64,\n `Data` String,\n `Data2` UInt64\n)\nENGINE = MergeTree\nORDER BY id\nSETTINGS index_granularity = 4096, parts_to_throw_insert = 100, parts_to_delay_insert = 100, check_delay_period = 15
|
CREATE TABLE default.table_for_alter\n(\n `id` UInt64,\n `Data` String,\n `Data2` UInt64\n)\nENGINE = MergeTree\nORDER BY id\nSETTINGS index_granularity = 4096, parts_to_throw_insert = 100, parts_to_delay_insert = 100, check_delay_period = 15
|
||||||
|
CREATE TABLE default.table_for_reset_setting\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = MergeTree\nORDER BY id\nSETTINGS index_granularity = 4096
|
||||||
|
CREATE TABLE default.table_for_reset_setting\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = MergeTree\nORDER BY id\nSETTINGS index_granularity = 4096, parts_to_throw_insert = 1, parts_to_delay_insert = 1
|
||||||
|
CREATE TABLE default.table_for_reset_setting\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = MergeTree\nORDER BY id\nSETTINGS index_granularity = 4096
|
||||||
|
CREATE TABLE default.table_for_reset_setting\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = MergeTree\nORDER BY id\nSETTINGS index_granularity = 4096
|
||||||
|
CREATE TABLE default.table_for_reset_setting\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = MergeTree\nORDER BY id\nSETTINGS index_granularity = 4096, merge_with_ttl_timeout = 300, max_concurrent_queries = 1
|
||||||
|
CREATE TABLE default.table_for_reset_setting\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = MergeTree\nORDER BY id\nSETTINGS index_granularity = 4096
|
||||||
|
@ -53,3 +53,50 @@ SHOW CREATE TABLE table_for_alter;
|
|||||||
|
|
||||||
DROP TABLE IF EXISTS table_for_alter;
|
DROP TABLE IF EXISTS table_for_alter;
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS table_for_reset_setting;
|
||||||
|
|
||||||
|
CREATE TABLE table_for_reset_setting (
|
||||||
|
id UInt64,
|
||||||
|
Data String
|
||||||
|
) ENGINE = MergeTree() ORDER BY id SETTINGS index_granularity=4096;
|
||||||
|
|
||||||
|
ALTER TABLE table_for_reset_setting MODIFY SETTING index_granularity=555; -- { serverError 472 }
|
||||||
|
|
||||||
|
SHOW CREATE TABLE table_for_reset_setting;
|
||||||
|
|
||||||
|
INSERT INTO table_for_reset_setting VALUES (1, '1');
|
||||||
|
INSERT INTO table_for_reset_setting VALUES (2, '2');
|
||||||
|
|
||||||
|
ALTER TABLE table_for_reset_setting MODIFY SETTING parts_to_throw_insert = 1, parts_to_delay_insert = 1;
|
||||||
|
|
||||||
|
SHOW CREATE TABLE table_for_reset_setting;
|
||||||
|
|
||||||
|
INSERT INTO table_for_reset_setting VALUES (1, '1'); -- { serverError 252 }
|
||||||
|
|
||||||
|
ALTER TABLE table_for_reset_setting RESET SETTING parts_to_delay_insert, parts_to_throw_insert;
|
||||||
|
|
||||||
|
SHOW CREATE TABLE table_for_reset_setting;
|
||||||
|
|
||||||
|
INSERT INTO table_for_reset_setting VALUES (1, '1');
|
||||||
|
INSERT INTO table_for_reset_setting VALUES (2, '2');
|
||||||
|
|
||||||
|
DETACH TABLE table_for_reset_setting;
|
||||||
|
ATTACH TABLE table_for_reset_setting;
|
||||||
|
|
||||||
|
SHOW CREATE TABLE table_for_reset_setting;
|
||||||
|
|
||||||
|
ALTER TABLE table_for_reset_setting RESET SETTING index_granularity; -- { serverError 472 }
|
||||||
|
|
||||||
|
-- ignore undefined setting
|
||||||
|
ALTER TABLE table_for_reset_setting RESET SETTING merge_with_ttl_timeout, unknown_setting;
|
||||||
|
|
||||||
|
ALTER TABLE table_for_reset_setting MODIFY SETTING merge_with_ttl_timeout = 300, max_concurrent_queries = 1;
|
||||||
|
|
||||||
|
SHOW CREATE TABLE table_for_reset_setting;
|
||||||
|
|
||||||
|
ALTER TABLE table_for_reset_setting RESET SETTING max_concurrent_queries, merge_with_ttl_timeout;
|
||||||
|
|
||||||
|
SHOW CREATE TABLE table_for_reset_setting;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS table_for_reset_setting;
|
@ -10,3 +10,12 @@ CREATE TABLE default.replicated_table_for_alter1\n(\n `id` UInt64,\n `Data
|
|||||||
CREATE TABLE default.replicated_table_for_alter2\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_alter\', \'2\')\nORDER BY id\nSETTINGS index_granularity = 8192, parts_to_throw_insert = 1, parts_to_delay_insert = 1
|
CREATE TABLE default.replicated_table_for_alter2\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_alter\', \'2\')\nORDER BY id\nSETTINGS index_granularity = 8192, parts_to_throw_insert = 1, parts_to_delay_insert = 1
|
||||||
CREATE TABLE default.replicated_table_for_alter1\n(\n `id` UInt64,\n `Data` String,\n `Data2` UInt64\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_alter\', \'1\')\nORDER BY id\nSETTINGS index_granularity = 8192, use_minimalistic_part_header_in_zookeeper = 1, check_delay_period = 15
|
CREATE TABLE default.replicated_table_for_alter1\n(\n `id` UInt64,\n `Data` String,\n `Data2` UInt64\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_alter\', \'1\')\nORDER BY id\nSETTINGS index_granularity = 8192, use_minimalistic_part_header_in_zookeeper = 1, check_delay_period = 15
|
||||||
CREATE TABLE default.replicated_table_for_alter2\n(\n `id` UInt64,\n `Data` String,\n `Data2` UInt64\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_alter\', \'2\')\nORDER BY id\nSETTINGS index_granularity = 8192, parts_to_throw_insert = 1, parts_to_delay_insert = 1
|
CREATE TABLE default.replicated_table_for_alter2\n(\n `id` UInt64,\n `Data` String,\n `Data2` UInt64\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_alter\', \'2\')\nORDER BY id\nSETTINGS index_granularity = 8192, parts_to_throw_insert = 1, parts_to_delay_insert = 1
|
||||||
|
CREATE TABLE default.replicated_table_for_reset_setting1\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_reset_setting\', \'1\')\nORDER BY id\nSETTINGS index_granularity = 8192
|
||||||
|
CREATE TABLE default.replicated_table_for_reset_setting2\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_reset_setting\', \'2\')\nORDER BY id\nSETTINGS index_granularity = 8192
|
||||||
|
CREATE TABLE default.replicated_table_for_reset_setting1\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_reset_setting\', \'1\')\nORDER BY id\nSETTINGS index_granularity = 8192
|
||||||
|
CREATE TABLE default.replicated_table_for_reset_setting1\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_reset_setting\', \'1\')\nORDER BY id\nSETTINGS index_granularity = 8192, merge_with_ttl_timeout = 100
|
||||||
|
CREATE TABLE default.replicated_table_for_reset_setting2\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_reset_setting\', \'2\')\nORDER BY id\nSETTINGS index_granularity = 8192, merge_with_ttl_timeout = 200
|
||||||
|
CREATE TABLE default.replicated_table_for_reset_setting1\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_reset_setting\', \'1\')\nORDER BY id\nSETTINGS index_granularity = 8192, merge_with_ttl_timeout = 100
|
||||||
|
CREATE TABLE default.replicated_table_for_reset_setting2\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_reset_setting\', \'2\')\nORDER BY id\nSETTINGS index_granularity = 8192, merge_with_ttl_timeout = 200
|
||||||
|
CREATE TABLE default.replicated_table_for_reset_setting1\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_reset_setting\', \'1\')\nORDER BY id\nSETTINGS index_granularity = 8192
|
||||||
|
CREATE TABLE default.replicated_table_for_reset_setting2\n(\n `id` UInt64,\n `Data` String\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test_00980/replicated_table_for_reset_setting\', \'2\')\nORDER BY id\nSETTINGS index_granularity = 8192
|
||||||
|
@ -67,3 +67,51 @@ SHOW CREATE TABLE replicated_table_for_alter2;
|
|||||||
|
|
||||||
DROP TABLE IF EXISTS replicated_table_for_alter2;
|
DROP TABLE IF EXISTS replicated_table_for_alter2;
|
||||||
DROP TABLE IF EXISTS replicated_table_for_alter1;
|
DROP TABLE IF EXISTS replicated_table_for_alter1;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS replicated_table_for_reset_setting1;
|
||||||
|
DROP TABLE IF EXISTS replicated_table_for_reset_setting2;
|
||||||
|
|
||||||
|
SET replication_alter_partitions_sync = 2;
|
||||||
|
|
||||||
|
CREATE TABLE replicated_table_for_reset_setting1 (
|
||||||
|
id UInt64,
|
||||||
|
Data String
|
||||||
|
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test_00980/replicated_table_for_reset_setting', '1') ORDER BY id;
|
||||||
|
|
||||||
|
CREATE TABLE replicated_table_for_reset_setting2 (
|
||||||
|
id UInt64,
|
||||||
|
Data String
|
||||||
|
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test_00980/replicated_table_for_reset_setting', '2') ORDER BY id;
|
||||||
|
|
||||||
|
SHOW CREATE TABLE replicated_table_for_reset_setting1;
|
||||||
|
SHOW CREATE TABLE replicated_table_for_reset_setting2;
|
||||||
|
|
||||||
|
ALTER TABLE replicated_table_for_reset_setting1 MODIFY SETTING index_granularity = 4096; -- { serverError 472 }
|
||||||
|
|
||||||
|
SHOW CREATE TABLE replicated_table_for_reset_setting1;
|
||||||
|
|
||||||
|
ALTER TABLE replicated_table_for_reset_setting1 MODIFY SETTING merge_with_ttl_timeout = 100;
|
||||||
|
ALTER TABLE replicated_table_for_reset_setting2 MODIFY SETTING merge_with_ttl_timeout = 200;
|
||||||
|
|
||||||
|
SHOW CREATE TABLE replicated_table_for_reset_setting1;
|
||||||
|
SHOW CREATE TABLE replicated_table_for_reset_setting2;
|
||||||
|
|
||||||
|
DETACH TABLE replicated_table_for_reset_setting2;
|
||||||
|
ATTACH TABLE replicated_table_for_reset_setting2;
|
||||||
|
|
||||||
|
DETACH TABLE replicated_table_for_reset_setting1;
|
||||||
|
ATTACH TABLE replicated_table_for_reset_setting1;
|
||||||
|
|
||||||
|
SHOW CREATE TABLE replicated_table_for_reset_setting1;
|
||||||
|
SHOW CREATE TABLE replicated_table_for_reset_setting2;
|
||||||
|
|
||||||
|
-- ignore undefined setting
|
||||||
|
ALTER TABLE replicated_table_for_reset_setting1 RESET SETTING check_delay_period, unknown_setting;
|
||||||
|
ALTER TABLE replicated_table_for_reset_setting1 RESET SETTING merge_with_ttl_timeout;
|
||||||
|
ALTER TABLE replicated_table_for_reset_setting2 RESET SETTING merge_with_ttl_timeout;
|
||||||
|
|
||||||
|
SHOW CREATE TABLE replicated_table_for_reset_setting1;
|
||||||
|
SHOW CREATE TABLE replicated_table_for_reset_setting2;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS replicated_table_for_reset_setting2;
|
||||||
|
DROP TABLE IF EXISTS replicated_table_for_reset_setting1;
|
||||||
|
@ -31,7 +31,7 @@ ALTER DROP CONSTRAINT ['DROP CONSTRAINT'] TABLE ALTER CONSTRAINT
|
|||||||
ALTER CONSTRAINT ['CONSTRAINT'] \N ALTER TABLE
|
ALTER CONSTRAINT ['CONSTRAINT'] \N ALTER TABLE
|
||||||
ALTER TTL ['ALTER MODIFY TTL','MODIFY TTL'] TABLE ALTER TABLE
|
ALTER TTL ['ALTER MODIFY TTL','MODIFY TTL'] TABLE ALTER TABLE
|
||||||
ALTER MATERIALIZE TTL ['MATERIALIZE TTL'] TABLE ALTER TABLE
|
ALTER MATERIALIZE TTL ['MATERIALIZE TTL'] TABLE ALTER TABLE
|
||||||
ALTER SETTINGS ['ALTER SETTING','ALTER MODIFY SETTING','MODIFY SETTING'] TABLE ALTER TABLE
|
ALTER SETTINGS ['ALTER SETTING','ALTER MODIFY SETTING','MODIFY SETTING','RESET SETTING'] TABLE ALTER TABLE
|
||||||
ALTER MOVE PARTITION ['ALTER MOVE PART','MOVE PARTITION','MOVE PART'] TABLE ALTER TABLE
|
ALTER MOVE PARTITION ['ALTER MOVE PART','MOVE PARTITION','MOVE PART'] TABLE ALTER TABLE
|
||||||
ALTER FETCH PARTITION ['ALTER FETCH PART','FETCH PARTITION'] TABLE ALTER TABLE
|
ALTER FETCH PARTITION ['ALTER FETCH PART','FETCH PARTITION'] TABLE ALTER TABLE
|
||||||
ALTER FREEZE PARTITION ['FREEZE PARTITION','UNFREEZE'] TABLE ALTER TABLE
|
ALTER FREEZE PARTITION ['FREEZE PARTITION','UNFREEZE'] TABLE ALTER TABLE
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
AlterQuery t1 (children 1)
|
AlterQuery t1 (children 1)
|
||||||
ExpressionList (children 1)
|
ExpressionList (children 1)
|
||||||
AlterCommand 30 (children 1)
|
AlterCommand 31 (children 1)
|
||||||
Function equals (children 1)
|
Function equals (children 1)
|
||||||
ExpressionList (children 2)
|
ExpressionList (children 2)
|
||||||
Identifier date
|
Identifier date
|
||||||
|
Loading…
Reference in New Issue
Block a user