@@ -1114,6 +1114,32 @@ class TKqpQueryCompiler : public IKqpQueryCompiler {
11141114 }
11151115 }
11161116
1117+ THashMap<TStringBuf, ui32> CreateColumnToOrder (
1118+ const TVector<TStringBuf>& columns,
1119+ const TKikimrTableMetadataPtr& tableMeta,
1120+ bool keysFirst) {
1121+ THashSet<TStringBuf> usedColumns;
1122+ for (const auto & columnName : columns) {
1123+ usedColumns.insert (columnName);
1124+ }
1125+
1126+ THashMap<TStringBuf, ui32> columnToOrder;
1127+ ui32 number = 0 ;
1128+ if (keysFirst) {
1129+ for (const auto & columnName : tableMeta->KeyColumnNames ) {
1130+ YQL_ENSURE (usedColumns.contains (columnName));
1131+ columnToOrder[columnName] = number++;
1132+ }
1133+ }
1134+ for (const auto & columnName : tableMeta->ColumnOrder ) {
1135+ if (usedColumns.contains (columnName) && !columnToOrder.contains (columnName)) {
1136+ columnToOrder[columnName] = number++;
1137+ }
1138+ }
1139+
1140+ return columnToOrder;
1141+ }
1142+
11171143 void FillKqpSink (const TDqSink& sink, NKqpProto::TKqpSink* protoSink, THashMap<TStringBuf, THashSet<TStringBuf>>& tablesMap, const TDqPhyStage& stage) {
11181144 if (auto settings = sink.Settings ().Maybe <TKqpTableSinkSettings>()) {
11191145 NKqpProto::TKqpInternalSink& internalSinkProto = *protoSink->MutableInternalSink ();
@@ -1165,6 +1191,14 @@ class TKqpQueryCompiler : public IKqpQueryCompiler {
11651191 fillColumnProto (columnName, columnMeta, columnProto);
11661192 }
11671193
1194+ const auto columnToOrder = CreateColumnToOrder (
1195+ columns,
1196+ tableMeta,
1197+ settings.TableType ().Cast ().StringValue () == " oltp" );
1198+ for (const auto & columnName : columns) {
1199+ settingsProto.AddWriteIndexes (columnToOrder.at (columnName));
1200+ }
1201+
11681202 if (const auto inconsistentWrite = settings.InconsistentWrite ().Cast (); inconsistentWrite.StringValue () == " true" ) {
11691203 settingsProto.SetInconsistentTx (true );
11701204 }
0 commit comments