ClickHouse/src/Storages/StorageExternalDistributed.h

46 lines
1.3 KiB
C++
Raw Normal View History

2021-03-27 14:35:44 +00:00
#pragma once
#include "config.h"
2021-03-27 14:35:44 +00:00
#include <Storages/IStorage.h>
namespace DB
{
2021-09-15 22:45:43 +00:00
struct ExternalDataSourceConfiguration;
/// Storages MySQL and PostgreSQL use ConnectionPoolWithFailover and support multiple replicas.
2021-03-27 20:49:26 +00:00
/// This class unites multiple storages with replicas into multiple shards with replicas.
/// A query to external database is passed to one replica on each shard, the result is united.
2021-03-27 21:11:10 +00:00
/// Replicas on each shard have the same priority, traversed replicas are moved to the end of the queue.
2021-09-15 22:45:43 +00:00
/// Similar approach is used for URL storage.
class StorageExternalDistributed final : public DB::IStorage
2021-03-27 14:35:44 +00:00
{
public:
StorageExternalDistributed(
2021-03-27 14:35:44 +00:00
const StorageID & table_id_,
std::unordered_set<StoragePtr> && shards_,
2021-03-27 14:35:44 +00:00
const ColumnsDescription & columns_,
const ConstraintsDescription & constraints_,
const String & comment);
2021-04-21 12:32:57 +00:00
std::string getName() const override { return "ExternalDistributed"; }
2022-05-23 19:47:32 +00:00
void read(
QueryPlan & query_plan,
const Names & column_names,
const StorageSnapshotPtr & storage_snapshot,
SelectQueryInfo & query_info,
ContextPtr context,
QueryProcessingStage::Enum processed_stage,
size_t max_block_size,
size_t num_streams) override;
2021-03-27 14:35:44 +00:00
private:
using Shards = std::unordered_set<StoragePtr>;
2021-03-27 14:35:44 +00:00
Shards shards;
};
}