ClickHouse/src/DataStreams/PushingToViewsBlockOutputStream.h
Azat Khuzhin c1cf31f87d Introduce min_insert_block_size_{rows,bytes}_for_materialized_views
With tons of MATERIALIZED VIEW attached to one table pushing to this
views can be pretty memory consuming due to blocks squashing, add
ability to control this separatelly for MATERIALIZED VIEWs.

Plus squashing is useless if the underlying engine is Buffer().
2020-05-17 12:21:05 +03:00

55 lines
1.3 KiB
C++

#pragma once
#include <DataStreams/copyData.h>
#include <DataStreams/IBlockOutputStream.h>
#include <DataStreams/OneBlockInputStream.h>
#include <DataStreams/MaterializingBlockInputStream.h>
#include <Storages/StorageMaterializedView.h>
namespace DB
{
class ReplicatedMergeTreeBlockOutputStream;
/** Writes data to the specified table and to all dependent materialized views.
*/
class PushingToViewsBlockOutputStream : public IBlockOutputStream
{
public:
PushingToViewsBlockOutputStream(const StoragePtr & storage_,
const Context & context_, const ASTPtr & query_ptr_, bool no_destination = false);
Block getHeader() const override;
void write(const Block & block) override;
void flush() override;
void writePrefix() override;
void writeSuffix() override;
private:
StoragePtr storage;
BlockOutputStreamPtr output;
ReplicatedMergeTreeBlockOutputStream * replicated_output = nullptr;
const Context & context;
ASTPtr query_ptr;
struct ViewInfo
{
ASTPtr query;
StorageID table_id;
BlockOutputStreamPtr out;
std::exception_ptr exception;
};
std::vector<ViewInfo> views;
std::unique_ptr<Context> select_context;
std::unique_ptr<Context> insert_context;
void process(const Block & block, size_t view_num);
};
}