mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-30 05:30:51 +00:00
c1cf31f87d
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().
55 lines
1.3 KiB
C++
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);
|
|
};
|
|
|
|
|
|
}
|