[cherry-pick-2.1](table-function) pick some table functions exec performance (#34090) (#37778)

## Proposed changes

pick from master:
https://github.com/apache/doris/pull/33904
https://github.com/apache/doris/pull/34090

Co-authored-by: HappenLee <happenlee@hotmail.com>
This commit is contained in:
zhangstar333
2024-07-15 17:15:56 +08:00
committed by GitHub
parent a4d37d96ca
commit 967173d7d0
17 changed files with 417 additions and 288 deletions

View File

@ -187,16 +187,14 @@ Status TableFunctionLocalState::get_expanded_block(RuntimeState* state,
if (skip_child_row = _is_inner_and_empty(); skip_child_row) {
continue;
}
if (p._fn_num == 1) {
_current_row_insert_times += _fns[0]->get_value(
columns[p._child_slots.size()],
state->batch_size() - columns[p._child_slots.size()]->size());
} else {
for (int i = 0; i < p._fn_num; i++) {
_fns[i]->get_value(columns[i + p._child_slots.size()]);
}
_current_row_insert_times++;
_fns[p._fn_num - 1]->forward();
DCHECK_LE(1, p._fn_num);
auto repeat_times = _fns[p._fn_num - 1]->get_value(
columns[p._child_slots.size() + p._fn_num - 1],
state->batch_size() - columns[p._child_slots.size()]->size());
_current_row_insert_times += repeat_times;
for (int i = 0; i < p._fn_num - 1; i++) {
_fns[i]->get_same_many_values(columns[i + p._child_slots.size()], repeat_times);
}
}
}