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 metadata_snapshot = data.getInMemoryMetadataPtr();
|
||||||
auto sample_block = metadata_snapshot->getSampleBlock();
|
auto sample_block = metadata_snapshot->getSampleBlock();
|
||||||
|
auto default_columns = metadata_snapshot->getColumns().getDefaults();
|
||||||
Names column_names = sample_block.getNames();
|
Names column_names = sample_block.getNames();
|
||||||
NameSet name_set = sample_block.getNameSet();
|
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);
|
LOG_DEBUG(log, "Same update columns: {}, txn id: {}, part name: {}", same_update_columns, dedup_task->txn_id, part->name);
|
||||||
|
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
|
{
|
||||||
columns_read = column_names;
|
columns_read = column_names;
|
||||||
|
update_column_set_list[part_id] = {columns_read.begin(), columns_read.end()};
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/// Restore update columns must use part columns instead of storage columns
|
/// 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())
|
if (data.merging_params.hasExplicitVersionColumn())
|
||||||
columns_read_set.insert(data.merging_params.version_column);
|
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()};
|
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;
|
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();
|
size_t total_size = update_columns->size();
|
||||||
to_block.insert(
|
to_block.insert(
|
||||||
ColumnWithTypeAndName{std::move(update_columns), std::make_shared<DataTypeString>(), StorageInMemoryMetadata::UPDATE_COLUMNS});
|
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