Tablestore入门手册-数据管理-GetRow
GetRow接口概述
GetRow接口用于读取一行数据,是Tablestore最基础的API之一。官方提供了Java、Go、Node.js、Python、PHP、C#、C++ SDK。
本文以Java代码为例,对GetRow接口进行详细说明。
基本使用说明
参数说明
参数名称 | 是否必填 | 参数说明 |
---|---|---|
PrimaryKey | 是 | 主键,所有主键都需要填写 |
ColumnsToGet | 否 | 需要读取的列的集合,若不设置则读取所有列 |
MaxVersions | MaxVersions 与 TimeRange 至少设置一个 | 最多读取多少个版本 |
TimeRange | MaxVersions 与 TimeRange 至少设置一个 | 要读取的版本范围 |
Filter | 否 | 过滤器,在服务端对读取结果进行过滤 |
Java代码示例
public void getRow() { //构造主键,主键列必须全部指定 PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn(PK1, PrimaryKeyValue.fromLong(1L)); primaryKeyBuilder.addPrimaryKeyColumn(PK2, PrimaryKeyValue.fromString("string")); PrimaryKey primaryKey = primaryKeyBuilder.build(); SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey); //设置读取的版本数为1,即读取最新版本 criteria.setMaxVersions(1); GetRowRequest getRowRequest = new GetRowRequest(criteria); GetRowResponse getRowResponse = syncClient.getRow(getRowRequest); Row row = getRowResponse.getRow(); System.out.println("读取行完毕, 结果为: "); System.out.println(row); }
多版本数据读取
表格存储支持多版本数据存储,具体参考开发指南。
1.MaxVersions
指定maxVersions,返回最新的几个版本。例如:某一行的某一列有20个历史版本,设置maxVersions为10,返回的是最新的10个版本。
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey); // 设置读取最新版本 criteria.setMaxVersions(10);
2.TimeRange
每一个版本都有一个对应的版本号,这个版本号默认是一个毫秒级的时间戳,用户也可以自己指定版本号,读取出来的时候可以按时间范围取值,返回范围内的版本列。
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey); TimeRange timeRange = new TimeRange(1418380771, 1418390771); criteria.setTimeRange(timeRange);
宽行读取
有很多数据列的行,我们称为宽行。因为数据列非常多,受网络带宽、延迟等因素的影响,我们无法一次性读出来,这里介绍几种宽行的读取方法。
1.使用ColumsToGet读取指定列
ColumsToGet参数,允许用户指定需要读取的列。
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey); // 设置读取某些列 criteria.addColumnsToGet(new String[] {"Col1","Col2","Col3"});
2.使用startColumn,endColumn读取一定范围的属性列
通过startColumn和endColumn指定宽行中某个范围内的列,按照字典序对列进行排序比较。
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey); criteria.setStartColumn("col0"); criteria.setEndColumn("col3");
3.使用ColumnPaginationFilter配合startColumn翻页读取
ColumnPaginationFilter有两个参数,limit和offset,使用ColumnPaginationFilter读取时,会跳过offset个属性列,然后读取limit个属性列。配合startColumn使用时,会从startColumn开始,跳过offset个属性列,读取limit个属性列。这种方式适合分页读取属性列的场景。
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey); // 设置从Column0开始读 criteria.setStartColumn("Column0"); // 使用ColumnPaginationFilter设置一次要读取的列数, limit=10, offset=0 criteria.setFilter(new ColumnPaginationFilter(10, 0));
使用过滤器
表格存储过滤器的过滤条件支持算术运算(=、!=、>、>=、<、<=)和逻辑运算(NOT、AND、OR),支持最多 10 个条件的组合。过滤器的具体使用说明请参考:过滤器使用说明。
1.单条件过滤器:SingleColumnValueFilter
表格存储中的数据是稀疏矩阵形式的,每一行的列可能都不一样,对于不存在某一列的行,可以使用PassIfMissing参数来设置期望的过滤形式。passIfMissing为True代表如果这一列不存在也返回,为false代表这一列不存在就不返回。
// 设置过滤器, 当 Col0 的值为 0 时返回该行。 SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("Col0", SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0)); // 如果不存在 Col0 这一列, 也不返回。 singleColumnValueFilter.setPassIfMissing(false);
2.多条件过滤:CompositeColumnValueFilter
多条件过滤器,可以通过组合多个算术运算符号达到多条件组合过滤的效果。
// composite1 条件为 (Col0 == 0) AND (Col1 > 100) CompositeColumnValueFilter composite1 = new CompositeColumnValueFilter(CompositeColumnValueFilter.LogicOperator.AND); SingleColumnValueFilter single1 = new SingleColumnValueFilter("Col0", SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0)); SingleColumnValueFilter single2 = new SingleColumnValueFilter("Col1", SingleColumnValueFilter.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)); composite1.addFilter(single1); composite1.addFilter(single2); // composite2 条件为 ( (Col0 == 0) AND (Col1 > 100) ) OR (Col2 <= 10) CompositeColumnValueFilter composite2 = new CompositeColumnValueFilter(CompositeColumnValueFilter.LogicOperator.OR); SingleColumnValueFilter single3 = new SingleColumnValueFilter("Col2", SingleColumnValueFilter.CompareOperator.LESS_EQUAL, ColumnValue.fromLong(10)); composite2.addFilter(composite1); composite2.addFilter(single3);
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
我看JAVA 之 Object & JNI
我看JAVA 之 Object & JNI 注:基于jdk11 Object Object类是java语言中所有类的父类。 public class Object { //注册本地函数,方可以从库中的本机代码调用JNI函数 private static native void registerNatives(); static { registerNatives(); } /** * Constructs a new object. */ //HotSpotIntrinsicCandidate注解,说明本方法,jvm额外维护了一个利用了CPU指令的高效实现 @HotSpotIntrinsicCandidate public Object() {} //返回对象的运行时类型 /** * Number c = 0; * Class<? extends Number> clazz = c.getClass(); * System.out.println(clazz); * 打印如下: * class java.lang.Integer * 关于泛型及泛型擦除概念,见后续泛...
- 下一篇
Tablestore结合Blink公有云使用手册
前言 本文将介绍在Blink实时计算平台建立以Tablestore作为流计算的源表以及结果表作业的流程。 表格存储通道服务 表格存储通道服务是基于表格存储(Tablestore)数据接口之上的全增量一体化服务,它通过一组Tunnel Service API和SDK为用户提供了增量、全量和增量加全量三种类型的分布式数据实时消费通道。通过为数据表建立Tunnel Service数据通道,用户可以通过流式计算的方式对表中历史存量和新增的数据进行消费处理。流计算能将Tunnel Service数据通道作为流式数据的输入,每条数据类似一个JSON格式,如下所示: { "OtsRecordType": "PUT", // 数据操作类型,包括PUT、UPDATE、DELETE "OtsRecordTimestamp": 1506416585740836, //数据写入时间(微秒),全量数据时为0 "PrimaryKey": [ { "ColumnName": "pk_1", //第一主键列 "Value": 1506416585881590900 }, { "ColumnName": "pk_2",...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境