
com.xiaomi.infra.galaxy.sds.examples.Basic Maven / Gradle / Ivy
package com.xiaomi.infra.galaxy.sds.examples;
import com.xiaomi.infra.galaxy.sds.client.ClientFactory;
import com.xiaomi.infra.galaxy.sds.client.TableScanner;
import com.xiaomi.infra.galaxy.sds.thrift.AdminService;
import com.xiaomi.infra.galaxy.sds.thrift.CannedAcl;
import com.xiaomi.infra.galaxy.sds.thrift.CommonConstants;
import com.xiaomi.infra.galaxy.sds.thrift.Credential;
import com.xiaomi.infra.galaxy.sds.thrift.DataType;
import com.xiaomi.infra.galaxy.sds.thrift.Datum;
import com.xiaomi.infra.galaxy.sds.thrift.DatumUtil;
import com.xiaomi.infra.galaxy.sds.thrift.GetRequest;
import com.xiaomi.infra.galaxy.sds.thrift.GetResult;
import com.xiaomi.infra.galaxy.sds.thrift.KeySpec;
import com.xiaomi.infra.galaxy.sds.thrift.ProvisionThroughput;
import com.xiaomi.infra.galaxy.sds.thrift.PutRequest;
import com.xiaomi.infra.galaxy.sds.thrift.ScanRequest;
import com.xiaomi.infra.galaxy.sds.thrift.ScanResult;
import com.xiaomi.infra.galaxy.sds.thrift.TableMetadata;
import com.xiaomi.infra.galaxy.sds.thrift.TableQuota;
import com.xiaomi.infra.galaxy.sds.thrift.TableSchema;
import com.xiaomi.infra.galaxy.sds.thrift.TableService;
import com.xiaomi.infra.galaxy.sds.thrift.TableSpec;
import com.xiaomi.infra.galaxy.sds.thrift.UserType;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
public class Basic {
private static AdminService.Iface adminClient;
private static TableService.Iface tableClient;
private static String appId = ""; // Your AppId
private static String appKey = ""; // Your AppKey
private static String appSecret = ""; // Your AppSecret
private static String accountKey = ""; // Your AccountKey
private static String accountSecret = ""; // Your AccountSecret
private static String endpoint = "http://cnbj-s0.sds.api.xiaomi.com";
private static boolean isInit = false;
private static String tableName = "java-test-weather";
private static String[] cities = { "北京", "Beihai", "Dalian", "Dandong", "Fuzhou", "Guangzhou",
"Haikou", "Hankou", "Huangpu", "Jiujiang", "Lianyungang", "Nanjing", "Nantong", "Ningbo",
"Qingdao", "Qinhuangdao", "Rizhao", "Sanya", "Shanghai", "Shantou", "Shenzhen",
"Tianjin", "Weihai", "Wenzhou", "Xiamen", "Yangzhou", "Yantai" };
private static Credential getCredential(String secretKeyId, String secretKey, UserType userType) {
return new Credential().setSecretKeyId(secretKeyId).setSecretKey(secretKey)
.setType(userType);
}
public static AdminService.Iface createAdminClient(String host) {
Credential credential = getCredential(accountKey, accountSecret, UserType.DEV_XIAOMI);
ClientFactory clientFactory = new ClientFactory().setCredential(credential);
return clientFactory.newAdminClient(host + CommonConstants.ADMIN_SERVICE_PATH,
50000, 3000);
}
public static TableService.Iface createTableClient(String host) {
Credential credential = getCredential(appKey, appSecret, UserType.APP_SECRET);
// based on JSON transport protocol
// clientFactory = new ClientFactory().setCredential(credential).setProtocol(ThriftProtocol.TJSON);
// based on Compact Binary transport protocol
// clientFactory = new ClientFactory().setCredential(credential).setProtocol(ThriftProtocol.TCOMPACT);
// based on default Binary transport protocol
ClientFactory clientFactory = new ClientFactory().setCredential(credential);
return clientFactory.newTableClient(host + CommonConstants.TABLE_SERVICE_PATH,
10000, 3000, true, 5);
}
public static Map> cannedAclGrant(String appId, CannedAcl... cannedAcls) {
Map> appGrant = new HashMap>();
appGrant.put(appId, Arrays.asList(cannedAcls));
return appGrant;
}
private static void init() {
adminClient = createAdminClient(endpoint);
tableClient = createTableClient(endpoint);
isInit = true;
}
private static TableSpec tableSpec() {
List primaryKey = Arrays
.asList(new KeySpec[] { new KeySpec().setAttribute("cityId"), new KeySpec().setAttribute(
"timestamp").setAsc(false) });
Map attributes = new HashMap();
attributes.put("cityId", DataType.STRING);
attributes.put("timestamp", DataType.INT64);
attributes.put("score", DataType.DOUBLE);
attributes.put("pm25", DataType.INT64);
TableSchema tableSchema = new TableSchema();
tableSchema.setPrimaryIndex(primaryKey)
.setAttributes(attributes)
.setTtl(-1);
TableMetadata tableMetadata = new TableMetadata();
tableMetadata
.setQuota(new TableQuota().setSize(100 * 1024 * 1024))
.setAppAcl(cannedAclGrant(appId, CannedAcl.APP_SECRET_READ, CannedAcl.APP_SECRET_WRITE))
.setThroughput(new ProvisionThroughput().setReadCapacity(20).setWriteCapacity(20));
return new TableSpec().setSchema(tableSchema)
.setMetadata(tableMetadata);
}
private static void printResult(Map resultToPrint) {
if (resultToPrint != null) {
for (Map.Entry e : resultToPrint.entrySet()) {
System.out.println(
String.format("[%s] => %s", e.getKey(), DatumUtil.fromDatum(e.getValue()).toString()));
}
}
}
public static void main(String[] args) throws Exception {
init();
TableSpec tableSpec = tableSpec();
adminClient.createTable(tableName, tableSpec);
try {
System.out.println("table " + tableName + ":");
System.out.println(adminClient.describeTable(tableName));
System.out.println("All tables belong to you:");
System.out.println(adminClient.findAllTables());
// put data
Date now = new Date();
PutRequest putRequest = new PutRequest();
for (int i = 0; i < 10; i++) {
putRequest.clear();
putRequest.setTableName(tableName);
putRequest.putToRecord("cityId", DatumUtil.toDatum(cities[i]));
putRequest.putToRecord("timestamp", DatumUtil.toDatum(now.getTime()));
putRequest.putToRecord("score", DatumUtil.toDatum((double) new Random().nextInt(100)));
putRequest.putToRecord("pm25", DatumUtil.toDatum((long) (new Random().nextInt(500))));
tableClient.put(putRequest);
System.out.println("put record #" + i);
}
// get data
GetRequest getRequest = new GetRequest();
getRequest.setTableName(tableName);
getRequest.putToKeys("cityId", DatumUtil.toDatum(cities[0]));
getRequest.putToKeys("timestamp", DatumUtil.toDatum(now.getTime()));
getRequest.addToAttributes("pm25");
GetResult getResult = tableClient.get(getRequest);
printResult(getResult.getItem());
// scan data
ScanRequest scanRequest = new ScanRequest();
scanRequest.setTableName(tableName);
scanRequest.addToAttributes("cityId");
scanRequest.addToAttributes("score");
scanRequest.setCondition("score > 50");
scanRequest.setLimit(10);
ScanResult scanResult = tableClient.scan(scanRequest);
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy