1.4.2 修改表

优质
小牛编辑
133浏览
2023-12-01

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);