@@ -175,17 +175,19 @@ struct TJoinOrderHints {
175
175
};
176
176
177
177
struct TOptimizerHints {
178
+ std::shared_ptr<TCardinalityHints> BytesHints = std::make_shared<TCardinalityHints>();
178
179
std::shared_ptr<TCardinalityHints> CardinalityHints = std::make_shared<TCardinalityHints>();
179
180
std::shared_ptr<TJoinAlgoHints> JoinAlgoHints = std::make_shared<TJoinAlgoHints>();
180
181
std::shared_ptr<TJoinOrderHints> JoinOrderHints = std::make_shared<TJoinOrderHints>();
181
182
182
183
TVector<TString> GetUnappliedString ();
183
184
184
185
/*
185
- * The function accepts string with three type of expressions: array of (JoinAlgo | Card | JoinOrder):
186
+ * The function accepts string with four type of expressions: array of (JoinAlgo | Rows | Bytes | JoinOrder):
186
187
* 1) JoinAlgo(t1 t2 ... tn Map | Grace | Lookup) to change join algo for join, where these labels take part
187
- * 2) Card(t1 t2 ... tn (*|/|+|-) Number) to change cardinality for join, where these labels take part or labels only
188
- * 3) JoinOrder( (t1 t2) (t3 (t4 ...)) ) - fixate this join subtree in the general join tree
188
+ * 2) Rows(t1 t2 ... tn (*|/|+|-|#) Number) to change cardinality for join, where these labels take part or labels only
189
+ * 3) Bytes(t1 t2 ... tn (*|/|+|-|#) Number) to change byte size for join, where these labels take part or labels only
190
+ * 4) JoinOrder( (t1 t2) (t3 (t4 ...)) ) - fixate this join subtree in the general join tree
189
191
*/
190
192
static TOptimizerHints Parse (const TString&);
191
193
};
@@ -228,6 +230,19 @@ struct IProviderContext {
228
230
bool shuffleRightSide
229
231
) const = 0;
230
232
233
+ virtual TOptimizerStatistics ComputeJoinStatsV2 (
234
+ const TOptimizerStatistics& leftStats,
235
+ const TOptimizerStatistics& rightStats,
236
+ const TVector<NDq::TJoinColumn>& leftJoinKeys,
237
+ const TVector<NDq::TJoinColumn>& rightJoinKeys,
238
+ EJoinAlgoType joinAlgo,
239
+ EJoinKind joinKind,
240
+ TCardinalityHints::TCardinalityHint* maybeHint,
241
+ bool shuffleLeftSide,
242
+ bool shuffleRightSide,
243
+ TCardinalityHints::TCardinalityHint* maybeBytesHint
244
+ ) const = 0;
245
+
231
246
virtual bool IsJoinApplicable (const std::shared_ptr<IBaseOptimizerNode>& left,
232
247
const std::shared_ptr<IBaseOptimizerNode>& right,
233
248
const TVector<NDq::TJoinColumn>& leftJoinKeys,
@@ -283,6 +298,19 @@ struct TBaseProviderContext : public IProviderContext {
283
298
bool shuffleRightSide
284
299
) const override ;
285
300
301
+ TOptimizerStatistics ComputeJoinStatsV2 (
302
+ const TOptimizerStatistics& leftStats,
303
+ const TOptimizerStatistics& rightStats,
304
+ const TVector<NDq::TJoinColumn>& leftJoinKeys,
305
+ const TVector<NDq::TJoinColumn>& rightJoinKeys,
306
+ EJoinAlgoType joinAlgo,
307
+ EJoinKind joinKind,
308
+ TCardinalityHints::TCardinalityHint* maybeHint,
309
+ bool shuffleLeftSide,
310
+ bool shuffleRightSide,
311
+ TCardinalityHints::TCardinalityHint* maybeBytesHint
312
+ ) const override ;
313
+
286
314
static const TBaseProviderContext& Instance ();
287
315
};
288
316
0 commit comments