TableStore:多行数据操作
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:多行数据操作的更多相关文章
- MySQL命令行数据操作使用心得(总结版)
Char 0~255 Varchar 0~65535 text 0~65535(只能保存字符) Longtext 0~4294967295(只能保存字符) CMD登陆mysql mysql -u ro ...
- FunDA(2)- Streaming Data Operation:流式数据操作
在上一集的讨论里我们介绍并实现了强类型返回结果行.使用强类型主要的目的是当我们把后端数据库SQL批次操作搬到内存里转变成数据流式按行操作时能更方便.准确.高效地选定数据字段.在上集讨论示范里我们用集合 ...
- hive数据操作
mdl是数据操作类的语言,包括向数据表加载文件,写查询结果等操作 hive有四种导入数据的方式 >从本地加载数据 LOAD DATA LOCAL INPATH './examples/files ...
- Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页
models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...
- SQL不同服务器数据库之间的数据操作整理(完整版)
---------------------------------------------------------------------------------- -- Author : htl25 ...
- C#利用SqlDataAdapte对DataTable进行批量数据操作
C#利用SqlDataAdapte对DataTable进行批量数据操作,可以让我们大大简化操作数据的代码量,我们几乎不需要循环和不关心用户到底是新增还是修改,更不用编写新增和修改以及删除的SQL语句, ...
- [转]Mysql命令行常用操作
Mysql命令行常用操作 一.从命令行登录MySQL数据库服务器 1.登录使用默认3306端口的MySQL /usr/local/mysql/bin/mysql -u root -p 2.通过TCP连 ...
- oracle-2-sql数据操作和查询
主要内容: >oracle 数据类型 >sql建表和约束 >sql对数九的增删改 >sql查询 >oracle伪例 1.oracle的数据类型 oracle数据库的核心是 ...
- (转)SQLLite数据操作
原文:http://dreamboy.blog.51cto.com/3180937/722352 SQLLite数据操作 一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存 ...
随机推荐
- SQL Server数据库有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式
SQL Server数据库有三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式: 1.Simple 简单恢复模式, Simple模式的旧称叫”Checkpoint with truncate ...
- taro 学习资料
taro 学习资料 学习资料 网址 github https://github.com/NervJS/taro taro 官方文档 https://nervjs.github.io/taro/docs ...
- Request.QueryString()和Request()和Request.Form();
一. querystring的用法及原理 当页面上的 FORM以 GET方式向页面发送请求数据 (如数据含有不安全字符,则浏览器先将其转换成 16进制的字符再传送,如空格被转成 %20)时, WEB ...
- Php文件上传类class.upload.php
简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮助你快速的给自己的网站集成上传文件功能.不仅如此,此分类还有一些列的处理功能,可以对上传的文件或者本地的文件进行处 ...
- Web API 令牌(秘钥是双方约定的,并不在网络连接上传输)
http://blog.csdn.net/qq289523052/article/details/47750021 秘钥是双方约定的,并不在网络连接上传输 Web API数据传输加密 2015-08- ...
- Android app内存限制OOM
Android系统的每个app做了内存限制,版本的android系统,不同的设备对每个app的内存限制可能有所不同,从早期的16M ,32M到现在的256M,384M...虽然内存增大了,但是不代表就 ...
- elixir环境配置
mac下 brew install elixir debian下版本可能太低,需要kiex 安装 curl -sSL https://raw.githubusercontent.com/taylor/ ...
- 解析H5本地储存Web Storage
一.本地存储由来的背景 由于HTML4时代Cookie的大小.格式.存储数据格式等限制,网站应用如果想在浏览器端存储用户的部分信息,那么只能借助于Cookie.但是Cookie的这些限制,也就导致了C ...
- VBScript Scripting Techniques: File Open Dialog http://www.robvanderwoude.com/vbstech_ui_fileopen.php
I accept cookies This website uses cookies to ensure you get the best experience on our website More ...
- 【maven】之打包war依赖子项目jar
比如 p-common p-core p-dao p-service p-web service项目依赖dao,dao依赖core和common,web依赖service 在使用maven tomca ...