mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 00:30:49 +00:00
Rename aggregate_function_group_array_has_limit_size
This commit is contained in:
parent
b6dd8446f5
commit
9794a193cf
@ -753,10 +753,11 @@ size_t getMaxArraySize()
|
|||||||
return 0xFFFFFF;
|
return 0xFFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasLimitArraySize()
|
bool discardOnLimitReached()
|
||||||
{
|
{
|
||||||
if (auto context = Context::getGlobalContextInstance())
|
if (auto context = Context::getGlobalContextInstance())
|
||||||
return context->getServerSettings().aggregate_function_group_array_has_limit_size;
|
return context->getServerSettings().aggregate_function_group_array_action_when_limit_is_reached
|
||||||
|
== GroupArrayActionWhenLimitReached::DISCARD;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -767,7 +768,7 @@ AggregateFunctionPtr createAggregateFunctionGroupArray(
|
|||||||
{
|
{
|
||||||
assertUnary(name, argument_types);
|
assertUnary(name, argument_types);
|
||||||
|
|
||||||
bool limit_size = hasLimitArraySize();
|
bool has_limit = discardOnLimitReached();
|
||||||
UInt64 max_elems = getMaxArraySize();
|
UInt64 max_elems = getMaxArraySize();
|
||||||
|
|
||||||
if (parameters.empty())
|
if (parameters.empty())
|
||||||
@ -784,14 +785,14 @@ AggregateFunctionPtr createAggregateFunctionGroupArray(
|
|||||||
(type == Field::Types::UInt64 && parameters[0].get<UInt64>() == 0))
|
(type == Field::Types::UInt64 && parameters[0].get<UInt64>() == 0))
|
||||||
throw Exception(ErrorCodes::BAD_ARGUMENTS, "Parameter for aggregate function {} should be positive number", name);
|
throw Exception(ErrorCodes::BAD_ARGUMENTS, "Parameter for aggregate function {} should be positive number", name);
|
||||||
|
|
||||||
limit_size = true;
|
has_limit = true;
|
||||||
max_elems = parameters[0].get<UInt64>();
|
max_elems = parameters[0].get<UInt64>();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
throw Exception(ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH,
|
throw Exception(ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH,
|
||||||
"Incorrect number of parameters for aggregate function {}, should be 0 or 1", name);
|
"Incorrect number of parameters for aggregate function {}, should be 0 or 1", name);
|
||||||
|
|
||||||
if (!limit_size)
|
if (!has_limit)
|
||||||
{
|
{
|
||||||
if (Tlast)
|
if (Tlast)
|
||||||
throw Exception(ErrorCodes::BAD_ARGUMENTS, "groupArrayLast make sense only with max_elems (groupArrayLast(max_elems)())");
|
throw Exception(ErrorCodes::BAD_ARGUMENTS, "groupArrayLast make sense only with max_elems (groupArrayLast(max_elems)())");
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include <Core/BaseSettings.h>
|
#include <Core/BaseSettings.h>
|
||||||
#include <Core/Defines.h>
|
#include <Core/Defines.h>
|
||||||
|
#include <Core/SettingsEnums.h>
|
||||||
|
|
||||||
|
|
||||||
namespace Poco::Util
|
namespace Poco::Util
|
||||||
@ -51,7 +52,7 @@ namespace DB
|
|||||||
M(UInt64, max_temporary_data_on_disk_size, 0, "The maximum amount of storage that could be used for external aggregation, joins or sorting., ", 0) \
|
M(UInt64, max_temporary_data_on_disk_size, 0, "The maximum amount of storage that could be used for external aggregation, joins or sorting., ", 0) \
|
||||||
M(String, temporary_data_in_cache, "", "Cache disk name for temporary data.", 0) \
|
M(String, temporary_data_in_cache, "", "Cache disk name for temporary data.", 0) \
|
||||||
M(UInt64, aggregate_function_group_array_max_element_size, 0xFFFFFF, "Max array element size in bytes for groupArray function. This limit is checked at serialization and help to avoid large state size.", 0) \
|
M(UInt64, aggregate_function_group_array_max_element_size, 0xFFFFFF, "Max array element size in bytes for groupArray function. This limit is checked at serialization and help to avoid large state size.", 0) \
|
||||||
M(Bool, aggregate_function_group_array_has_limit_size, false, "When the max array element size is exceeded, a `Too large array size` exception will be thrown by default. When set to true, no exception will be thrown, and the excess elements will be discarded.", 0) \
|
M(GroupArrayActionWhenLimitReached, aggregate_function_group_array_action_when_limit_is_reached, GroupArrayActionWhenLimitReached::THROW, "Action to execute when max array element size is exceeded in groupArray: `throw` exception, or `discard` extra values", 0) \
|
||||||
M(UInt64, max_server_memory_usage, 0, "Maximum total memory usage of the server in bytes. Zero means unlimited.", 0) \
|
M(UInt64, max_server_memory_usage, 0, "Maximum total memory usage of the server in bytes. Zero means unlimited.", 0) \
|
||||||
M(Double, max_server_memory_usage_to_ram_ratio, 0.9, "Same as max_server_memory_usage but in to RAM ratio. Allows to lower max memory on low-memory systems.", 0) \
|
M(Double, max_server_memory_usage_to_ram_ratio, 0.9, "Same as max_server_memory_usage but in to RAM ratio. Allows to lower max memory on low-memory systems.", 0) \
|
||||||
M(UInt64, merges_mutations_memory_usage_soft_limit, 0, "Maximum total memory usage for merges and mutations in bytes. Zero means unlimited.", 0) \
|
M(UInt64, merges_mutations_memory_usage_soft_limit, 0, "Maximum total memory usage for merges and mutations in bytes. Zero means unlimited.", 0) \
|
||||||
|
@ -229,4 +229,9 @@ IMPLEMENT_SETTING_ENUM(SQLSecurityType, ErrorCodes::BAD_ARGUMENTS,
|
|||||||
{{"DEFINER", SQLSecurityType::DEFINER},
|
{{"DEFINER", SQLSecurityType::DEFINER},
|
||||||
{"INVOKER", SQLSecurityType::INVOKER},
|
{"INVOKER", SQLSecurityType::INVOKER},
|
||||||
{"NONE", SQLSecurityType::NONE}})
|
{"NONE", SQLSecurityType::NONE}})
|
||||||
|
|
||||||
|
IMPLEMENT_SETTING_ENUM(
|
||||||
|
GroupArrayActionWhenLimitReached,
|
||||||
|
ErrorCodes::BAD_ARGUMENTS,
|
||||||
|
{{"throw", GroupArrayActionWhenLimitReached::THROW}, {"discard", GroupArrayActionWhenLimitReached::DISCARD}})
|
||||||
}
|
}
|
||||||
|
@ -370,4 +370,12 @@ DECLARE_SETTING_ENUM(SchemaInferenceMode)
|
|||||||
DECLARE_SETTING_ENUM_WITH_RENAME(DateTimeOverflowBehavior, FormatSettings::DateTimeOverflowBehavior)
|
DECLARE_SETTING_ENUM_WITH_RENAME(DateTimeOverflowBehavior, FormatSettings::DateTimeOverflowBehavior)
|
||||||
|
|
||||||
DECLARE_SETTING_ENUM(SQLSecurityType)
|
DECLARE_SETTING_ENUM(SQLSecurityType)
|
||||||
|
|
||||||
|
enum class GroupArrayActionWhenLimitReached : uint8_t
|
||||||
|
{
|
||||||
|
THROW,
|
||||||
|
DISCARD
|
||||||
|
};
|
||||||
|
DECLARE_SETTING_ENUM(GroupArrayActionWhenLimitReached)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<clickhouse>
|
<clickhouse>
|
||||||
<aggregate_function_group_array_max_element_size>10</aggregate_function_group_array_max_element_size>
|
<aggregate_function_group_array_max_element_size>10</aggregate_function_group_array_max_element_size>
|
||||||
<aggregate_function_group_array_has_limit_size>false</aggregate_function_group_array_has_limit_size>
|
<aggregate_function_group_array_action_when_limit_is_reached>throw</aggregate_function_group_array_action_when_limit_is_reached>
|
||||||
</clickhouse>
|
</clickhouse>
|
||||||
|
@ -80,8 +80,8 @@ def test_limit_size(started_cluster):
|
|||||||
|
|
||||||
node2.replace_in_config(
|
node2.replace_in_config(
|
||||||
"/etc/clickhouse-server/config.d/group_array_max_element_size.xml",
|
"/etc/clickhouse-server/config.d/group_array_max_element_size.xml",
|
||||||
"false",
|
"throw",
|
||||||
"true",
|
"discard",
|
||||||
)
|
)
|
||||||
|
|
||||||
node2.restart_clickhouse()
|
node2.restart_clickhouse()
|
||||||
@ -91,8 +91,8 @@ def test_limit_size(started_cluster):
|
|||||||
|
|
||||||
node2.replace_in_config(
|
node2.replace_in_config(
|
||||||
"/etc/clickhouse-server/config.d/group_array_max_element_size.xml",
|
"/etc/clickhouse-server/config.d/group_array_max_element_size.xml",
|
||||||
"true",
|
"discard",
|
||||||
"false",
|
"throw",
|
||||||
)
|
)
|
||||||
|
|
||||||
node2.restart_clickhouse()
|
node2.restart_clickhouse()
|
||||||
|
Loading…
Reference in New Issue
Block a user