https://help.aliyun.com/document_detail/43017.html?spm=a2c4g.11186623.6.762.22f87e748D8rpv
1、批量查詢數據
import com.alicloud.openservices.tablestore.SyncClient; import com.alicloud.openservices.tablestore.model.*; import com.alicloud.openservices.tablestore.model.filter.SingleColumnValueFilter; import java.util.List; public class batchSearchData { /** * @param client * @param tableName 表名 * @param primaryKeyName 主鍵名稱 * @param rowCount 要讀取的行數 * @param colName 要讀取的列名稱 */ private void batchGetRow(SyncClient client, String tableName, String primaryKeyName, int rowCount, List<String> colName) { MultiRowQueryCriteria multiRowQueryCriteria = new MultiRowQueryCriteria(tableName); // 加入要讀取的行 for (int i = 0; i < rowCount; i++) { PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn(primaryKeyName, PrimaryKeyValue.fromString("pk" + i)); PrimaryKey primaryKey = primaryKeyBuilder.build(); multiRowQueryCriteria.addRow(primaryKey); } // 添加條件 multiRowQueryCriteria.setMaxVersions(1); for (int i = 0; i < colName.size(); i++) { multiRowQueryCriteria.addColumnsToGet(colName.get(i)); } SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(colName.get(0), SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0)); singleColumnValueFilter.setPassIfMissing(false); multiRowQueryCriteria.setFilter(singleColumnValueFilter); BatchGetRowRequest batchGetRowRequest = new BatchGetRowRequest(); // batchGetRow支持讀取多個表的數據, 一個multiRowQueryCriteria對應一個表的查詢條件, 可以添加多個multiRowQueryCriteria. batchGetRowRequest.addMultiRowQueryCriteria(multiRowQueryCriteria); BatchGetRowResponse batchGetRowResponse = client.batchGetRow(batchGetRowRequest); System.out.println("是否全部成功:" + batchGetRowResponse.isAllSucceed()); if (!batchGetRowResponse.isAllSucceed()) { for (BatchGetRowResponse.RowResult rowResult : batchGetRowResponse.getFailedRows()) { System.out.println("失敗的行:" + batchGetRowRequest.getPrimaryKey(rowResult.getTableName(), rowResult.getIndex())); System.out.println("失敗原因:" + rowResult.getError()); } /** * 可以通過createRequestForRetry方法再構造一個請求對失敗的行進行重試.這里只給出構造重試請求的部分. * 推薦的重試方法是使用SDK的自定義重試策略功能, 支持對batch操作的部分行錯誤進行重試. 設定重試策略后, 調用接口處即不需要增加重試代碼. */ BatchGetRowRequest retryRequest = batchGetRowRequest.createRequestForRetry(batchGetRowResponse.getFailedRows()); } } }
2、批量插入數據
待完善(要添加哪些列?造哪些列的數據)
import com.alicloud.openservices.tablestore.SyncClient; import com.alicloud.openservices.tablestore.model.*; public class batchWriteData { /** * @param client * @param tableName 表名 * @param primaryKeyName 主鍵名稱 * 備注:待完善(要添加哪些列?造哪些列的數據) */ private void batchWriteRow(SyncClient client, String tableName, String primaryKeyName) { BatchWriteRowRequest batchWriteRowRequest = new BatchWriteRowRequest(); // 構造rowPutChange1 PrimaryKeyBuilder pk1Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); pk1Builder.addPrimaryKeyColumn(primaryKeyName, PrimaryKeyValue.fromString("pk1")); RowPutChange rowPutChange1 = new RowPutChange(tableName, pk1Builder.build()); // 添加一些列 for (int i = 0; i < 10; i++) { rowPutChange1.addColumn(new Column("Col" + i, ColumnValue.fromLong(i))); } // 添加到batch操作中 batchWriteRowRequest.addRowChange(rowPutChange1); // 構造rowPutChange2 PrimaryKeyBuilder pk2Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); pk2Builder.addPrimaryKeyColumn(primaryKeyName, PrimaryKeyValue.fromString("pk2")); RowPutChange rowPutChange2 = new RowPutChange(tableName, pk2Builder.build()); // 添加一些列 for (int i = 0; i < 10; i++) { rowPutChange2.addColumn(new Column("Col" + i, ColumnValue.fromLong(i))); } // 添加到batch操作中 batchWriteRowRequest.addRowChange(rowPutChange2); // 構造rowUpdateChange PrimaryKeyBuilder pk3Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); pk3Builder.addPrimaryKeyColumn(primaryKeyName, PrimaryKeyValue.fromString("pk3")); RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, pk3Builder.build()); // 添加一些列 for (int i = 0; i < 10; i++) { rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i))); } // 刪除一列 rowUpdateChange.deleteColumns("Col10"); // 添加到batch操作中 batchWriteRowRequest.addRowChange(rowUpdateChange); // 構造rowDeleteChange PrimaryKeyBuilder pk4Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); pk4Builder.addPrimaryKeyColumn(primaryKeyName, PrimaryKeyValue.fromString("pk4")); RowDeleteChange rowDeleteChange = new RowDeleteChange(tableName, pk4Builder.build()); // 添加到batch操作中 batchWriteRowRequest.addRowChange(rowDeleteChange); BatchWriteRowResponse response = client.batchWriteRow(batchWriteRowRequest); System.out.println("是否全部成功:" + response.isAllSucceed()); if (!response.isAllSucceed()) { for (BatchWriteRowResponse.RowResult rowResult : response.getFailedRows()) { System.out.println("失敗的行:" + batchWriteRowRequest.getRowChange(rowResult.getTableName(), rowResult.getIndex()).getPrimaryKey()); System.out.println("失敗原因:" + rowResult.getError()); } /** * 可以通過createRequestForRetry方法再構造一個請求對失敗的行進行重試.這里只給出構造重試請求的部分. * 推薦的重試方法是使用SDK的自定義重試策略功能, 支持對batch操作的部分行錯誤進行重試. 設定重試策略后, 調用接口處即不需要增加重試代碼. */ BatchWriteRowRequest retryRequest = batchWriteRowRequest.createRequestForRetry(response.getFailedRows()); } } }