Skip to content

Commit

Permalink
increase default value for GroupByLimit (#1986)
Browse files Browse the repository at this point in the history
  • Loading branch information
ulya-sidorina authored Feb 19, 2024
1 parent 1e1d8e3 commit eabc943
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 4 deletions.
78 changes: 78 additions & 0 deletions ydb/core/kqp/ut/opt/kqp_agg_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,84 @@ Y_UNIT_TEST_SUITE(KqpAgg) {
[["Value3"];[1]]
])", FormatResultSetYson(result.GetResultSet(0)));
}

Y_UNIT_TEST(GroupByLimit) {
TKikimrRunner kikimr;
auto db = kikimr.GetTableClient();
auto session = db.CreateSession().GetValueSync().GetSession();

AssertSuccessResult(session.ExecuteSchemeQuery(R"(
--!syntax_v1
CREATE TABLE `TestTable` (
a Uint64,
b Uint64,
c Uint64,
d Uint64,
e Uint64,
PRIMARY KEY (a, b, c)
);
)").GetValueSync());

AssertSuccessResult(session.ExecuteDataQuery(R"(
REPLACE INTO `TestTable` (a, b, c, d, e) VALUES
(1, 11, 21, 31, 41),
(2, 12, 22, 32, 42),
(3, 13, 23, 33, 43);
)", TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).GetValueSync());


{ // query with 36 groups and limit 32
auto result = session.ExecuteDataQuery(R"(
--!syntax_v1
PRAGMA GroupByLimit = '32';
SELECT a, b, c, d, SUM(e) Data FROM TestTable
GROUP BY ROLLUP(a, b, c, d, a * b AS ab, b * c AS bc, c * d AS cd, a + b AS sum)
ORDER BY a, b, c, d;
)", TTxControl::BeginTx().CommitTx()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::GENERIC_ERROR);
}

{ // query with 36 groups (without explicit limit)
auto result = session.ExecuteDataQuery(R"(
--!syntax_v1
SELECT a, b, c, d, SUM(e) Data FROM TestTable
GROUP BY ROLLUP(a, b, c, d, a * b AS ab, b * c AS bc, c * d AS cd, a + b AS sum)
ORDER BY a, b, c, d;
)", TTxControl::BeginTx().CommitTx()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
CompareYson(R"([
[#;#;#;#;[126u]];
[[1u];#;#;#;[41u]];
[[1u];[11u];#;#;[41u]];
[[1u];[11u];[21u];#;[41u]];
[[1u];[11u];[21u];[31u];[41u]];
[[1u];[11u];[21u];[31u];[41u]];
[[1u];[11u];[21u];[31u];[41u]];
[[1u];[11u];[21u];[31u];[41u]];
[[1u];[11u];[21u];[31u];[41u]];
[[2u];#;#;#;[42u]];
[[2u];[12u];#;#;[42u]];
[[2u];[12u];[22u];#;[42u]];
[[2u];[12u];[22u];[32u];[42u]];
[[2u];[12u];[22u];[32u];[42u]];
[[2u];[12u];[22u];[32u];[42u]];
[[2u];[12u];[22u];[32u];[42u]];
[[2u];[12u];[22u];[32u];[42u]];
[[3u];#;#;#;[43u]];
[[3u];[13u];#;#;[43u]];
[[3u];[13u];[23u];#;[43u]];
[[3u];[13u];[23u];[33u];[43u]];
[[3u];[13u];[23u];[33u];[43u]];
[[3u];[13u];[23u];[33u];[43u]];
[[3u];[13u];[23u];[33u];[43u]];
[[3u];[13u];[23u];[33u];[43u]]
])", FormatResultSetYson(result.GetResultSet(0)));
}
}
}

} // namespace NKikimr::NKqp
2 changes: 1 addition & 1 deletion ydb/library/yql/sql/v0/context.h
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ namespace NSQLTranslationV0 {
bool EnableSystemColumns = true;
ui32 ResultRowsLimit = 0;
ui64 ResultSizeLimit = 0;
ui32 PragmaGroupByLimit = 1 << 5;
ui32 PragmaGroupByLimit = 1 << 6;
ui32 PragmaGroupByCubeLimit = 5;
THashSet<TString> Libraries;
NYql::TWarningPolicy WarningPolicy;
Expand Down
2 changes: 1 addition & 1 deletion ydb/library/yql/sql/v0/sql_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1563,7 +1563,7 @@ Y_UNIT_TEST_SUITE(SqlToYQLErrors) {
Y_UNIT_TEST(GroupByFewBigCubes) {
NYql::TAstParseResult res = SqlToYql("SELECT key FROM plato.Input GROUP BY CUBE(key, subkey, key + subkey as sum), CUBE(value, value + key + subkey as total);");
UNIT_ASSERT(!res.Root);
UNIT_ASSERT_NO_DIFF(Err2Str(res), "<main>:1:1: Error: Unable to GROUP BY more than 32 groups, you try use 80 groups\n");
UNIT_ASSERT_NO_DIFF(Err2Str(res), "<main>:1:1: Error: Unable to GROUP BY more than 64 groups, you try use 80 groups\n");
}

Y_UNIT_TEST(GroupByFewBigCubesWithPragmaLimit) {
Expand Down
2 changes: 1 addition & 1 deletion ydb/library/yql/sql/v1/context.h
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ namespace NSQLTranslationV1 {
bool WarnOnAnsiAliasShadowing = true;
ui32 ResultRowsLimit = 0;
ui64 ResultSizeLimit = 0;
ui32 PragmaGroupByLimit = 1 << 5;
ui32 PragmaGroupByLimit = 1 << 6;
ui32 PragmaGroupByCubeLimit = 5;
// if FlexibleTypes=true, emit TypeOrMember callable and resolve Type/Column uncertainty on type annotation stage, otherwise always emit Type
bool FlexibleTypes = false;
Expand Down
2 changes: 1 addition & 1 deletion ydb/library/yql/sql/v1/sql_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3428,7 +3428,7 @@ Y_UNIT_TEST_SUITE(SqlToYQLErrors) {
Y_UNIT_TEST(GroupByFewBigCubes) {
NYql::TAstParseResult res = SqlToYql("SELECT key FROM plato.Input GROUP BY CUBE(key, subkey, key + subkey as sum), CUBE(value, value + key + subkey as total);");
UNIT_ASSERT(!res.Root);
UNIT_ASSERT_NO_DIFF(Err2Str(res), "<main>:1:1: Error: Unable to GROUP BY more than 32 groups, you try use 80 groups\n");
UNIT_ASSERT_NO_DIFF(Err2Str(res), "<main>:1:1: Error: Unable to GROUP BY more than 64 groups, you try use 80 groups\n");
}

Y_UNIT_TEST(GroupByFewBigCubesWithPragmaLimit) {
Expand Down

0 comments on commit eabc943

Please sign in to comment.