in java/core/src/main/java/com/aliyun/openservices/tablestore/agent/util/TablestoreHelper.java [113:179]
public static void createTableIfNotExist(
SyncClient client,
String tableName,
List<Pair<String, MetaType>> primaryKeys,
List<Pair<String, MetaType>> definedColumns
) {
ListTableResponse listTableResponse = client.listTable();
for (String name : listTableResponse.getTableNames()) {
if (name.equals(tableName)) {
log.warn("tablestore table:[{}] already exists", tableName);
return;
}
}
TableMeta tableMeta = new TableMeta(tableName);
for (Pair<String, MetaType> pk : primaryKeys) {
String name = pk.getKey();
MetaType type = pk.getValue();
switch (type) {
case STRING:
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(name, PrimaryKeyType.STRING));
break;
case INTEGER:
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(name, PrimaryKeyType.INTEGER));
break;
case BINARY:
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(name, PrimaryKeyType.BINARY));
break;
default:
throw Exceptions.illegalArgument("unsupported primary key name:%s type:%s", name, type);
}
}
if (definedColumns != null) {
for (Pair<String, MetaType> definedColumn : definedColumns) {
String name = definedColumn.getKey();
MetaType type = definedColumn.getValue();
switch (type) {
case STRING:
tableMeta.addDefinedColumn(new DefinedColumnSchema(name, DefinedColumnType.STRING));
break;
case INTEGER:
tableMeta.addDefinedColumn(new DefinedColumnSchema(name, DefinedColumnType.INTEGER));
break;
case DOUBLE:
tableMeta.addDefinedColumn(new DefinedColumnSchema(name, DefinedColumnType.DOUBLE));
break;
case BOOLEAN:
tableMeta.addDefinedColumn(new DefinedColumnSchema(name, DefinedColumnType.BOOLEAN));
break;
case BINARY:
tableMeta.addDefinedColumn(new DefinedColumnSchema(name, DefinedColumnType.BINARY));
break;
default:
throw Exceptions.illegalArgument("unsupported defined column name:%s type:%s", name, type);
}
}
}
TableOptions tableOptions = new TableOptions(-1, 1);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
request.setReservedThroughput(new ReservedThroughput(new CapacityUnit(0, 0)));
log.info("tablestore create table:[{}] successfully.", tableName);
try {
client.createTable(request);
Thread.sleep(1000);
} catch (Exception e) {
throw Exceptions.runtimeThrowable(String.format("tablestore create table:[%s] failed", tableName), e);
}
}