【HBase】+Java+批量增查數據




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());
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM