disable pk function

This commit is contained in:
jsc0218 2024-09-14 20:41:36 +00:00
parent c8d6c17768
commit 105639c087
3 changed files with 32 additions and 11 deletions

View File

@ -1098,6 +1098,17 @@ Pipe ReadFromMergeTree::spreadMarkRangesAmongStreamsWithOrder(
splitted_parts_and_ranges.emplace_back(std::move(new_parts));
}
bool primary_key_type_supports_virtual_row = true;
const auto & actions = storage_snapshot->metadata->getPrimaryKey().expression->getActions();
for (const auto & action : actions)
{
if (action.node->type != ActionsDAG::ActionType::INPUT)
{
primary_key_type_supports_virtual_row = false;
break;
}
}
/// If enabled in the optimization stage, check whether there are more than one branch.
if (enable_virtual_row)
enable_virtual_row = splitted_parts_and_ranges.size() > 1
@ -1111,7 +1122,8 @@ Pipe ReadFromMergeTree::spreadMarkRangesAmongStreamsWithOrder(
if (!enable_virtual_row)
enable_current_virtual_row = (need_preliminary_merge || output_each_partition_through_separate_port) && item.size() > 1;
pipes.emplace_back(readInOrder(std::move(item), column_names, pool_settings, read_type, input_order_info->limit, enable_current_virtual_row));
pipes.emplace_back(readInOrder(std::move(item), column_names, pool_settings, read_type, input_order_info->limit,
enable_current_virtual_row && primary_key_type_supports_virtual_row));
}
}

View File

@ -12,9 +12,6 @@ ExpressionTransform × 3
MergeTreeSelect(pool: ReadPoolInOrder, algorithm: InOrder) 0 → 1
MergingSortedTransform 2 → 1
ExpressionTransform × 2
VirtualRowTransform
MergeTreeSelect(pool: ReadPoolInOrder, algorithm: InOrder) 0 → 1
VirtualRowTransform
MergeTreeSelect(pool: ReadPoolInOrder, algorithm: InOrder) 0 → 1
ExpressionTransform
MergeTreeSelect(pool: ReadPoolInOrder, algorithm: InOrder) 0 → 1
MergeTreeSelect(pool: ReadPoolInOrder, algorithm: InOrder) × 2 0 → 1
ExpressionTransform
MergeTreeSelect(pool: ReadPoolInOrder, algorithm: InOrder) 0 → 1

View File

@ -138,7 +138,14 @@ SYSTEM STOP MERGES fixed_prefix;
INSERT INTO fixed_prefix VALUES (0, 100), (1, 2), (1, 3), (1, 4), (2, 5);
INSERT INTO fixed_prefix VALUES (0, 100), (1, 2), (1, 3), (1, 4), (2, 5);
SELECT a, b FROM fixed_prefix WHERE a = 1 ORDER BY b SETTINGS max_threads = 1;
SELECT a, b
FROM fixed_prefix
WHERE a = 1
ORDER BY b
SETTINGS max_threads = 1,
read_in_order_use_buffering = false,
optimize_read_in_order = 1,
read_in_order_two_level_merge_threshold = 0; --force preliminary merge
DROP TABLE fixed_prefix;
@ -160,8 +167,13 @@ INSERT INTO function_pk values(1,1);
INSERT INTO function_pk values(1,3);
INSERT INTO function_pk values(1,2);
-- TODO: handle preliminary merge for this case, temporarily disable it
SET optimize_read_in_order = 0;
SELECT * FROM function_pk ORDER BY (A,-B) ASC limit 3 SETTINGS max_threads = 1;
SELECT *
FROM function_pk
ORDER BY (A,-B) ASC
limit 3
SETTINGS max_threads = 1,
read_in_order_use_buffering = false,
optimize_read_in_order = 1,
read_in_order_two_level_merge_threshold = 0; --force preliminary merge
DROP TABLE function_pk;