1.4.1 创建表
TableInfo createTable(String tableName, TableSpec tableSpec)
功能
在开发者帐号下,以指定表结构和元数据创建表
方法参数
tableName : String : required
新建的表的名称,不能与账户下现有的表重名,
只能以字母(区分大小写)、数字、下划线和连接线组成
tableSpec : TableSpec : required
新建表的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 >, 属性名列表,定义索引记录中包含主记录的哪些属性的拷贝,只有索引类型为EAGER或IMMUTABLE时才能设置
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,永不删除
7.preSplits : int : optional
表初始分片数目,仅支持Entity Group开启hash分布的表,且仅在建表时起作用,范围是[ 1, 256 ]
meta部分
1.quota : TableQuota : required
指定表的空间大小配额
2.throughput : ProvisionThroughput : required
指定表的读写配额
3.appAcl : Map< String, List< CannedAcl > > : optional
定义表的在其帐号下的app的访问权限,参考权限模型
4.description : String : optional
表的简要描述
- exceededThroughput : ProvisionThroughput : required
主集群最大超发的读写配额,即系统空闲时可能达到的最大吞吐,设置比throughput大即允许超发
- slaveThroughput : ProvisionThroughput : required
预设备集群读写配额
- exceededSlaveThroughput : ProvisionThroughput : required
备集群最大超发的读写配额,即系统空闲时可能达到最大的吞吐,设置比slaveThroughput大即允许超发
方法返回值
tableInfo : TableInfo
1.name : String
所建表的表名
2.spec : TableSpec
所建表的tableSpec,和和所传入的tableSpec参数相比,该值的meta结构体里多了tableId和developerId
3.state : TableState
包括表的创建时间,最近一次的修改时间,最近一次统计表空间大小及行数的时间,表的空间大小,表行数
异常错误码
INTERNAL_ERROR(1) : 服务器异常
ACCESS_DENIED(4) : 不具有创建表的权限
VALIDATION_FAILED(5): 参数错误
SIZE_EXCEED(6) : 表数量,空间配额或者读写配额超过了用户的总配额
RESOURCE_ALREADY_EXISTS(10) : 已存在同名的表
RESOURCE_UNAVAILABLE(11) : 该账户下有其它DDL操作正在进行,不允许同时进行DDL操作
限制
只有开发者才能创建表
二级索引只有在设置了实体组键才支持
preSplits只有设置了实体组键且开启了哈希才能设置
示例
以示例表为例,下面给出建表的示例代码
$tableName = "php-note";
// create table
$tableSpec = new TableSpec(array(
'schema' => new TableSchema(array(
'entityGroup' => new EntityGroupSpec(array(
'attributes' => array(new KeySpec(array('attribute' => 'userId'))),
'enableHash' => true, // hash distribution
)),
// Creation time order
'primaryIndex' => array(
new KeySpec(array('attribute' => 'noteId', 'asc' => false)),
),
'secondaryIndexes' => array(
// Default display order, sorted by last modify time
'mtime' => new LocalSecondaryIndexSpec(array(
'indexSchema' => array(
new KeySpec(array('attribute' => 'mtime', 'asc' => false)),
),
'projections' => array('title', 'noteId'),
'consistencyMode' => SecondaryIndexConsistencyMode::EAGER,
)),
// Search by category
'cat' => new LocalSecondaryIndexSpec(array(
'indexSchema' => array(
new KeySpec(array('attribute' => 'category')),
),
'consistencyMode' => SecondaryIndexConsistencyMode::LAZY,
)),
),
'attributes' => array(
'userId' => DataType::STRING,
'noteId' => DataType::INT64,
'title' => DataType::STRING,
'content' => DataType::STRING,
'mtime' => DataType::INT64,
'category' => DataType::STRING,
),
)),
'metadata' => new TableMetadata(array(
'quota' => new TableQuota(array('size' => 100 * 1024 * 1024)),
'throughput' => new ProvisionThroughput(array(
'readCapacity' => 200,
'writeCapacity' => 200
))
))
));
$adminClient->createTable($tableName, $tableSpec);