ClickHouse/src/Storages/MergeTree/MergeTreePartition.h

50 lines
1.7 KiB
C++
Raw Normal View History

#pragma once
#include <Core/Row.h>
2020-09-15 09:55:57 +00:00
#include <common/types.h>
#include <Disks/IDisk.h>
#include <IO/WriteBuffer.h>
namespace DB
{
class Block;
class MergeTreeData;
struct FormatSettings;
struct MergeTreeDataPartChecksums;
2020-06-26 11:30:23 +00:00
struct StorageInMemoryMetadata;
using StorageMetadataPtr = std::shared_ptr<const StorageInMemoryMetadata>;
2017-09-13 16:22:04 +00:00
/// This class represents a partition value of a single part and encapsulates its loading/storing logic.
struct MergeTreePartition
{
Row value;
public:
MergeTreePartition() = default;
explicit MergeTreePartition(Row value_) : value(std::move(value_)) {}
/// For month-based partitioning.
explicit MergeTreePartition(UInt32 yyyymm) : value(1, yyyymm) {}
String getID(const MergeTreeData & storage) const;
String getID(const Block & partition_key_sample) const;
void serializeText(const MergeTreeData & storage, WriteBuffer & out, const FormatSettings & format_settings) const;
void load(const MergeTreeData & storage, const DiskPtr & disk, const String & part_path);
void store(const MergeTreeData & storage, const DiskPtr & disk, const String & part_path, MergeTreeDataPartChecksums & checksums) const;
void store(const Block & partition_key_sample, const DiskPtr & disk, const String & part_path, MergeTreeDataPartChecksums & checksums) const;
void assign(const MergeTreePartition & other) { value.assign(other.value); }
2021-05-15 18:32:20 +00:00
void create(const StorageMetadataPtr & metadata_snapshot, Block block, size_t row, ContextPtr context);
/// Adjust partition key and execute its expression on block. Return sample block according to used expression.
static Block executePartitionByExpression(const StorageMetadataPtr & metadata_snapshot, Block & block, ContextPtr context);
};
}