address review comments

This commit is contained in:
Anton Popov 2024-03-05 16:03:02 +00:00
parent 1b9e6c936e
commit 7fe7f3a79d
30 changed files with 38 additions and 39 deletions

View File

@ -7,7 +7,7 @@
#include <Storages/MergeTree/MergeTreeData.h> #include <Storages/MergeTree/MergeTreeData.h>
#include <Storages/MergeTree/StorageFromMergeTreeDataPart.h> #include <Storages/MergeTree/StorageFromMergeTreeDataPart.h>
#include <Storages/StorageMergeTree.h> #include <Storages/StorageMergeTree.h>
#include <Storages/MergeTreeVirtualColumns.h> #include <Storages/MergeTree/MergeTreeVirtualColumns.h>
#include <Processors/Transforms/FilterTransform.h> #include <Processors/Transforms/FilterTransform.h>
#include <Processors/Transforms/ExpressionTransform.h> #include <Processors/Transforms/ExpressionTransform.h>
#include <Processors/Transforms/CreatingSetsTransform.h> #include <Processors/Transforms/CreatingSetsTransform.h>

View File

@ -12,7 +12,7 @@
#include <DataTypes/NestedUtils.h> #include <DataTypes/NestedUtils.h>
#include <DataTypes/DataTypeLowCardinality.h> #include <DataTypes/DataTypeLowCardinality.h>
#include <IO/WriteHelpers.h> #include <IO/WriteHelpers.h>
#include <Storages/MergeTreeVirtualColumns.h> #include <Storages/MergeTree/MergeTreeVirtualColumns.h>
namespace DB namespace DB

View File

@ -135,7 +135,7 @@ bool optimizeUseNormalProjections(Stack & stack, QueryPlan::Nodes & nodes)
std::list<NormalProjectionCandidate> candidates; std::list<NormalProjectionCandidate> candidates;
NormalProjectionCandidate * best_candidate = nullptr; NormalProjectionCandidate * best_candidate = nullptr;
const Names & required_columns = reading->getRealColumnNames(); const Names & required_columns = reading->getAllColumnNames();
const auto & parts = reading->getParts(); const auto & parts = reading->getParts();
const auto & alter_conversions = reading->getAlterConvertionsForParts(); const auto & alter_conversions = reading->getAlterConvertionsForParts();
const auto & query_info = reading->getQueryInfo(); const auto & query_info = reading->getQueryInfo();

View File

@ -133,7 +133,7 @@ public:
void describeActions(JSONBuilder::JSONMap & map) const override; void describeActions(JSONBuilder::JSONMap & map) const override;
void describeIndexes(JSONBuilder::JSONMap & map) const override; void describeIndexes(JSONBuilder::JSONMap & map) const override;
const Names & getRealColumnNames() const { return all_column_names; } const Names & getAllColumnNames() const { return all_column_names; }
StorageID getStorageID() const { return data.getStorageID(); } StorageID getStorageID() const { return data.getStorageID(); }
UInt64 getSelectedParts() const { return selected_parts; } UInt64 getSelectedParts() const { return selected_parts; }

View File

@ -214,9 +214,9 @@ public:
metadata.set(std::make_unique<StorageInMemoryMetadata>(metadata_)); metadata.set(std::make_unique<StorageInMemoryMetadata>(metadata_));
} }
void setVirtuals(const VirtualColumnsDescription & virtuals_) void setVirtuals(VirtualColumnsDescription virtuals_)
{ {
virtuals.set(std::make_unique<VirtualColumnsDescription>(virtuals_)); virtuals.set(std::make_unique<VirtualColumnsDescription>(std::move(virtuals_)));
} }
/// Return list of virtual columns (like _part, _table, etc). In the vast /// Return list of virtual columns (like _part, _table, etc). In the vast
@ -275,7 +275,7 @@ private:
/// Multiversion storage metadata. Allows to read/write storage metadata without locks. /// Multiversion storage metadata. Allows to read/write storage metadata without locks.
MultiVersionStorageMetadataPtr metadata; MultiVersionStorageMetadataPtr metadata;
/// TODO: /// Description of virtual columns. Optional, may be set in constructor.
MultiVersionVirtualsDescriptionPtr virtuals; MultiVersionVirtualsDescriptionPtr virtuals;
protected: protected:

View File

@ -220,7 +220,7 @@ StorageLiveView::StorageLiveView(
VirtualColumnsDescription virtuals; VirtualColumnsDescription virtuals;
virtuals.addEphemeral("_version", std::make_shared<DataTypeUInt64>(), ""); virtuals.addEphemeral("_version", std::make_shared<DataTypeUInt64>(), "");
setVirtuals(virtuals); setVirtuals(std::move(virtuals));
if (!query.select) if (!query.select)
throw Exception(ErrorCodes::INCORRECT_QUERY, "SELECT query is not specified for {}", getName()); throw Exception(ErrorCodes::INCORRECT_QUERY, "SELECT query is not specified for {}", getName());

View File

@ -1,6 +1,6 @@
#include <Storages/MergeTree/IMergeTreeReader.h> #include <Storages/MergeTree/IMergeTreeReader.h>
#include <Storages/MergeTree/MergeTreeReadTask.h> #include <Storages/MergeTree/MergeTreeReadTask.h>
#include <Storages/MergeTreeVirtualColumns.h> #include <Storages/MergeTree/MergeTreeVirtualColumns.h>
#include <Storages/MergeTree/LoadedMergeTreeDataPartInfoForReader.h> #include <Storages/MergeTree/LoadedMergeTreeDataPartInfoForReader.h>
#include <DataTypes/NestedUtils.h> #include <DataTypes/NestedUtils.h>
#include <Common/escapeForFileName.h> #include <Common/escapeForFileName.h>
@ -68,6 +68,8 @@ const IMergeTreeReader::ValueSizeMap & IMergeTreeReader::getAvgValueSizeHints()
void IMergeTreeReader::fillVirtualColumns(Columns & columns, size_t rows) const void IMergeTreeReader::fillVirtualColumns(Columns & columns, size_t rows) const
{ {
chassert(columns.size() == requested_columns.size());
const auto * loaded_part_info = typeid_cast<const LoadedMergeTreeDataPartInfoForReader *>(data_part_info_for_read.get()); const auto * loaded_part_info = typeid_cast<const LoadedMergeTreeDataPartInfoForReader *>(data_part_info_for_read.get());
if (!loaded_part_info) if (!loaded_part_info)
throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Filling of virtual columns is supported only for LoadedMergeTreeDataPartInfoForReader"); throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Filling of virtual columns is supported only for LoadedMergeTreeDataPartInfoForReader");

View File

@ -117,7 +117,7 @@ private:
/// Actual columns description in part. /// Actual columns description in part.
const ColumnsDescription & part_columns; const ColumnsDescription & part_columns;
/// TODO: /// Fields of virtual columns that were filled in previous stages.
VirtualFields virtual_fields; VirtualFields virtual_fields;
}; };

View File

@ -15,7 +15,7 @@
#include <QueryPipeline/QueryPipeline.h> #include <QueryPipeline/QueryPipeline.h>
#include <Storages/MergeTreeVirtualColumns.h> #include <Storages/MergeTree/MergeTreeVirtualColumns.h>
#include <Storages/MergeTree/ColumnSizeEstimator.h> #include <Storages/MergeTree/ColumnSizeEstimator.h>
#include <Storages/MergeTree/FutureMergedMutatedPart.h> #include <Storages/MergeTree/FutureMergedMutatedPart.h>
#include <Storages/MergeTree/IExecutableTask.h> #include <Storages/MergeTree/IExecutableTask.h>

View File

@ -6,7 +6,7 @@
#include <Core/NamesAndTypes.h> #include <Core/NamesAndTypes.h>
#include <Common/checkStackSize.h> #include <Common/checkStackSize.h>
#include <Common/typeid_cast.h> #include <Common/typeid_cast.h>
#include <Storages/MergeTreeVirtualColumns.h> #include <Storages/MergeTree/MergeTreeVirtualColumns.h>
#include <Storages/MergeTree/MergeTreeSelectProcessor.h> #include <Storages/MergeTree/MergeTreeSelectProcessor.h>
#include <Columns/ColumnConst.h> #include <Columns/ColumnConst.h>
#include <IO/WriteBufferFromString.h> #include <IO/WriteBufferFromString.h>

View File

@ -67,7 +67,7 @@
#include <Processors/QueryPlan/QueryIdHolder.h> #include <Processors/QueryPlan/QueryIdHolder.h>
#include <Processors/QueryPlan/ReadFromMergeTree.h> #include <Processors/QueryPlan/ReadFromMergeTree.h>
#include <Storages/AlterCommands.h> #include <Storages/AlterCommands.h>
#include <Storages/MergeTreeVirtualColumns.h> #include <Storages/MergeTree/MergeTreeVirtualColumns.h>
#include <Storages/Freeze.h> #include <Storages/Freeze.h>
#include <Storages/MergeTree/DataPartStorageOnDiskFull.h> #include <Storages/MergeTree/DataPartStorageOnDiskFull.h>
#include <Storages/MergeTree/MergeTreeDataPartBuilder.h> #include <Storages/MergeTree/MergeTreeDataPartBuilder.h>

View File

@ -9,7 +9,7 @@
#include <Storages/MergeTree/MergeTreePrefetchedReadPool.h> #include <Storages/MergeTree/MergeTreePrefetchedReadPool.h>
#include <Storages/MergeTree/MergeTreeRangeReader.h> #include <Storages/MergeTree/MergeTreeRangeReader.h>
#include <Storages/MergeTree/RangesInDataPart.h> #include <Storages/MergeTree/RangesInDataPart.h>
#include <Storages/MergeTreeVirtualColumns.h> #include <Storages/MergeTree/MergeTreeVirtualColumns.h>
#include <base/getThreadId.h> #include <base/getThreadId.h>
#include <Common/ElapsedTimeProfileEventIncrement.h> #include <Common/ElapsedTimeProfileEventIncrement.h>
#include <Common/logger_useful.h> #include <Common/logger_useful.h>

View File

@ -1153,13 +1153,13 @@ MergeTreeRangeReader::ReadResult MergeTreeRangeReader::startReadingChain(size_t
size_t pos = read_sample_block.getPositionByName("_part_offset"); size_t pos = read_sample_block.getPositionByName("_part_offset");
chassert(pos < result.columns.size()); chassert(pos < result.columns.size());
chassert(result.columns[pos] == nullptr); chassert(result.columns[pos] == nullptr);
result.columns[pos] = fillPartOffsetColumn(result, leading_begin_part_offset, leading_end_part_offset); result.columns[pos] = createPartOffsetColumn(result, leading_begin_part_offset, leading_end_part_offset);
} }
return result; return result;
} }
ColumnPtr MergeTreeRangeReader::fillPartOffsetColumn(ReadResult & result, UInt64 leading_begin_part_offset, UInt64 leading_end_part_offset) ColumnPtr MergeTreeRangeReader::createPartOffsetColumn(ReadResult & result, UInt64 leading_begin_part_offset, UInt64 leading_end_part_offset)
{ {
size_t num_rows = result.numReadRows(); size_t num_rows = result.numReadRows();

View File

@ -308,7 +308,7 @@ private:
ReadResult startReadingChain(size_t max_rows, MarkRanges & ranges); ReadResult startReadingChain(size_t max_rows, MarkRanges & ranges);
Columns continueReadingChain(const ReadResult & result, size_t & num_rows); Columns continueReadingChain(const ReadResult & result, size_t & num_rows);
void executePrewhereActionsAndFilterColumns(ReadResult & result) const; void executePrewhereActionsAndFilterColumns(ReadResult & result) const;
ColumnPtr fillPartOffsetColumn(ReadResult & result, UInt64 leading_begin_part_offset, UInt64 leading_end_part_offset); ColumnPtr createPartOffsetColumn(ReadResult & result, UInt64 leading_begin_part_offset, UInt64 leading_end_part_offset);
IMergeTreeReader * merge_tree_reader = nullptr; IMergeTreeReader * merge_tree_reader = nullptr;
const MergeTreeIndexGranularity * index_granularity = nullptr; const MergeTreeIndexGranularity * index_granularity = nullptr;

View File

@ -1,6 +1,6 @@
#include <Storages/MergeTree/MergeTreeReadTask.h> #include <Storages/MergeTree/MergeTreeReadTask.h>
#include <Storages/MergeTree/MergeTreeBlockReadUtils.h> #include <Storages/MergeTree/MergeTreeBlockReadUtils.h>
#include <Storages/MergeTreeVirtualColumns.h> #include <Storages/MergeTree/MergeTreeVirtualColumns.h>
#include <Common/Exception.h> #include <Common/Exception.h>
namespace DB namespace DB

View File

@ -12,7 +12,7 @@
#include <Processors/Chunk.h> #include <Processors/Chunk.h>
#include <Processors/QueryPlan/SourceStepWithFilter.h> #include <Processors/QueryPlan/SourceStepWithFilter.h>
#include <Processors/Transforms/AggregatingTransform.h> #include <Processors/Transforms/AggregatingTransform.h>
#include <Storages/MergeTreeVirtualColumns.h> #include <Storages/MergeTree/MergeTreeVirtualColumns.h>
#include <city.h> #include <city.h>
namespace DB namespace DB

View File

@ -2,7 +2,7 @@
#include <Storages/MergeTree/MergeTreeBlockReadUtils.h> #include <Storages/MergeTree/MergeTreeBlockReadUtils.h>
#include <Storages/MergeTree/LoadedMergeTreeDataPartInfoForReader.h> #include <Storages/MergeTree/LoadedMergeTreeDataPartInfoForReader.h>
#include <Storages/MergeTree/MergeTreeDataSelectExecutor.h> #include <Storages/MergeTree/MergeTreeDataSelectExecutor.h>
#include <Storages/MergeTreeVirtualColumns.h> #include <Storages/MergeTree/MergeTreeVirtualColumns.h>
#include <Processors/Transforms/FilterTransform.h> #include <Processors/Transforms/FilterTransform.h>
#include <Processors/QueryPlan/ISourceStep.h> #include <Processors/QueryPlan/ISourceStep.h>
#include <QueryPipeline/QueryPipelineBuilder.h> #include <QueryPipeline/QueryPipelineBuilder.h>

View File

@ -1,4 +1,4 @@
#include <Storages/MergeTreeVirtualColumns.h> #include <Storages/MergeTree/MergeTreeVirtualColumns.h>
#include <Storages/MergeTree/IMergeTreeDataPart.h> #include <Storages/MergeTree/IMergeTreeDataPart.h>
#include <DataTypes/DataTypesNumber.h> #include <DataTypes/DataTypesNumber.h>
#include <Parsers/ASTFunction.h> #include <Parsers/ASTFunction.h>

View File

@ -23,7 +23,7 @@
#include <Storages/MutationCommands.h> #include <Storages/MutationCommands.h>
#include <Storages/MergeTree/MergeTreeDataMergerMutator.h> #include <Storages/MergeTree/MergeTreeDataMergerMutator.h>
#include <Storages/MergeTree/MergeTreeIndexInverted.h> #include <Storages/MergeTree/MergeTreeIndexInverted.h>
#include <Storages/MergeTreeVirtualColumns.h> #include <Storages/MergeTree/MergeTreeVirtualColumns.h>
#include <DataTypes/DataTypeNullable.h> #include <DataTypes/DataTypeNullable.h>
#include <DataTypes/DataTypeVariant.h> #include <DataTypes/DataTypeVariant.h>
#include <boost/algorithm/string/replace.hpp> #include <boost/algorithm/string/replace.hpp>

View File

@ -333,7 +333,7 @@ StorageKeeperMap::StorageKeeperMap(
VirtualColumnsDescription virtuals; VirtualColumnsDescription virtuals;
virtuals.addEphemeral(String(version_column_name), std::make_shared<DataTypeInt32>(), ""); virtuals.addEphemeral(String(version_column_name), std::make_shared<DataTypeInt32>(), "");
setVirtuals(virtuals); setVirtuals(std::move(virtuals));
WriteBufferFromOwnString out; WriteBufferFromOwnString out;
out << "KeeperMap metadata format version: 1\n" out << "KeeperMap metadata format version: 1\n"

View File

@ -35,7 +35,6 @@
#include <Backups/IBackup.h> #include <Backups/IBackup.h>
#include <Backups/RestorerFromBackup.h> #include <Backups/RestorerFromBackup.h>
#include <Disks/TemporaryFileOnDisk.h> #include <Disks/TemporaryFileOnDisk.h>
#include <Storages/MergeTreeVirtualColumns.h>
#include <cassert> #include <cassert>
#include <chrono> #include <chrono>

View File

@ -1,5 +1,4 @@
#include <Storages/StorageSnapshot.h> #include <Storages/StorageSnapshot.h>
#include <Storages/MergeTreeVirtualColumns.h>
#include <Storages/IStorage.h> #include <Storages/IStorage.h>
#include <DataTypes/ObjectUtils.h> #include <DataTypes/ObjectUtils.h>
#include <DataTypes/NestedUtils.h> #include <DataTypes/NestedUtils.h>

View File

@ -84,9 +84,6 @@ struct StorageSnapshot
/// If we have a projection then we should use its metadata. /// If we have a projection then we should use its metadata.
StorageMetadataPtr getMetadataForQuery() const { return projection ? projection->metadata : metadata; } StorageMetadataPtr getMetadataForQuery() const { return projection ? projection->metadata : metadata; }
private:
void init();
}; };
using StorageSnapshotPtr = std::shared_ptr<StorageSnapshot>; using StorageSnapshotPtr = std::shared_ptr<StorageSnapshot>;

View File

@ -12,13 +12,13 @@ StorageValues::StorageValues(
const StorageID & table_id_, const StorageID & table_id_,
const ColumnsDescription & columns_, const ColumnsDescription & columns_,
const Block & res_block_, const Block & res_block_,
const VirtualColumnsDescription & virtuals_) VirtualColumnsDescription virtuals_)
: IStorage(table_id_), res_block(res_block_) : IStorage(table_id_), res_block(res_block_)
{ {
StorageInMemoryMetadata storage_metadata; StorageInMemoryMetadata storage_metadata;
storage_metadata.setColumns(columns_); storage_metadata.setColumns(columns_);
setInMemoryMetadata(storage_metadata); setInMemoryMetadata(storage_metadata);
setVirtuals(virtuals_); setVirtuals(std::move(virtuals_));
} }
Pipe StorageValues::read( Pipe StorageValues::read(

View File

@ -18,7 +18,7 @@ public:
const StorageID & table_id_, const StorageID & table_id_,
const ColumnsDescription & columns_, const ColumnsDescription & columns_,
const Block & res_block_, const Block & res_block_,
const VirtualColumnsDescription & virtuals_ = {}); VirtualColumnsDescription virtuals_ = {});
std::string getName() const override { return "Values"; } std::string getName() const override { return "Values"; }

View File

@ -56,7 +56,7 @@ StorageSystemDictionaries::StorageSystemDictionaries(const StorageID & storage_i
{ {
VirtualColumnsDescription virtuals; VirtualColumnsDescription virtuals;
virtuals.addEphemeral("key", std::make_shared<DataTypeString>(), ""); virtuals.addEphemeral("key", std::make_shared<DataTypeString>(), "");
setVirtuals(virtuals); setVirtuals(std::move(virtuals));
} }
ColumnsDescription StorageSystemDictionaries::getColumnsDescription() ColumnsDescription StorageSystemDictionaries::getColumnsDescription()

View File

@ -262,7 +262,7 @@ StorageSystemPartsBase::StorageSystemPartsBase(const StorageID & table_id_, Colu
VirtualColumnsDescription virtuals; VirtualColumnsDescription virtuals;
virtuals.addEphemeral("_state", std::make_shared<DataTypeString>(), ""); virtuals.addEphemeral("_state", std::make_shared<DataTypeString>(), "");
setVirtuals(virtuals); setVirtuals(std::move(virtuals));
} }
} }

View File

@ -352,17 +352,17 @@ VirtualColumnsDescription getVirtualsForFileLikeStorage(const ColumnsDescription
{ {
VirtualColumnsDescription desc; VirtualColumnsDescription desc;
auto add_virtual = [&](const auto & name, const auto & type, const auto & comment) auto add_virtual = [&](const auto & name, const auto & type)
{ {
if (storage_columns.has(name)) if (storage_columns.has(name))
return; return;
desc.addEphemeral(name, type, comment); desc.addEphemeral(name, type, "");
}; };
add_virtual("_path", std::make_shared<DataTypeLowCardinality>(std::make_shared<DataTypeString>()), ""); add_virtual("_path", std::make_shared<DataTypeLowCardinality>(std::make_shared<DataTypeString>()));
add_virtual("_file", std::make_shared<DataTypeLowCardinality>(std::make_shared<DataTypeString>()), ""); add_virtual("_file", std::make_shared<DataTypeLowCardinality>(std::make_shared<DataTypeString>()));
add_virtual("_size", makeNullable(std::make_shared<DataTypeUInt64>()), ""); add_virtual("_size", makeNullable(std::make_shared<DataTypeUInt64>()));
return desc; return desc;
} }

View File

@ -7,7 +7,6 @@ namespace DB
struct VirtualColumnDescription : public ColumnDescription struct VirtualColumnDescription : public ColumnDescription
{ {
public:
using Self = VirtualColumnDescription; using Self = VirtualColumnDescription;
VirtualsKind kind; VirtualsKind kind;
@ -16,6 +15,9 @@ public:
bool isEphemeral() const { return kind == VirtualsKind::Ephemeral; } bool isEphemeral() const { return kind == VirtualsKind::Ephemeral; }
bool isPersistent() const { return kind == VirtualsKind::Persistent; } bool isPersistent() const { return kind == VirtualsKind::Persistent; }
/// This method is needed for boost::multi_index because field
/// of base class cannot be referenced in boost::multi_index::member.
const String & getName() const { return name; } const String & getName() const { return name; }
}; };