1 编辑
public static PrimaryKey buildPrimaryKey(Map<String, Object> map) {
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
for (String key : map.keySet()) {
if (map.get(key) instanceof Integer) {
primaryKeyBuilder.addPrimaryKeyColumn(key, PrimaryKeyValue.fromLong(Integer.valueOf(map.get(key).toString())));
}
if (map.get(key) instanceof String) {
primaryKeyBuilder.addPrimaryKeyColumn(key, PrimaryKeyValue.fromString((String) map.get(key)));
}
}
return primaryKeyBuilder.build();
}
public static void updateRow(SyncClient client, String tableName, Map<String, Object> mapKey, Map<String, Object> mapValues) {
PrimaryKey primaryKey = buildPrimaryKey(mapKey);
RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, primaryKey);
for (String column : mapValues.keySet()) {
if (mapValues.get(column) instanceof Integer) {
rowUpdateChange.put(new Column(column, ColumnValue.fromLong(Integer.valueOf(mapValues.get(column).toString()))));
}
if (mapValues.get(column) instanceof String) {
rowUpdateChange.put(new Column(column, ColumnValue.fromString(mapValues.get(column).toString())));
}
}
client.updateRow(new UpdateRowRequest(rowUpdateChange));
}
1.3 deleteTable:清空全表数据
public static void deleteTable() {
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(new MatchAllQuery());
searchQuery.setGetTotalCount(true);
SearchRequest searchRequest = new SearchRequest("表名", "索引名", searchQuery);
SearchResponse resp = CLIENT.search(searchRequest);
if (!resp.isAllSuccess()) {
throw new RuntimeException("not all success");
}
List<Row> rows = resp.getRows();
while (resp.getNextToken() != null) {
searchRequest.getSearchQuery().setToken(resp.getNextToken());
resp = CLIENT.search(searchRequest);
if (!resp.isAllSuccess()) {
throw new RuntimeException("not all success");
}
rows.addAll(resp.getRows());
List<Row> rows1 = resp.getRows();
List<Map<String, Object>> list = TableStoreHelper.rowsToMap(rows1);
for (Map<String, Object> map : list) {
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("主键字段名", PrimaryKeyValue.fromString((String) map.get("主键字段名")));
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowDeleteChange rowDeleteChange = new RowDeleteChange("表名", primaryKey);
CLIENT.deleteRow(new DeleteRowRequest(rowDeleteChange));
}
System.out.println("已删除" + list.size());
}
System.out.println("RowSize: " + rows.size());
System.out.println("TotalCount: " + resp.getTotalCount());
}
2 查询
public static TermQuery createTermQuery(String fieldName, Object fieldValue) {
ColumnValue columnValue = null;
TermQuery termQuery = new TermQuery();
termQuery.setFieldName(fieldName);
if (fieldValue instanceof Integer) {
columnValue = ColumnValue.fromLong((int) fieldValue);
} else if (fieldValue instanceof String) {
columnValue = ColumnValue.fromString((String) fieldValue);
} else if (fieldValue instanceof Double) {
columnValue = ColumnValue.fromDouble((double) fieldValue);
} else if (fieldValue instanceof Boolean) {
columnValue = ColumnValue.fromBoolean((boolean) fieldValue);
} else if (fieldValue instanceof Byte[]) {
columnValue = ColumnValue.fromBinary((byte[]) fieldValue);
}
termQuery.setTerm(columnValue);
return termQuery;
}
public static TermsQuery createTermsQuery(String fieldName, List filedValueList) {
List<ColumnValue> paramsList = new ArrayList<>();
if (!filedValueList.isEmpty()) {
for (Object object : filedValueList) {
ColumnValue columnValue = null;
if (object instanceof Integer) {
Integer integer = (Integer) object;
columnValue = ColumnValue.fromLong(integer);
} else if (object instanceof String) {
String string = (String) object;
columnValue = ColumnValue.fromString(string);
} else if (object instanceof Double) {
Double aDouble = (Double) object;
columnValue = ColumnValue.fromDouble(aDouble);
}
paramsList.add(columnValue);
}
}
TermsQuery termsQuery = new TermsQuery();
termsQuery.setFieldName(fieldName);
termsQuery.setTerms(paramsList);
return termsQuery;
}
3 多元索引查询
-
3.1 SearchResponse : 执行搜索后的响应对象
public static SearchResponse boolQueryPage(SyncClient client, String tableName, String indexName, List<Query> listQuery,
Integer limit, Integer offset, String rankField, String rankType) {
BoolQuery boolQuery = new BoolQuery();
boolQuery.setMustQueries(listQuery);
SearchQuery searchQuery = createPageSearchQuery(boolQuery, offset, limit, rankField, rankType);
SearchRequest searchRequest = new SearchRequest(tableName, indexName, searchQuery);
SearchResponse resp = client.search(returnColumns(searchRequest));
if (!resp.isAllSuccess()) {
throw new RuntimeException("not all success");
}
return resp;
}
private static SearchRequest returnColumns(SearchRequest searchRequest) {
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
searchRequest.setColumnsToGet(columnsToGet);
return searchRequest;
}
-
3.2 SearchQuery : 创建SearchQuery 对象
public static SearchQuery createPageSearchQuery(Query query, Integer offset, Integer limit, String rankField, String rankType) {
SearchQuery searchQuery = new SearchQuery();
Sort sort;
if ("ASC".equals(rankType)) {
sort = rankSort(rankField, SortOrder.ASC);
} else {
sort = rankSort(rankField, SortOrder.DESC);
}
searchQuery.setSort(sort);
searchQuery.setQuery(query);
if (limit != null && offset != null) {
searchQuery.setLimit(limit);
searchQuery.setOffset(offset);
}
searchQuery.setGetTotalCount(true);
return searchQuery;
}
private static Sort rankSort(String rankField, SortOrder sortOrder) {
Sort.Sorter col = new FieldSort("默认排序字段", sortOrder);
return new Sort(Arrays.asList(col));
}
4 转化
-
4.1 Row–>Map : 一行转化为Map集合
public static Map<String, Object> rowToMap(Row row) {
Assert.isTrue(row != null, "ROW CAN'T BE NULL");
PrimaryKey primaryKey = row.getPrimaryKey();
Column[] columns = row.getColumns();
PrimaryKeyColumn[] primaryKeyColumns = primaryKey.getPrimaryKeyColumns();
Map<String, Object> map = new HashMap<>();
for (PrimaryKeyColumn pri : primaryKeyColumns) {
map.put(pri.getName(), pri.getValue().toString());
}
for (Column col : columns) {
map.put(col.getName(), typeResolver(col.getValue()));
}
return map;
}
public static Object typeResolver(ColumnValue columnValue) {
String type = columnValue.getType().toString();
String value = columnValue.toString();
if (type.equals("INTEGER")) {
return Integer.valueOf(value);
}
return value;
}
-
4.2 Rows–>List< Map > : 多行转化为List集合
public static List<Map<String, Object>> rowsToList(List<Row> rows) {
List<Map<String, Object>> list = new ArrayList<>();
for (Row row : rows) {
list.add(rowToMap(row));
}
return list;
}