总结:命名空间类似于MYSQL的库名,可以做租户配额限制。
从v4.8.0起,用户可以将其模式映射到命名空间,这样用模式创建的任何表都将在Hbase的相应命名空间中创建。
在此之前,所有的表(有模式的和没模式的)都在默认的命名空间中创建。
配置
启用名称空间映射的参数:
属性 | 描述 | 默认值 |
---|---|---|
phoenix.schema.isNamespaceMappingEnabled | 如果启用了它,那么使用模式创建的表将映射到名称空间。这需要在客户端和服务器端同时设置。如果设置一次,则不应回滚。启用此属性后,旧客户端将无法工作。 | false |
phoenix.schema.mapSystemTablesToNamespace | 启动此属性将在phoenix.connection.isNamespaceMappingEnabled也设置成true。如果它启动,系统表将自动迁移到SYSTEM命名空间。如果设置成false,系统表将在默认的命名空间中创建。它需要同时在客户端和服务端设置。 | true |
可用的语法
&emsp: 下列的DDL语句可用于模式交互。
常见问题解答
- 如何迁移具有模式的已存在的表迁移到命名空间?
- 如何迁移系统表?
- 创建和删除模式需要什么权限?
- 如何为不同的表类型映射模式?
- 命名空间和表映射到命名空间有什么好处?
如何迁移具有模式的已存在的表迁移到命名空间?
对于kerberized环境,拥有permissiont(“admin”)管理员的权限就足够创建一个命名空间了。表只会将会映射在名称为“schema_name”的命名空间上。目前不支持迁移已存在的表在不同的命名空间或者不同模式下。
移动一张表到指定名称的命名空间“schema_name”。
$ bin/psql.py <zookeeper> -m <schema_name>.<table_name>
如何迁移系统表?
系统表会自动迁移,当启用了phoenix.schema.mapSystemTablesToNamespace along 和phoenix.schema.isNamespaceMappingEnabled之后的第一次连接。
创建和删除模式需要什么权限?
在HBase中,用户必须具有“admin”权限才能成功执行CREATE和DROP模式,因为这些命令将在内部创建或删除名称空间。
在HBase中可以找到ACL管理的详细信息这里。
如何为不同的表类型映射模式?
Phoenix中的模式支持与其他数据库类似。
下表可以帮助你映射物理表到Phoenix表上:
DDL | 表类型 | Hbase表 | 描述 |
---|---|---|---|
CREATE TABLE S.T (ID INTEGER PRIMARY KEY) | 表 | S:T | 表T会创建在S的命名空间中 |
CREATE INDEX IDX ON S.T(ID) (ID INTEGER PRIMARY KEY) | 索引 | S:IDX | 索引会继承模式和命名空间从表中。 |
CREATE VIEW V SELECT * FROM S.T | 视图在默认的模式 | S:T | 视图不会继承来自父表的模式,它只有自己的模式。 |
CREATE VIEW X.V SELECT * FROM S.T | 视图有自己的的模式相比于物理表 | S:T | 视图将只使用父物理表,并且也可以具有不同的(或相同的)模式 |
CREATE VIEW S.V SELECT * FROM S.T | 视图有相同的模式在物理表 | S:T | 视图将只使用父物理表,并且也可以具有不同的(或相同的)模式 |
CREATE VIEW idx on S.V | 视图索引 | S:_IDX_T | 视图索引还将继承模式并映射到相应的名称空间 |
命名空间和表映射到命名空间有什么好处?
名称空间是类似于关系数据库系统中的数据库的表的逻辑分组。这种抽象为即将到来的多租户相关特性奠定了基础:
- 配额管理——限制一个名称空间可以使用的资源数量(例如区域、表)。
- 名称空间安全管理——为租户提供另一层安全管理。
- 区域服务器组——可以将名称空间/表固定到regionserver的一个子集上,从而保证了球场级别的隔离。
详细的可以查看命名空间管理通过这里。
资源
- PHOENIX-1311:更多的实现细节和讨论关于命名空间特性。