ClickHouse/dbms/src/Storages/MergeTree/MergedColumnOnlyOutputStream.cpp

70 lines
2.9 KiB
C++
Raw Normal View History

#include <Storages/MergeTree/MergedColumnOnlyOutputStream.h>
namespace DB
{
MergedColumnOnlyOutputStream::MergedColumnOnlyOutputStream(
2019-11-07 11:11:38 +00:00
const MergeTreeDataPartPtr & data_part, const Block & header_, bool sync_,
CompressionCodecPtr default_codec, bool skip_offsets_,
const std::vector<MergeTreeIndexPtr> & indices_to_recalc,
2019-12-09 21:21:17 +00:00
WrittenOffsetColumns * offset_columns_,
2019-11-08 14:36:10 +00:00
const MergeTreeIndexGranularity & index_granularity,
2019-12-09 21:21:17 +00:00
const MergeTreeIndexGranularityInfo * index_granularity_info,
const String & filename_suffix)
2019-11-07 11:11:38 +00:00
: IMergedBlockOutputStream(data_part),
2019-12-09 21:21:17 +00:00
header(header_), sync(sync_)
{
2019-11-07 11:11:38 +00:00
// std::cerr << "(MergedColumnOnlyOutputStream) storage: " << storage.getTableName() << "\n";
// std::cerr << "(MergedColumnOnlyOutputStream) can_use_adaptive_granularity: " << can_use_adaptive_granularity << "\n";
// std::cerr << "(MergedColumnOnlyOutputStream) index_granularity_info: " << !!index_granularity_info_ << "\n";
// if (index_granularity_info_)
// std::cerr << "(MergedColumnOnlyOutputStream) index_granularity_info->isAdaptive(): " << index_granularity_info_->is_adaptive << "\n";
2019-10-28 11:00:29 +00:00
2019-11-08 14:36:10 +00:00
WriterSettings writer_settings(
data_part->storage.global_context.getSettings(),
index_granularity_info ? index_granularity_info->is_adaptive : data_part->storage.canUseAdaptiveGranularity());
2019-12-09 21:21:17 +00:00
writer_settings.filename_suffix = filename_suffix;
2019-11-08 14:36:10 +00:00
writer = data_part->getWriter(header.getNamesAndTypesList(), indices_to_recalc, default_codec, writer_settings, index_granularity);
2019-12-09 21:21:17 +00:00
writer->setOffsetColumns(offset_columns_, skip_offsets_);
2019-11-08 14:36:10 +00:00
writer->initSkipIndices();
}
void MergedColumnOnlyOutputStream::write(const Block & block)
{
std::set<String> skip_indexes_column_names_set;
2019-11-07 11:11:38 +00:00
for (const auto & index : storage.skip_indices) /// FIXME save local indices
std::copy(index->columns.cbegin(), index->columns.cend(),
std::inserter(skip_indexes_column_names_set, skip_indexes_column_names_set.end()));
Names skip_indexes_column_names(skip_indexes_column_names_set.begin(), skip_indexes_column_names_set.end());
2019-12-09 21:21:17 +00:00
Block skip_indexes_block = getBlockAndPermute(block, skip_indexes_column_names, nullptr);
size_t rows = block.rows();
2019-06-24 15:07:01 +00:00
if (!rows)
return;
2019-11-08 14:36:10 +00:00
std::cerr << "(MergedColumnOnlyOutputStream::write) writing rows: " << rows << "\n";
2019-10-22 17:42:59 +00:00
2019-12-09 21:21:17 +00:00
writer->write(block);
writer->calculateAndSerializeSkipIndices(skip_indexes_block, rows);
writer->next();
}
void MergedColumnOnlyOutputStream::writeSuffix()
{
throw Exception("Method writeSuffix is not supported by MergedColumnOnlyOutputStream", ErrorCodes::NOT_IMPLEMENTED);
}
MergeTreeData::DataPart::Checksums MergedColumnOnlyOutputStream::writeSuffixAndGetChecksums()
{
/// Finish columns serialization.
MergeTreeData::DataPart::Checksums checksums;
2019-11-18 15:18:50 +00:00
writer->finishDataSerialization(checksums, sync);
2019-12-09 21:21:17 +00:00
writer->finishSkipIndicesSerialization(checksums);
return checksums;
}
}