diff options
13 files changed, 298 insertions, 16 deletions
diff --git a/ydb/library/yql/cfg/tests/gateways-experimental.conf b/ydb/library/yql/cfg/tests/gateways-experimental.conf index d2a8aa16f9e..a3d94fe4e26 100644 --- a/ydb/library/yql/cfg/tests/gateways-experimental.conf +++ b/ydb/library/yql/cfg/tests/gateways-experimental.conf @@ -18,6 +18,11 @@ Yt { Name: "TableContentLocalExecution" Value: "true" } + + DefaultSettings { + Name: "PartitionByConstantKeysViaMap" + Value: "true" + } } Dq { diff --git a/ydb/library/yql/providers/yt/common/yql_configuration.h b/ydb/library/yql/providers/yt/common/yql_configuration.h index 6d9ca0338ce..700db36b523 100644 --- a/ydb/library/yql/providers/yt/common/yql_configuration.h +++ b/ydb/library/yql/providers/yt/common/yql_configuration.h @@ -66,4 +66,6 @@ constexpr bool DEFAULT_TABLE_CONTENT_LOCAL_EXEC = false; constexpr ui32 DEFAULT_BATCH_LIST_FOLDER_CONCURRENCY = 5; +constexpr bool DEFAULT_PARTITION_BY_CONSTANT_KEYS_VIA_MAP = false; + } // NYql diff --git a/ydb/library/yql/providers/yt/common/yql_yt_settings.cpp b/ydb/library/yql/providers/yt/common/yql_yt_settings.cpp index b9538e8417f..8fe0a227626 100644 --- a/ydb/library/yql/providers/yt/common/yql_yt_settings.cpp +++ b/ydb/library/yql/providers/yt/common/yql_yt_settings.cpp @@ -468,6 +468,7 @@ TYtConfiguration::TYtConfiguration() return res; }); REGISTER_SETTING(*this, ViewIsolation); + REGISTER_SETTING(*this, PartitionByConstantKeysViaMap); } EReleaseTempDataMode GetReleaseTempDataMode(const TYtSettings& settings) { diff --git a/ydb/library/yql/providers/yt/common/yql_yt_settings.h b/ydb/library/yql/providers/yt/common/yql_yt_settings.h index 469a6c11668..a9c45e8a2e7 100644 --- a/ydb/library/yql/providers/yt/common/yql_yt_settings.h +++ b/ydb/library/yql/providers/yt/common/yql_yt_settings.h @@ -265,6 +265,7 @@ struct TYtSettings { NCommon::TConfSetting<double, false> MaxReplicationFactorToFuseMultiOuts; NCommon::TConfSetting<ui64, false> ApplyStoredConstraints; NCommon::TConfSetting<bool, false> ViewIsolation; + NCommon::TConfSetting<bool, false> PartitionByConstantKeysViaMap; }; EReleaseTempDataMode GetReleaseTempDataMode(const TYtSettings& settings); diff --git a/ydb/library/yql/providers/yt/provider/yql_yt_physical_finalizing.cpp b/ydb/library/yql/providers/yt/provider/yql_yt_physical_finalizing.cpp index 935ea9e00d2..0b28d82cb5c 100644 --- a/ydb/library/yql/providers/yt/provider/yql_yt_physical_finalizing.cpp +++ b/ydb/library/yql/providers/yt/provider/yql_yt_physical_finalizing.cpp @@ -2314,6 +2314,8 @@ private: if ((outerMap.World().Ref().IsWorld() || outerMap.World().Raw() == op.World().Raw()) && outerMap.Input().Size() == 1 && outerMap.DataSink().Cluster().Value() == op.DataSink().Cluster().Value() && NYql::HasSetting(op.Settings().Ref(), EYtSettingType::Flow) == NYql::HasSetting(outerMap.Settings().Ref(), EYtSettingType::Flow) + && !NYql::HasSetting(op.Settings().Ref(), EYtSettingType::JobCount) + && !NYql::HasSetting(outerMap.Settings().Ref(), EYtSettingType::JobCount) && !HasYtRowNumber(outerMap.Mapper().Body().Ref()) && IsYieldTransparent(outerMap.Mapper().Ptr(), *State_->Types) && (!op.Maybe<TYtMapReduce>() || AllOf(outerMap.Output(), [](const auto& out) { return !TYtTableBaseInfo::GetRowSpec(out)->IsSorted(); }))) { diff --git a/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp b/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp index 428913649c3..d8276407daf 100644 --- a/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp +++ b/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp @@ -1874,12 +1874,24 @@ private: } } + const bool canUseMapInsteadOfReduce = keySelectorLambda.Body().Ref().IsComplete() && + partByKey.SortDirections().Maybe<TCoVoid>() && + State_->Configuration->PartitionByConstantKeysViaMap.Get().GetOrElse(DEFAULT_PARTITION_BY_CONSTANT_KEYS_VIA_MAP); + + if (canUseMapInsteadOfReduce) { + YQL_ENSURE(!canUseReduce); + YQL_ENSURE(sortByColumns.empty()); + useSystemColumns = false; + } + auto settingsBuilder = Build<TCoNameValueTupleList>(ctx, node.Pos()); - settingsBuilder - .Add() - .Name().Value(ToString(EYtSettingType::ReduceBy)).Build() - .Value(TExprBase(ToColumnPairList(reduceByColumns, node.Pos(), ctx))) - .Build(); + if (!canUseMapInsteadOfReduce) { + settingsBuilder + .Add() + .Name().Value(ToString(EYtSettingType::ReduceBy)).Build() + .Value(TExprBase(ToColumnPairList(reduceByColumns, node.Pos(), ctx))) + .Build(); + } if (!sortByColumns.empty()) { settingsBuilder @@ -2266,7 +2278,14 @@ private: TExprNode::TPtr keyExtractor; TExprNode::TPtr handler; - if (useSystemColumns) { + if (canUseMapInsteadOfReduce) { + groupSwitch = Build<TCoLambda>(ctx, handlerLambda.Pos()) + .Args({"key", "item"}) + .Body<TCoBool>() + .Literal().Build("false") + .Build() + .Done().Ptr(); + } else if (useSystemColumns) { groupSwitch = Build<TCoLambda>(ctx, handlerLambda.Pos()) .Args({"key", "item"}) .Body<TCoSqlExtractKey>() @@ -2325,17 +2344,21 @@ private: .Build() .Done().Ptr(); - handler = Build<TCoLambda>(ctx, handlerLambda.Pos()) - .Args({"item"}) - .Body<TCoRemovePrefixMembers>() - .Input("item") - .Prefixes() - .Add() - .Value(YqlSysColumnKeySwitch) + if (canUseMapInsteadOfReduce) { + handler = BuildIdentityLambda(handlerLambda.Pos(), ctx).Ptr(); + } else { + handler = Build<TCoLambda>(ctx, handlerLambda.Pos()) + .Args({"item"}) + .Body<TCoRemovePrefixMembers>() + .Input("item") + .Prefixes() + .Add() + .Value(YqlSysColumnKeySwitch) + .Build() .Build() .Build() - .Build() - .Done().Ptr(); + .Done().Ptr(); + } } handlerLambda = Build<TCoLambda>(ctx, handlerLambda.Pos()) @@ -2429,7 +2452,7 @@ private: return WrapOp(reduce, ctx); } - if (needMap && (builder.NeedMap() || multiInput)) { + if (needMap && (builder.NeedMap() || multiInput) && !canUseMapInsteadOfReduce) { settingsBuilder .Add() .Name().Value(ToString(EYtSettingType::ReduceFilterBy)).Build() @@ -2437,6 +2460,25 @@ private: .Build(); } + if (canUseMapInsteadOfReduce && !filterColumns.empty()) { + reducer = Build<TCoLambda>(ctx, reducer.Pos()) + .Args({"input"}) + .Body<TExprApplier>() + .Apply(reducer) + .With<TCoMap>(0) + .Input("input") + .Lambda() + .Args({"item"}) + .Body<TCoSelectMembers>() + .Input("item") + .Members(ToAtomList(filterColumns, node.Pos(), ctx)) + .Build() + .Build() + .Build() + .Build() + .Done(); + } + bool unordered = ctx.IsConstraintEnabled<TSortedConstraintNode>(); TExprBase world = GetWorld(input, {}, ctx); if (hasInputSampling) { @@ -2519,6 +2561,26 @@ private: } } + if (canUseMapInsteadOfReduce) { + settingsBuilder + .Add() + .Name().Value(ToString(EYtSettingType::JobCount)).Build() + .Value(TExprBase(ctx.NewAtom(node.Pos(), 1u))) + .Build(); + + auto result = Build<TYtMap>(ctx, node.Pos()) + .World(ApplySyncListToWorld(world.Ptr(), syncList, ctx)) + .DataSink(GetDataSink(input, ctx)) + .Input(ConvertInputTable(input, ctx, TConvertInputOpts().MakeUnordered(unordered))) + .Output() + .Add(ConvertOutTables(node.Pos(), outItemType, ctx, State_, &partByKey.Ref().GetConstraintSet())) + .Build() + .Settings(settingsBuilder.Done()) + .Mapper(reducer) + .Done(); + return WrapOp(result, ctx); + } + if (forceMapper && mapper.Maybe<TCoVoid>()) { mapper = MakeJobLambda<false>(Build<TCoLambda>(ctx, node.Pos()).Args({"stream"}).Body("stream").Done(), useMapFlow, ctx); } @@ -4555,6 +4617,9 @@ private: if (NYql::HasSetting(innerMap.Settings().Ref(), EYtSettingType::Flow) != NYql::HasSetting(outerMap.Settings().Ref(), EYtSettingType::Flow)) { return node; } + if (NYql::HasAnySetting(outerMap.Settings().Ref(), EYtSettingType::JobCount)) { + return node; + } if (!path.Ranges().Maybe<TCoVoid>()) { return node; } @@ -4690,6 +4755,9 @@ private: if (NYql::HasAnySetting(inner.Settings().Ref(), EYtSettingType::Limit | EYtSettingType::SortLimitBy | EYtSettingType::JobCount)) { return node; } + if (NYql::HasSetting(outerMap.Settings().Ref(), EYtSettingType::JobCount)) { + return node; + } if (outerMap.Input().Item(0).Settings().Size() != 0) { return node; } diff --git a/ydb/library/yql/tests/sql/dq_file/part0/canondata/result.json b/ydb/library/yql/tests/sql/dq_file/part0/canondata/result.json index 70ce60bbd48..02837b9a08a 100644 --- a/ydb/library/yql/tests/sql/dq_file/part0/canondata/result.json +++ b/ydb/library/yql/tests/sql/dq_file/part0/canondata/result.json @@ -316,6 +316,28 @@ } ], "test.test[aggregate-aggregate_with_lambda--Results]": [], + "test.test[aggregate-aggrs_no_grouping_via_map_compact-default.txt-Analyze]": [ + { + "checksum": "7ec0b77d45f8c1c95538df9b98d538eb", + "size": 5493, + "uri": "https://{canondata_backend}/1777230/a97ee3227d27cacdc966530fa6d636c72275674d/resource.tar.gz#test.test_aggregate-aggrs_no_grouping_via_map_compact-default.txt-Analyze_/plan.txt" + } + ], + "test.test[aggregate-aggrs_no_grouping_via_map_compact-default.txt-Debug]": [ + { + "checksum": "b8c5e41e63a72494e4b90ae7312e6722", + "size": 15025, + "uri": "https://{canondata_backend}/1784826/0f7a5cd2267f3fe3eea29d99c96318d3d804d5a1/resource.tar.gz#test.test_aggregate-aggrs_no_grouping_via_map_compact-default.txt-Debug_/opt.yql_patched" + } + ], + "test.test[aggregate-aggrs_no_grouping_via_map_compact-default.txt-Plan]": [ + { + "checksum": "7ec0b77d45f8c1c95538df9b98d538eb", + "size": 5493, + "uri": "https://{canondata_backend}/1777230/a97ee3227d27cacdc966530fa6d636c72275674d/resource.tar.gz#test.test_aggregate-aggrs_no_grouping_via_map_compact-default.txt-Plan_/plan.txt" + } + ], + "test.test[aggregate-aggrs_no_grouping_via_map_compact-default.txt-Results]": [], "test.test[aggregate-group_by_expr_order_by_expr--Analyze]": [ { "checksum": "68758cc21a759dfeca1624654de64bdd", diff --git a/ydb/library/yql/tests/sql/dq_file/part14/canondata/result.json b/ydb/library/yql/tests/sql/dq_file/part14/canondata/result.json index cfbd4de16cd..27de5c2cdd1 100644 --- a/ydb/library/yql/tests/sql/dq_file/part14/canondata/result.json +++ b/ydb/library/yql/tests/sql/dq_file/part14/canondata/result.json @@ -253,6 +253,28 @@ } ], "test.test[aggregate-agg_phases_table3-default.txt-Results]": [], + "test.test[aggregate-aggrs_no_grouping_via_map-default.txt-Analyze]": [ + { + "checksum": "5048337a717516d7c51613138fffc56c", + "size": 5491, + "uri": "https://{canondata_backend}/1937367/be35feae41cdf3f87ad7ea8d4ce18ba9629b9c4f/resource.tar.gz#test.test_aggregate-aggrs_no_grouping_via_map-default.txt-Analyze_/plan.txt" + } + ], + "test.test[aggregate-aggrs_no_grouping_via_map-default.txt-Debug]": [ + { + "checksum": "2a231c8b8ee5743f3aa9aa3ff228ba0e", + "size": 22045, + "uri": "https://{canondata_backend}/1923547/bcb169d6a98387261f9bf1763d05b629d1ed0873/resource.tar.gz#test.test_aggregate-aggrs_no_grouping_via_map-default.txt-Debug_/opt.yql_patched" + } + ], + "test.test[aggregate-aggrs_no_grouping_via_map-default.txt-Plan]": [ + { + "checksum": "5048337a717516d7c51613138fffc56c", + "size": 5491, + "uri": "https://{canondata_backend}/1937367/be35feae41cdf3f87ad7ea8d4ce18ba9629b9c4f/resource.tar.gz#test.test_aggregate-aggrs_no_grouping_via_map-default.txt-Plan_/plan.txt" + } + ], + "test.test[aggregate-aggrs_no_grouping_via_map-default.txt-Results]": [], "test.test[aggregate-group_by_cube_expr_trio--Analyze]": [ { "checksum": "23f6ef9781306d246a286e3afc242460", diff --git a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json index 2c89d6b5b98..7afe2199c1e 100644 --- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json +++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json @@ -1721,6 +1721,20 @@ "uri": "https://{canondata_backend}/1871182/6b10ad6d9884e5faf3a77187ffb9b38b59b46458/resource.tar.gz#test_sql2yql.test_aggregate-aggrs_no_grouping_/sql.yql" } ], + "test_sql2yql.test[aggregate-aggrs_no_grouping_via_map]": [ + { + "checksum": "7178378193cad6646eb2f56f88968771", + "size": 13576, + "uri": "https://{canondata_backend}/1937367/1251b8b408ef167749e32c6a9872574193aac10c/resource.tar.gz#test_sql2yql.test_aggregate-aggrs_no_grouping_via_map_/sql.yql" + } + ], + "test_sql2yql.test[aggregate-aggrs_no_grouping_via_map_compact]": [ + { + "checksum": "15eccd38936bf65cdd85fc025e0925e2", + "size": 15566, + "uri": "https://{canondata_backend}/1937367/1251b8b408ef167749e32c6a9872574193aac10c/resource.tar.gz#test_sql2yql.test_aggregate-aggrs_no_grouping_via_map_compact_/sql.yql" + } + ], "test_sql2yql.test[aggregate-avg_and_sum]": [ { "checksum": "79739198f6ebccd1e0310d5b7422d4e6", @@ -19067,6 +19081,20 @@ "uri": "https://{canondata_backend}/1880306/64654158d6bfb1289c66c626a8162239289559d0/resource.tar.gz#test_sql_format.test_aggregate-aggrs_no_grouping_/formatted.sql" } ], + "test_sql_format.test[aggregate-aggrs_no_grouping_via_map]": [ + { + "checksum": "87bcd0d25dab9d63694caf1e3e940bbd", + "size": 1515, + "uri": "https://{canondata_backend}/1937367/1251b8b408ef167749e32c6a9872574193aac10c/resource.tar.gz#test_sql_format.test_aggregate-aggrs_no_grouping_via_map_/formatted.sql" + } + ], + "test_sql_format.test[aggregate-aggrs_no_grouping_via_map_compact]": [ + { + "checksum": "91723a562d00c7c5a22088dad5b2e4ee", + "size": 1539, + "uri": "https://{canondata_backend}/1937367/1251b8b408ef167749e32c6a9872574193aac10c/resource.tar.gz#test_sql_format.test_aggregate-aggrs_no_grouping_via_map_compact_/formatted.sql" + } + ], "test_sql_format.test[aggregate-avg_and_sum]": [ { "checksum": "067d46d5653bcb904d02b77caff9927a", diff --git a/ydb/library/yql/tests/sql/suites/aggregate/aggrs_no_grouping_via_map.sql b/ydb/library/yql/tests/sql/suites/aggregate/aggrs_no_grouping_via_map.sql new file mode 100644 index 00000000000..cb1105b769d --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/aggregate/aggrs_no_grouping_via_map.sql @@ -0,0 +1,44 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma yt.PartitionByConstantKeysViaMap; +select + count(key) as keyCount, + count(sub) as subCount, + count(val) as valCount, + countIf(sub % 2 == 0) as evenCount, + countIf(sub % 2 == 1) as oddCount, + every(sub % 2 == 0) as every, + boolOr(sub % 2 == 0) as boolOr, + avg(key) as keyAvg, + avg(sub) as subAvg, + min(key) as keyMin, + min(sub) as subMin, + min(val) as valMin, + max(key) as keyMax, + max(sub) as subMax, + max(val) as valMax, + some(key) as keySome, + some(sub) as subSome, + some(val) as valSome, + bitAnd(cast(key AS Uint64)) as keyBitAnd, + bitOr(cast(key AS Uint64)) as keyBitOr, + bitXor(cast(key AS Uint64)) as keyBitXor, + bitAnd(cast(sub AS Uint64)) as subBitAnd, + bitOr(cast(sub AS Uint64)) as subBitOr, + bitXor(cast(sub AS Uint64)) as subBitXor, + median(key) as keyMedian, + median(sub) as subMedian, + stdDev(key) as keyStdDev, + stdDev(sub) as subStdDev, + stdDev(empty) as emptyStdDev, + variance(key) as keyVariance, + variance(sub) as subVariance, + stdDevPop(key) as keyPopStdDev, + stdDevPop(sub) as subPopStdDev, + varPop(key) as keyPopVariance, + varPop(sub) as subPopVariance, + correlation(key, sub) AS corr, + covariance(key, sub) AS covar, + covarpop(key, sub) AS covarpop +from + (select cast(key as int) as key, Unwrap(cast(subkey as int)) as sub, value as val, cast(value AS int) AS empty from plato.Input); diff --git a/ydb/library/yql/tests/sql/suites/aggregate/aggrs_no_grouping_via_map_compact.sql b/ydb/library/yql/tests/sql/suites/aggregate/aggrs_no_grouping_via_map_compact.sql new file mode 100644 index 00000000000..acb0e79e4ee --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/aggregate/aggrs_no_grouping_via_map_compact.sql @@ -0,0 +1,45 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma yt.PartitionByConstantKeysViaMap; +select + count(key) as keyCount, + count(sub) as subCount, + count(val) as valCount, + countIf(sub % 2 == 0) as evenCount, + countIf(sub % 2 == 1) as oddCount, + every(sub % 2 == 0) as every, + boolOr(sub % 2 == 0) as boolOr, + avg(key) as keyAvg, + avg(sub) as subAvg, + min(key) as keyMin, + min(sub) as subMin, + min(val) as valMin, + max(key) as keyMax, + max(sub) as subMax, + max(val) as valMax, + some(key) as keySome, + some(sub) as subSome, + some(val) as valSome, + bitAnd(cast(key AS Uint64)) as keyBitAnd, + bitOr(cast(key AS Uint64)) as keyBitOr, + bitXor(cast(key AS Uint64)) as keyBitXor, + bitAnd(cast(sub AS Uint64)) as subBitAnd, + bitOr(cast(sub AS Uint64)) as subBitOr, + bitXor(cast(sub AS Uint64)) as subBitXor, + median(key) as keyMedian, + median(sub) as subMedian, + stdDev(key) as keyStdDev, + stdDev(sub) as subStdDev, + stdDev(empty) as emptyStdDev, + variance(key) as keyVariance, + variance(sub) as subVariance, + stdDevPop(key) as keyPopStdDev, + stdDevPop(sub) as subPopStdDev, + varPop(key) as keyPopVariance, + varPop(sub) as subPopVariance, + correlation(key, sub) AS corr, + covariance(key, sub) AS covar, + covarpop(key, sub) AS covarpop +from + (select cast(key as int) as key, Unwrap(cast(subkey as int)) as sub, value as val, cast(value AS int) AS empty from plato.Input) +group compact by (); diff --git a/ydb/library/yql/tests/sql/yt_native_file/part0/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part0/canondata/result.json index 60644611e90..819e0c772b2 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part0/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part0/canondata/result.json @@ -293,6 +293,27 @@ "uri": "https://{canondata_backend}/1031349/a2d4ff3f821af2abc956289d3861b20fa2f7f1bd/resource.tar.gz#test.test_aggregate-aggregate_with_lambda--Results_/results.txt" } ], + "test.test[aggregate-aggrs_no_grouping_via_map_compact-default.txt-Debug]": [ + { + "checksum": "cdd5980f1f4929be151d69952cb282d4", + "size": 16112, + "uri": "https://{canondata_backend}/1777230/4ed7650eeb0577939cace989ff0f400e2ec6a71c/resource.tar.gz#test.test_aggregate-aggrs_no_grouping_via_map_compact-default.txt-Debug_/opt.yql" + } + ], + "test.test[aggregate-aggrs_no_grouping_via_map_compact-default.txt-Plan]": [ + { + "checksum": "ffe00677e97f277dfe654ad3a5233e5c", + "size": 5043, + "uri": "https://{canondata_backend}/1946324/fd57527b924653ec8cc0da2bc20971d488d42ab2/resource.tar.gz#test.test_aggregate-aggrs_no_grouping_via_map_compact-default.txt-Plan_/plan.txt" + } + ], + "test.test[aggregate-aggrs_no_grouping_via_map_compact-default.txt-Results]": [ + { + "checksum": "d67659cf5731706e3bd23ad4d3eec160", + "size": 18030, + "uri": "https://{canondata_backend}/1946324/fd57527b924653ec8cc0da2bc20971d488d42ab2/resource.tar.gz#test.test_aggregate-aggrs_no_grouping_via_map_compact-default.txt-Results_/results.txt" + } + ], "test.test[aggregate-group_by_expr_order_by_expr--Debug]": [ { "checksum": "b7e248e6aaaac07b2ad87353d17a6010", diff --git a/ydb/library/yql/tests/sql/yt_native_file/part14/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part14/canondata/result.json index db31f6e348a..fd504658ad4 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part14/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part14/canondata/result.json @@ -230,6 +230,27 @@ "uri": "https://{canondata_backend}/1923547/5154c8bd8ef9ead4f609771f831f20c15e795571/resource.tar.gz#test.test_aggregate-agg_phases_table3-default.txt-Results_/results.txt" } ], + "test.test[aggregate-aggrs_no_grouping_via_map-default.txt-Debug]": [ + { + "checksum": "9bd103667826b31412dd0f07b2764fa0", + "size": 25068, + "uri": "https://{canondata_backend}/1777230/fe85c1e540c1c2f40deaa85335f1c2f979322ac1/resource.tar.gz#test.test_aggregate-aggrs_no_grouping_via_map-default.txt-Debug_/opt.yql" + } + ], + "test.test[aggregate-aggrs_no_grouping_via_map-default.txt-Plan]": [ + { + "checksum": "e27e3049865097746707bc6b9687811c", + "size": 5145, + "uri": "https://{canondata_backend}/1936947/bdcb7aea56336d84dbed597af7bb9fb891ffe59f/resource.tar.gz#test.test_aggregate-aggrs_no_grouping_via_map-default.txt-Plan_/plan.txt" + } + ], + "test.test[aggregate-aggrs_no_grouping_via_map-default.txt-Results]": [ + { + "checksum": "d67659cf5731706e3bd23ad4d3eec160", + "size": 18030, + "uri": "https://{canondata_backend}/1936947/bdcb7aea56336d84dbed597af7bb9fb891ffe59f/resource.tar.gz#test.test_aggregate-aggrs_no_grouping_via_map-default.txt-Results_/results.txt" + } + ], "test.test[aggregate-group_by_cube_expr_trio--Debug]": [ { "checksum": "6001a0fb46c5aa1305800c8fe705a024", |
