```
CREATE TABLE default.x AS system.numbers ENGINE = Log;

INSERT INTO FUNCTION cluster('test_cluster_two_shards', default, x) SELECT * FROM numbers(10)

Received exception from server (version 20.11.1):
Code: 55. DB::Exception: Received from localhost:9000. DB::Exception: Method write is not supported by storage Distributed with more than one shard and no sharding key provided. 

0 rows in set. Elapsed: 0.001 sec. 

INSERT INTO FUNCTION cluster('test_cluster_two_shards', default, x, rand()) SELECT * FROM numbers(10)

Received exception from server (version 20.11.1):
Code: 42. DB::Exception: Received from localhost:9000. DB::Exception: Table function 'cluster' requires from 2 to 3 parameters: <addresses pattern or cluster name>, <name of remote database>, <name of remote table>. 

0 rows in set. Elapsed: 0.001 sec. 
```
{
public:
    TableFunctionRemote(const std::string & name_, bool secure_ = false);
    std::string getName() const override { return name; }
    ColumnsDescription getActualTableStructure(const Context & context) const override;
    bool needStructureConversion() const override { return false; }
private:
    StoragePtr executeImpl(const ASTPtr & ast_function, const Context & context, const std::string & table_name, ColumnsDescription cached_columns) const override;
    const char * getStorageTypeName() const override { return "Distributed"; }
    void parseArguments(const ASTPtr & ast_function, const Context & context) override;
    std::string name;
    bool is_cluster_function;
    std::string help_message;
    bool secure;
    ClusterPtr cluster;
    StorageID remote_table_id = StorageID::createEmpty();
    ASTPtr remote_table_function_ptr;
};
}