master_get_table_metadata函数的Citus documentation指出:
part_storage_type: Type of storage used for the table. May be ‘t’ (standard table), ‘f’ (foreign table) or ‘c’ (columnar table).
但我搜索了整个文档,没有找到如何处理使用’f'(外表)分区存储类型分发的表的示例.
我想可以使用以下方法创建初始外表:
CREATE FOREIGN TABLE audit (
id integer NOT NULL,
ctime timestamp without time zone DEFAULT now() NOT NULL,
site_id integer NOT NULL,
client_id integer,
done_time timestamp without time zone,
status text DEFAULT 'NEW' NOT NULL,
file_id character varying(16) DEFAULT ''::character varying NOT NULL
) SERVER mysql_svr OPTIONS (dbname 'constructor', table_name 'audit');
但是如何在创建后分发这样的表呢?如何创建分片?
更新
我找到了this
FOREIGN (‘f’) — Indicates that shard stores foreign data. (Used by distributed file_fdw tables)
所以我的问题仍然存在:是否可以使用其他外部数据包装器,例如mysql_fdw?
解决方法:
创建分布式外表只在Citus中现在只有部分支持.
我们举个例子:
CREATE FOREIGN TABLE audit (
id integer NOT NULL,
ctime timestamp without time zone DEFAULT now() NOT NULL,
site_id integer NOT NULL,
client_id integer,
done_time timestamp without time zone,
status text DEFAULT 'NEW' NOT NULL,
file_id character varying(16) DEFAULT ''::character varying NOT NULL
) SERVER mysql_svr
OPTIONS (dbname 'constructor', table_name 'audit');
您现在可以使用以下方式分发:
SELECT * FROM master_create_distributed_table('audit', 'id', 'append');
并使用以下方法创建分片:
SELECT master_create_worker_shards('audit', <shard_count>);
但是,在工作节点上创建的每个分片都将继承与主节点相同的选项.因此,在此示例中,每个分片将指向dbname“构造函数”和外部表“audit”.创建此类分发的价值有限,因为即使Citus将发出并行查询,它们也将再次发送到单个节点和表.
为了构建一个更有用的例子,假设你已经有一些(比方说是8个)分片的MySQL表,例如audit_1,audit_2,…,audit_8.
您可以构建与上面相同的表,并创建一个分布式设置,如下所示:
SELECT * FROM master_create_distributed_table('audit', 'id', 'append');
并使用以下方法创建分片:
SELECT master_create_worker_shards('audit', 8);
您现在需要登录每个Citus工作节点,并更新每个分片以指向它的相关MySQL分片.
例如:
ALTER TABLE audit_100208 OPTIONS(SET table_name’audit_1′);
如果您有跨多个节点或数据库的表,则需要为每个Citus工作节点上的每个外部节点手动创建特定服务器.
这里有一些需要注意的警告.首先,我们将分布标记为’append’,因为我们不知道外表的基础分布.如果您使用哈希,您可能会通过Citus得到错误的分区修剪.可能还有其他注意事项,因为这不是我们积极支持或测试过的用例.从历史的角度来看,我们主要使用它作为概念验证来尝试阅读跨多个节点分布的平面文件.
**编辑**
添加Eugen对其他问题的回答.
此外,请注意,此类Q / A最适合此处的邮件列表:
https://groups.google.com/forum/#!forum/citus-users
>通过’部分支持’,我的意思是我们将推下外表创建,但不会自动将不同的外表设置映射到不同的分片.
> SQL和PostgreSQL具有广泛的功能,我们目前不支持所有这些功能.我们正在编制可用功能列表,但在此期间,请告知我们您是否感兴趣的功能.
>当您发出master_create_distributed_table时,我们会自动创建存储类型为“f”的分片.