1、批量写

public static void batchWriteRow(SyncClient client) {
    BatchWriteRowRequest request = new BatchWriteRowRequest();

    //RowPut
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("noteid", PrimaryKeyValue.fromLong(99));
    RowPutChange rowPutChange = new RowPutChange("note",primaryKeyBuilder.build());
    //添加一些列
    rowPutChange.addColumn(new Column("intattr", ColumnValue.fromLong(123)));
    rowPutChange.addColumn(new Column("strattr", ColumnValue.fromString("string 1"), System.currentTimeMillis()));
    rowPutChange.addColumn(new Column("strattr", ColumnValue.fromString("string 23345"),System.currentTimeMillis() + 10));
    request.addRowChange(rowPutChange);

    //RowDelete
    PrimaryKeyBuilder primaryKeyBuilder2 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder2.addPrimaryKeyColumn("noteid", PrimaryKeyValue.fromLong(2));
    RowDeleteChange rowDeleteChange = new RowDeleteChange("note",primaryKeyBuilder2.build());
    request.addRowChange(rowDeleteChange);

    //RowUpdate
    PrimaryKeyBuilder primaryKeyBuilder3 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder3.addPrimaryKeyColumn("noteid",PrimaryKeyValue.fromLong(1));
    RowUpdateChange rowUpdateChange = new RowUpdateChange("note", primaryKeyBuilder3.build());
    rowUpdateChange.put("day",ColumnValue.fromString("修改后的day"));    rowUpdateChange.deleteColumns("month");
    request.addRowChange(rowUpdateChange);

    //另一个表的RowPut
    PrimaryKeyBuilder keyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    keyBuilder.addPrimaryKeyColumn("userid",PrimaryKeyValue.fromLong(20));
    keyBuilder.addPrimaryKeyColumn("userguid",PrimaryKeyValue.fromString("121212323"));
    keyBuilder.addPrimaryKeyColumn("userauto",PrimaryKeyValue.AUTO_INCREMENT);
    RowPutChange rowPutChange2 = new RowPutChange("user", keyBuilder.build());
    request.addRowChange(rowPutChange2);

    BatchWriteRowResponse batchWriteRowResponse = client.batchWriteRow(request);

    System.out.println("是否全部成功:" + batchWriteRowResponse.isAllSucceed());
    if(!batchWriteRowResponse.isAllSucceed()) {
        for(RowResult rowResult : batchWriteRowResponse.getFailedRows()) {
            System.out.println("失败的行:" + request.getRowChange(rowResult.getTableName(),rowResult.getIndex()).getPrimaryKey());
                        System.out.println("失败原因:" + rowResult.getError());
        }
    }

    //可以通过createRequestForRetry方法再构造一个请求对失败的行进行重试.这里只给出构造重试请求的部分.
    //推荐的重试方法是使用SDK的自定义重试策略功能, 支持对batch操作的部分行错误进行重试. 设定重试策略后, 调用接口处即不需要增加重试代码.
    //BatchWriteRowRequest retryRequest = request.createRequestForRetry(batchWriteRowResponse.getFailedRows());
}

2、批量读

private static void batchGetRow(SyncClient client) {
    BatchGetRowRequest batchGetRowRequest = new BatchGetRowRequest();

    MultiRowQueryCriteria multiRowQueryCriteria = new MultiRowQueryCriteria("note");
    // 加入要读的行
    PrimaryKeyBuilder keyBuilder1 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    keyBuilder1.addPrimaryKeyColumn("noteid", PrimaryKeyValue.fromLong(1));
    PrimaryKey key1 = keyBuilder1.build();

    PrimaryKeyBuilder keyBuilder2 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    keyBuilder2.addPrimaryKeyColumn("noteid", PrimaryKeyValue.fromLong(99));
    PrimaryKey key2 = keyBuilder2.build();
    multiRowQueryCriteria.addRow(key1);
    multiRowQueryCriteria.addRow(key2);
    // 添加条件
    multiRowQueryCriteria.setMaxVersions(1);
    String[] colsStrings = { "noteid", "day", "year" };
    multiRowQueryCriteria.addColumnsToGet(colsStrings);
    SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("year",
            SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(2019));
    singleColumnValueFilter.setPassIfMissing(false);
    multiRowQueryCriteria.setFilter(singleColumnValueFilter);
    batchGetRowRequest.addMultiRowQueryCriteria(multiRowQueryCriteria);

    MultiRowQueryCriteria multiRowQueryCriteria2 = new MultiRowQueryCriteria("testdb");
    multiRowQueryCriteria2.setMaxVersions(1);
    PrimaryKeyBuilder keyBuilder3 = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    keyBuilder3.addPrimaryKeyColumn("testid", PrimaryKeyValue.fromLong(1));
    PrimaryKey key3 = keyBuilder3.build();
    multiRowQueryCriteria2.addRow(key3);
    batchGetRowRequest.addMultiRowQueryCriteria(multiRowQueryCriteria2);

    BatchGetRowResponse batchGetRowResponse = client.batchGetRow(batchGetRowRequest);

    System.out.println("是否全部成功:" + batchGetRowResponse.isAllSucceed());
    if (!batchGetRowResponse.isAllSucceed()) {
        for (RowResult rowResult : batchGetRowResponse.getFailedRows()) {
            System.out.println(
                    "失败的行:" + batchGetRowRequest.getPrimaryKey(rowResult.getTableName(), rowResult.getIndex()));
            System.out.println("失败原因:" + rowResult.getError());
        }
    }

    List<RowResult> results = batchGetRowResponse.getSucceedRows();
    for (RowResult rowResult : results) {
        Row row = rowResult.getRow();
        if (row != null) {
            Column[] columns = row.getColumns();
            for (Column column : columns) {
                System.out.println("Name:" + column.getName() + " Value:" + column.getValue() + "\n");
            }
        }
    }

    List<RowResult> results1 = batchGetRowResponse.getBatchGetRowResult("note");
    for (RowResult rowResult : results1) {
        Row row = rowResult.getRow();
        if (row != null) {
            Column[] columns = row.getColumns();
            for (Column column : columns) {
                System.out.println("Name:" + column.getName() + " Value:" + column.getValue() + "\n");
            }
        }
    }

    List<RowResult> results2 = batchGetRowResponse.getBatchGetRowResult("testdb");
    for (RowResult rowResult : results2) {
        Row row = rowResult.getRow();        if (row != null) {
            Column[] columns = row.getColumns();
            for (Column column : columns) {
                System.out.println("Name:" + column.getName() + " Value:" + column.getValue() + "\n");
            }
        }
    }

    // 可以通过createRequestForRetry方法再构造一个请求对失败的行进行重试.这里只给出构造重试请求的部分.
    // 推荐的重试方法是使用SDK的自定义重试策略功能, 支持对batch操作的部分行错误进行重试. 设定重试策略后, 调用接口处即不需要增加重试代码.
    // BatchGetRowRequest retryRequest =
    // batchGetRowRequest.createRequestForRetry(batchGetRowResponse.getFailedRows());

}

因为不通过条件的查询都会返回null,务必记得对Row做null检查。

3、范围读

设置起止主键,查找此范围内的数据,当数据量过大无法一次读取完时,会返回下一个主键位置,接着读取。

public static void getRange(SyncClient client) throws IOException {
    RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("note");

    //设置起始主键
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("noteid", PrimaryKeyValue.fromLong(20));
    rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());

    //设置结果主键
    primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("noteid", PrimaryKeyValue.fromLong(1));
    rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());
    //反序读
    rangeRowQueryCriteria.setDirection(Direction.BACKWARD);

    rangeRowQueryCriteria.setMaxVersions(1);
    while (true) {
        GetRangeResponse getRangeResponse = client.getRange(new GetRangeRequest(rangeRowQueryCriteria));
        for(Row row : getRangeResponse.getRows()) {
            PrimaryKeyColumn[] pks = row.getPrimaryKey().getPrimaryKeyColumns();
            Column pkColumn = pks[0].toColumn();
            System.out.println("noteid:" + pkColumn.getValue());

            Column[] columns = row.getColumns();
            for(Column column : columns) {
                System.out.println(" Name:" + column.getName() + " Value:" + column.getValue());
            }
        }

        if(getRangeResponse.getNextStartPrimaryKey() != null) {
            System.out.println("--------nextStartPrimaryKey不为空,则继续读取---------");
            rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
        }else {
            break;
        }
    }
}

4、迭代读

public static void getRangeByIterator(SyncClient client) throws IOException {
    RangeIteratorParameter rangeIteratorParameter = new RangeIteratorParameter("note");

    //设置起始主键
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("noteid", PrimaryKeyValue.fromLong(20));
    rangeIteratorParameter.setInclusiveStartPrimaryKey(primaryKeyBuilder.build());

    //设置结果主键
    primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("noteid", PrimaryKeyValue.fromLong(1));
    rangeIteratorParameter.setExclusiveEndPrimaryKey(primaryKeyBuilder.build());

    rangeIteratorParameter.setDirection(Direction.BACKWARD);

    rangeIteratorParameter.setMaxVersions(1);

    Iterator<Row> iterator = client.createRangeIterator(rangeIteratorParameter);
    while (iterator.hasNext()) {
        Row row = iterator.next();

        PrimaryKeyColumn[] pks = row.getPrimaryKey().getPrimaryKeyColumns();
        Column pkColumn = pks[0].toColumn();
        System.out.println("noteid:" + pkColumn.getValue());

        Column[] columns = row.getColumns();
        for(Column column : columns) {
            System.out.println(" Name:" + column.getName() + " Value:" + column.getValue());
        }

    }
}

TableStore:多行数据操作的更多相关文章

  1. MySQL命令行数据操作使用心得(总结版)

    Char 0~255 Varchar 0~65535 text 0~65535(只能保存字符) Longtext 0~4294967295(只能保存字符) CMD登陆mysql mysql -u ro ...

  2. FunDA(2)- Streaming Data Operation:流式数据操作

    在上一集的讨论里我们介绍并实现了强类型返回结果行.使用强类型主要的目的是当我们把后端数据库SQL批次操作搬到内存里转变成数据流式按行操作时能更方便.准确.高效地选定数据字段.在上集讨论示范里我们用集合 ...

  3. hive数据操作

    mdl是数据操作类的语言,包括向数据表加载文件,写查询结果等操作 hive有四种导入数据的方式 >从本地加载数据 LOAD DATA LOCAL INPATH './examples/files ...

  4. Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页

    models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...

  5. SQL不同服务器数据库之间的数据操作整理(完整版)

    ---------------------------------------------------------------------------------- -- Author : htl25 ...

  6. C#利用SqlDataAdapte对DataTable进行批量数据操作

    C#利用SqlDataAdapte对DataTable进行批量数据操作,可以让我们大大简化操作数据的代码量,我们几乎不需要循环和不关心用户到底是新增还是修改,更不用编写新增和修改以及删除的SQL语句, ...

  7. [转]Mysql命令行常用操作

    Mysql命令行常用操作 一.从命令行登录MySQL数据库服务器 1.登录使用默认3306端口的MySQL /usr/local/mysql/bin/mysql -u root -p 2.通过TCP连 ...

  8. oracle-2-sql数据操作和查询

    主要内容: >oracle 数据类型 >sql建表和约束 >sql对数九的增删改 >sql查询 >oracle伪例 1.oracle的数据类型 oracle数据库的核心是 ...

  9. (转)SQLLite数据操作

    原文:http://dreamboy.blog.51cto.com/3180937/722352 SQLLite数据操作 一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存 ...

随机推荐

  1. httpclient中文乱码

    https://blog.csdn.net/teamlet/article/details/8605840

  2. dojo Datagrid 实现数据删除功能

    DataGrid实现数据动态刷新功能见前一个帖子:http://www.cnblogs.com/qq552048250/p/4447103.html 实现数据删除只需要向表格中动态添加按钮,并为按钮的 ...

  3. JDBC 编程步骤

    java访问数据库的步骤如下: 加载数据库驱动 通常使用Class.forName(driverClass)来加载驱动 // 加载MySQL驱动 Class.forName("com.mys ...

  4. Excel文件转为其他格式文件

    引用:Spire.XLS 是一个 Excel 文件的读写库,无需安装office,使用起来也挺方便的.Spire还有一些其他的库(Spire.Doc,Spire.Pdf……) 说明:Spire.XLS ...

  5. phpmailer SMTP connect() failed的解决方法

    使用PHPMailer发邮件的时候,经常出现本地可以发送,上传到服务器就发送失败了.老是提示SMTP connect() failed 今天我也遇到了这样的问题,用的是QQ的邮箱服务器,查了下资料,很 ...

  6. System Generator 参数优化

    System Generator 参数优化 通过命令行调试参数 然后编译,查看资源消耗.

  7. Mysql 性能优化7【重要】sql语句的优化 慢查询

    慢查询时间设置 慢查询日志分析工具 另一个慢查询日志分析工具 如何对sql进行特定的优化

  8. 代码从Polyline读取到的坐标和属性对话框显示的不一样?

    属性窗口中查询的第一个点坐标: 程序输出的各个点坐标: 差这么多? 原来是坐标系的问题,程序查询到的是世界坐标,属性窗口中是当前ucs坐标 Document doc = Application.Doc ...

  9. 黄聪:PHP JSON_ENCODE 不转义中文汉字的方法

    ios程序中不识别读取到的JSON数据中 \u开头的数据. PHP 生成JSON的时候,必须将汉字不转义为 \u开头的UNICODE数据. 网上很多,但是其实都是错误的,正确的方法是在json_enc ...

  10. 【Zabbix3.0】之入门到精通

    https://www.cnblogs.com/clsn/p/7885990.html 饿了么技术债 http://server.51cto.com/sOS-555999.htm