1
1
#include " kqp_executer.h"
2
2
#include " kqp_executer_impl.h"
3
3
#include " kqp_locks_helper.h"
4
- #include " kqp_partition_helper.h"
5
4
#include " kqp_planner.h"
6
5
#include " kqp_table_resolver.h"
7
6
#include " kqp_tasks_validate.h"
@@ -102,12 +101,13 @@ class TKqpDataExecuter : public TKqpExecuterBase<TKqpDataExecuter, EExecType::Da
102
101
const TActorId& creator, const TIntrusivePtr<TUserRequestContext>& userRequestContext,
103
102
ui32 statementResultIndex, const std::optional<TKqpFederatedQuerySetup>& federatedQuerySetup,
104
103
const TGUCSettings::TPtr& GUCSettings,
104
+ TPartitionPruner::TConfig partitionPrunerConfig,
105
105
const TShardIdToTableInfoPtr& shardIdToTableInfo,
106
106
const IKqpTransactionManagerPtr& txManager,
107
107
const TActorId bufferActorId,
108
- TMaybe<TBatchOperationSettings > batchOperationSettings = Nothing())
109
- : TBase(std::move(request), std::move(asyncIoFactory), federatedQuerySetup, GUCSettings, database, userToken, counters, executerConfig ,
110
- userRequestContext, statementResultIndex, TWilsonKqp::DataExecuter,
108
+ TMaybe<NBatchOperations::TSettings > batchOperationSettings = Nothing())
109
+ : TBase(std::move(request), std::move(asyncIoFactory), federatedQuerySetup, GUCSettings, std::move(partitionPrunerConfig) ,
110
+ database, userToken, counters, executerConfig, userRequestContext, statementResultIndex, TWilsonKqp::DataExecuter,
111
111
" DataExecuter" , streamResult, bufferActorId, txManager, std::move(batchOperationSettings))
112
112
, ShardIdToTableInfo(shardIdToTableInfo)
113
113
, AllowOlapDataQuery(executerConfig.TableServiceConfig.GetAllowOlapDataQuery())
@@ -212,14 +212,14 @@ class TKqpDataExecuter : public TKqpExecuterBase<TKqpDataExecuter, EExecType::Da
212
212
}
213
213
}
214
214
215
- if (info.HasBatchOperationMaxKey ()) {
216
- if (ResponseEv->BatchOperationMaxKeys .empty ()) {
217
- for (auto keyId : info.GetBatchOperationKeyIds ()) {
218
- ResponseEv->BatchOperationKeyIds .push_back (keyId);
215
+ if (!BatchOperationSettings. Empty () && info.HasSerializedEndRow ()) {
216
+ if (ResponseEv->EndRowColumnIds .empty ()) {
217
+ for (auto keyId : info.GetEndRowColumnIds ()) {
218
+ ResponseEv->EndRowColumnIds .push_back (keyId);
219
219
}
220
220
}
221
221
222
- ResponseEv->BatchOperationMaxKeys .emplace_back (info.GetBatchOperationMaxKey ());
222
+ ResponseEv->SerializedEndRows .emplace_back (info.GetSerializedEndRow ());
223
223
}
224
224
} else if (data.GetData ().template Is <NKikimrKqp::TEvKqpOutputActorResultInfo>()) {
225
225
NKikimrKqp::TEvKqpOutputActorResultInfo info;
@@ -1651,7 +1651,7 @@ class TKqpDataExecuter : public TKqpExecuterBase<TKqpDataExecuter, EExecType::Da
1651
1651
case NKqpProto::TKqpPhyTableOperation::kLookup : {
1652
1652
auto columns = BuildKqpColumns (op, tableInfo);
1653
1653
bool isFullScan = false ;
1654
- auto partitions = PrunePartitions (op, stageInfo, HolderFactory (), TypeEnv () , isFullScan);
1654
+ auto partitions = PartitionPruner. Prune (op, stageInfo, isFullScan);
1655
1655
auto readSettings = ExtractReadSettings (op, stageInfo, HolderFactory (), TypeEnv ());
1656
1656
1657
1657
if (!readSettings.ItemsLimit && isFullScan) {
@@ -1673,7 +1673,7 @@ class TKqpDataExecuter : public TKqpExecuterBase<TKqpDataExecuter, EExecType::Da
1673
1673
case NKqpProto::TKqpPhyTableOperation::kDeleteRows : {
1674
1674
YQL_ENSURE (stage.InputsSize () <= 1 , " Effect stage with multiple inputs: " << stage.GetProgramAst ());
1675
1675
1676
- auto result = PruneEffectPartitions (op, stageInfo, HolderFactory (), TypeEnv () );
1676
+ auto result = PartitionPruner. PruneEffect (op, stageInfo);
1677
1677
for (auto & [shardId, shardInfo] : result) {
1678
1678
YQL_ENSURE (!shardInfo.KeyReadRanges );
1679
1679
YQL_ENSURE (shardInfo.KeyWriteRanges );
@@ -2251,7 +2251,7 @@ class TKqpDataExecuter : public TKqpExecuterBase<TKqpDataExecuter, EExecType::Da
2251
2251
if (stage.SourcesSize () > 0 && stage.GetSources (0 ).GetTypeCase () == NKqpProto::TKqpSource::kReadRangesSource ) {
2252
2252
const auto & source = stage.GetSources (0 ).GetReadRangesSource ();
2253
2253
bool isFullScan;
2254
- SourceScanStageIdToParititions[stageInfo.Id ] = PrunePartitions (source, stageInfo, HolderFactory (), TypeEnv () , isFullScan);
2254
+ SourceScanStageIdToParititions[stageInfo.Id ] = PartitionPruner. Prune (source, stageInfo, isFullScan);
2255
2255
if (isFullScan && !source.HasItemsLimit ()) {
2256
2256
Counters->Counters ->FullScansExecuted ->Inc ();
2257
2257
}
@@ -3058,12 +3058,13 @@ IActor* CreateKqpDataExecuter(IKqpGateway::TExecPhysicalRequest&& request, const
3058
3058
NYql::NDq::IDqAsyncIoFactory::TPtr asyncIoFactory, const TActorId& creator,
3059
3059
const TIntrusivePtr<TUserRequestContext>& userRequestContext, ui32 statementResultIndex,
3060
3060
const std::optional<TKqpFederatedQuerySetup>& federatedQuerySetup, const TGUCSettings::TPtr& GUCSettings,
3061
- const TShardIdToTableInfoPtr& shardIdToTableInfo, const IKqpTransactionManagerPtr& txManager, const TActorId bufferActorId,
3062
- TMaybe<TBatchOperationSettings> batchOperationSettings)
3061
+ TPartitionPruner::TConfig partitionPrunerConfig, const TShardIdToTableInfoPtr& shardIdToTableInfo,
3062
+ const IKqpTransactionManagerPtr& txManager, const TActorId bufferActorId,
3063
+ TMaybe<NBatchOperations::TSettings> batchOperationSettings)
3063
3064
{
3064
3065
return new TKqpDataExecuter (std::move (request), database, userToken, counters, streamResult, executerConfig,
3065
3066
std::move (asyncIoFactory), creator, userRequestContext, statementResultIndex, federatedQuerySetup, GUCSettings,
3066
- shardIdToTableInfo, txManager, bufferActorId, std::move (batchOperationSettings));
3067
+ std::move (partitionPrunerConfig), shardIdToTableInfo, txManager, bufferActorId, std::move (batchOperationSettings));
3067
3068
}
3068
3069
3069
3070
} // namespace NKqp
0 commit comments