Skip to content

Commit

Permalink
add virtual column _data_version
Browse files Browse the repository at this point in the history
  • Loading branch information
CurtizJ committed Mar 1, 2024
1 parent dcff866 commit dd400de
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 3 deletions.
1 change: 0 additions & 1 deletion src/Storages/MergeTree/MergeTask.cpp
Expand Up @@ -7,7 +7,6 @@

#include <Common/logger_useful.h>
#include <Common/ActionBlocker.h>
#include "Storages/MergeTreeVirtualColumns.h"
#include <Processors/Transforms/CheckSortedTransform.h>
#include <Storages/MergeTree/DataPartStorageOnDiskFull.h>

Expand Down
3 changes: 2 additions & 1 deletion src/Storages/MergeTree/MergeTreeData.cpp
Expand Up @@ -440,6 +440,7 @@ VirtualColumnsDescription MergeTreeData::createVirtuals(const StorageInMemoryMet
desc.addEphemeral("_partition_id", std::make_shared<DataTypeLowCardinality>(std::make_shared<DataTypeString>()), "Name of partition");
desc.addEphemeral("_sample_factor", std::make_shared<DataTypeFloat64>(), "Sample factor (from the query)");
desc.addEphemeral("_part_offset", std::make_shared<DataTypeUInt64>(), "Number of row in the part");
desc.addEphemeral("_data_version", std::make_shared<DataTypeUInt64>(), "Data version of mutation of part");

if (metadata.hasPartitionKey())
{
Expand Down Expand Up @@ -1027,7 +1028,7 @@ void MergeTreeData::MergingParams::check(const StorageInMemoryMetadata & metadat
/// TODO Checks for Graphite mode.
}

const Names MergeTreeData::virtuals_useful_for_filter = {"_part", "_partition_id", "_part_uuid", "_partition_value"};
const Names MergeTreeData::virtuals_useful_for_filter = {"_part", "_partition_id", "_part_uuid", "_partition_value", "_data_version"};

Block MergeTreeData::getHeaderWithVirtualsForFilter() const
{
Expand Down
2 changes: 1 addition & 1 deletion src/Storages/MergeTree/MergeTreeRangeReader.cpp
@@ -1,11 +1,11 @@
#include <Storages/MergeTree/MergeTreeRangeReader.h>
#include <Storages/MergeTree/IMergeTreeReader.h>
#include <Storages/MergeTreeVirtualColumns.h>
#include <Columns/FilterDescription.h>
#include <Columns/ColumnConst.h>
#include <Columns/ColumnsCommon.h>
#include <Common/TargetSpecific.h>
#include <Common/logger_useful.h>
#include "Storages/MergeTreeVirtualColumns.h"
#include <Core/UUID.h>
#include <IO/WriteBufferFromString.h>
#include <IO/Operators.h>
Expand Down
3 changes: 3 additions & 0 deletions src/Storages/MergeTreeVirtualColumns.cpp
Expand Up @@ -47,6 +47,9 @@ Field getFieldForConstVirtualColumn(const String & column_name, const IMergeTree
if (column_name == "_partition_id")
return part.info.partition_id;

if (column_name == "_data_version")
return part.info.getDataVersion();

if (column_name == "_partition_value")
return Tuple(part.partition.value.begin(), part.partition.value.end());

Expand Down
5 changes: 5 additions & 0 deletions tests/queries/0_stateless/03001_data_version_column.reference
@@ -0,0 +1,5 @@
all_1_1_0 1 1 1
all_2_2_0 2 2 2
all_1_1_0_3 3 1 100
all_2_2_0_3 3 2 200
all_4_4_0 4 3 3
20 changes: 20 additions & 0 deletions tests/queries/0_stateless/03001_data_version_column.sql
@@ -0,0 +1,20 @@
DROP TABLE IF EXISTS t_data_version;

CREATE TABLE t_data_version (a UInt64, b UInt64) ENGINE = MergeTree ORDER BY a;

INSERT INTO t_data_version VALUES (1, 1);
INSERT INTO t_data_version VALUES (2, 2);

SELECT _part, _data_version, * FROM t_data_version ORDER BY a;

ALTER TABLE t_data_version UPDATE b = a * 100 WHERE 1 SETTINGS mutations_sync = 2;

SELECT _part, _data_version, * FROM t_data_version ORDER BY a;

INSERT INTO t_data_version VALUES (3, 3);

-- Check part pruning.
SELECT _part, _data_version, * FROM t_data_version WHERE _data_version = 4 ORDER BY a SETTINGS max_rows_to_read = 1;

DROP TABLE t_data_version;

0 comments on commit dd400de

Please sign in to comment.