ClickHouse/dbms/include/DB/Storages/MergeTree/MergeTreeDataWriter.h

55 lines
1.9 KiB
C++
Raw Normal View History

2013-04-24 10:31:32 +00:00
#pragma once
2013-09-15 01:10:16 +00:00
#include <DB/IO/WriteBufferFromFile.h>
#include <DB/IO/CompressedWriteBuffer.h>
#include <DB/Columns/ColumnsNumber.h>
#include <DB/Interpreters/sortBlock.h>
2014-03-09 17:36:01 +00:00
#include <DB/Storages/MergeTree/MergeTreeData.h>
2013-04-24 10:31:32 +00:00
2013-09-15 01:10:16 +00:00
2013-04-24 10:31:32 +00:00
namespace DB
{
2014-03-09 17:36:01 +00:00
2014-03-13 17:44:00 +00:00
struct BlockWithDateInterval
{
Block block;
UInt16 min_date;
UInt16 max_date;
BlockWithDateInterval() : min_date(std::numeric_limits<UInt16>::max()), max_date(0) {}
BlockWithDateInterval(const Block & block_, UInt16 min_date_, UInt16 max_date_)
: block(block_), min_date(min_date_), max_date(max_date_) {}
};
typedef std::list<BlockWithDateInterval> BlocksWithDateIntervals;
2014-03-13 12:48:07 +00:00
/** Записывает новые куски с данными в merge-дерево.
*/
class MergeTreeDataWriter
{
public:
2014-05-08 07:12:01 +00:00
MergeTreeDataWriter(MergeTreeData & data_) : data(data_), log(&Logger::get(data.getLogName() + " (Writer)")) {}
2014-03-13 12:48:07 +00:00
/** Разбивает блок на блоки, каждый из которых нужно записать в отдельный кусок.
2014-03-27 11:32:41 +00:00
* (читай: разбивает строки по месяцам)
2014-03-13 12:48:07 +00:00
* Работает детерминированно: если отдать на вход такой же блок, на выходе получатся такие же блоки в таком же порядке.
*/
BlocksWithDateIntervals splitBlockIntoParts(const Block & block);
2014-03-13 12:48:07 +00:00
2014-03-27 11:32:41 +00:00
/** Все строки должны относиться к одному месяцу.
2014-03-13 12:48:07 +00:00
* temp_index - значение left и right для нового куска. Можно будет изменить при переименовании.
2014-03-13 17:44:00 +00:00
* Возвращает кусок с именем, начинающимся с tmp_, еще не добавленный в MergeTreeData.
2014-03-13 12:48:07 +00:00
*/
2015-08-17 21:09:36 +00:00
MergeTreeData::MutableDataPartPtr writeTempPart(BlockWithDateInterval & block, Int64 temp_index);
2014-03-13 12:48:07 +00:00
private:
MergeTreeData & data;
2014-03-03 18:55:39 +00:00
2014-03-13 17:44:00 +00:00
Logger * log;
2013-04-24 10:31:32 +00:00
};
2014-03-13 17:44:00 +00:00
2013-04-24 10:31:32 +00:00
}