1.4.2 修改表
void alterTable(String tableName, TableSpec tableSpec)
功能
添加或删除属性
修改表的空间大小,读写配额
修改表的app权限控制
修改表的简要描述
打开或关闭全局有序scan的支持
方法参数
1.tableName : String : required
指定所要修改的表的表名
2.tableSpec : TableSpec : required
指定修改后的TableSpec
新建表的schema和meta数据定义,包含了schema和meta两部分
其中schema部分包括
1.entityGroupSpec : EntityGroupSpec : optional
entityGroupSpec包括List< KeySpec > attributes, 用于指定作为实体组键的属性,及每个属性的编码方式(asc/desc)
enableHash, 指定是否对实体组键开启哈希分布
2.primaryIndex : List< KeySpec > : required
指定作为主键的属性,及每个属性的编码方式(asc/desc)
3.attributes : Map< String, DataType > : required
属性名到属性数据类型的映射,定义表的属性名和属性的数据类型,必须包括之前定义的entityGroupSpec和primaryIndex中定义的属性
4.secondaryIndexes : Map< String, LocalSecondaryIndexSpec > : optional
可对表建多个二级索引,该参数为二级索引名到二级索引定义LocalSecondaryIndexSpec的映射,定义表的二级索引
其中LocalSecondaryIndexSpec,包含以下几个字段:
- indexSchema : List< KeySpec > 指定对哪些属性建立索引, 与及作为索引记录键值时的编码方式(asc/desc)
- consistencyMode : SecondaryIndexConsistencyMode, 定义索引类型, LAZY 、EAGER或IMMUTABLE
- projections : List< String >, 属性名列表,定义索引记录中包含主记录的哪些属性的copy,只有索引类型为EAGER时才能设置
5.streams : Map< String, StreamSpec > : optional
可对表建多个Stream,该参数为topic名到Stream定义StreamSpec的映射,定义表的Stream集合
其中StreamSpec包含以下几个字段:
- viewType : StreamViewType,表示Stream类型,包括RECORD_IMAGE和MUTATE_LOG
- attributes : List< String >,需要track的属性名列表
- enableStream : boolean,使能开关
6.ttl : int : optional
表中数据的存活时间,单位为秒,即从写入开始,过了这段时间数据会自动删除,默认为-1,永不删除
meta部分
1.quota : TableQuota : required
指定表的空间大小配额
2.throughput : ProvisionThroughput : required
预设主集群读写配额
3.appAcl : Map< String, List< CannedAcl > > : optional
定义表的在其帐号下的app的访问权限,参考权限模型
4.description : String : optional
表的简要描述
5.exceededThroughput : ProvisionThroughput : required
主集群最大超发的读写配额,即系统空闲时可能达到的最大吞吐,设置比throughput大即允许超发
6.slaveThroughput : ProvisionThroughput : required
预设备集群读写配额
7.exceededSlaveThroughput : ProvisionThroughput : required
备集群最大超发的读写配额,即系统空闲时可能达到最大的吞吐,设置比slaveThroughput大即允许超发
方法返回值
void
异常错误码
INTERNAL_ERROR(1) : 服务器异常
ACCESS_DENIED(4) : 不具有修改表的权限
VALIDATION_FAILED(5): 参数错误
SIZE_EXCEED(6) : 空间配额或者读写配额超过了用户的总配额
RESOURCE_NOT_FOUND(9): 表不存在
RESOURCE_UNAVAILABLE(11) : 该账户下有其它DDL操作正在进行,不允许同时进行DDL操作
限制
只有表的owner才能进行修改表的操作
不能修改表的实体组键和主键
不能修改属性的数据类型
不能添加索引
二级索引只能修改索引类型,且只能从IMMUTABLE 到 EAGER
示例
以示例表为例,下面给出修改表的示例代码
$tableName = "php-note";
$tableSpec = $adminClient->describeTable($tableName);
$tableSpec->schema->attributes = array(
'userId' => DataType::STRING,
'noteId' => DataType::INT64,
'title' => DataType::STRING,
'content' => DataType::STRING,
'version' => DataType::INT64,
'mtime' => DataType::INT64,
'category' => DataType::STRING,
'addAttribute' => DataType::STRING, // 添加属性
);
$tableSpec->metadata->throughput = new ProvisionThroughput(array(
'readCapacity' => 200,
'writeCapacity' => 400 //把写配额改成400
));
$adminClient->alterTable($tableName, $tableSpec);