mirror of https://github.com/ByConity/ByConity
Merge 'cnch_dev_fix_partial_update_default_expr' into 'cnch-dev'
fix(clickhousech@m-5371058578): fix partial update default expression See merge request: !25758
This commit is contained in:
parent
65a5f0115b
commit
07ec6bd1ac
|
@ -1119,6 +1119,7 @@ std::vector<Block> MergeTreeDataDeduper::restoreBlockFromNewParts(const IMergeTr
|
|||
{
|
||||
auto metadata_snapshot = data.getInMemoryMetadataPtr();
|
||||
auto sample_block = metadata_snapshot->getSampleBlock();
|
||||
auto default_columns = metadata_snapshot->getColumns().getDefaults();
|
||||
Names column_names = sample_block.getNames();
|
||||
NameSet name_set = sample_block.getNameSet();
|
||||
|
||||
|
@ -1159,7 +1160,10 @@ std::vector<Block> MergeTreeDataDeduper::restoreBlockFromNewParts(const IMergeTr
|
|||
LOG_DEBUG(log, "Same update columns: {}, txn id: {}, part name: {}", same_update_columns, dedup_task->txn_id, part->name);
|
||||
|
||||
if (size == 0)
|
||||
{
|
||||
columns_read = column_names;
|
||||
update_column_set_list[part_id] = {columns_read.begin(), columns_read.end()};
|
||||
}
|
||||
else
|
||||
{
|
||||
/// Restore update columns must use part columns instead of storage columns
|
||||
|
@ -1194,6 +1198,11 @@ std::vector<Block> MergeTreeDataDeduper::restoreBlockFromNewParts(const IMergeTr
|
|||
if (data.merging_params.hasExplicitVersionColumn())
|
||||
columns_read_set.insert(data.merging_params.version_column);
|
||||
|
||||
update_column_set_list[part_id] = {columns_read_set.begin(), columns_read_set.end()};
|
||||
/// We need to read out the columns containing the default expression
|
||||
for (const auto & default_column : default_columns)
|
||||
columns_read_set.insert(default_column.first);
|
||||
|
||||
columns_read = {columns_read_set.begin(), columns_read_set.end()};
|
||||
}
|
||||
}
|
||||
|
@ -1203,9 +1212,6 @@ std::vector<Block> MergeTreeDataDeduper::restoreBlockFromNewParts(const IMergeTr
|
|||
columns_read = column_names;
|
||||
}
|
||||
|
||||
if (optimize_for_same_update_columns_atomic)
|
||||
update_column_set_list[part_id] = {columns_read.begin(), columns_read.end()};
|
||||
|
||||
size_t total_size = update_columns->size();
|
||||
to_block.insert(
|
||||
ColumnWithTypeAndName{std::move(update_columns), std::make_shared<DataTypeString>(), StorageInMemoryMetadata::UPDATE_COLUMNS});
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
2023-01-01 1001 20 c1 e1
|
||||
2023-01-01 1002 21 c2 e2
|
||||
2023-01-01 1003 22 c3 e3
|
||||
2023-01-02 1004 23 d1 e4
|
||||
2023-01-02 1005 0 d1 d1test
|
|
@ -0,0 +1,30 @@
|
|||
DROP TABLE IF EXISTS unique_partial_update_with_default;
|
||||
|
||||
CREATE TABLE unique_partial_update_with_default
|
||||
(
|
||||
`p_date` Date,
|
||||
`id` UInt32,
|
||||
`number` UInt32,
|
||||
`content` String,
|
||||
`extra` String DEFAULT concat(content, 'test')
|
||||
)
|
||||
ENGINE = CnchMergeTree()
|
||||
PARTITION BY p_date
|
||||
ORDER BY id
|
||||
UNIQUE KEY id
|
||||
SETTINGS enable_unique_partial_update = 1;
|
||||
|
||||
SYSTEM STOP DEDUP WORKER unique_partial_update_with_default;
|
||||
SET enable_staging_area_for_write=0, enable_unique_partial_update=0;
|
||||
INSERT INTO unique_partial_update_with_default VALUES ('2023-01-01', 1001, 20, 'c1', 'e1');
|
||||
INSERT INTO unique_partial_update_with_default VALUES ('2023-01-01', 1002, 21, 'c2', 'e2');
|
||||
INSERT INTO unique_partial_update_with_default VALUES ('2023-01-01', 1003, 22, 'c3', 'e3');
|
||||
INSERT INTO unique_partial_update_with_default VALUES ('2023-01-02', 1004, 23, 'c4', 'e4');
|
||||
|
||||
SET enable_staging_area_for_write=0, enable_unique_partial_update=1;
|
||||
-- data for unique key 1004: 2023-01-02, 1004, 23, d1, e4
|
||||
-- data for unique key 1005: 2023-01-02, 1005, 0, d1, d1test
|
||||
INSERT INTO unique_partial_update_with_default (p_date, id, content) values ('2023-01-02', 1004, 'd1'), ('2023-01-02', 1005, 'd1');
|
||||
SELECT * FROM unique_partial_update_with_default ORDER BY id;
|
||||
|
||||
DROP TABLE IF EXISTS unique_partial_update_with_default;
|
Loading…
Reference in New Issue