Tablestore入门手册-数据管理-GetRow-阿里云开发者社区

开发者社区> 伯箫> 正文

Tablestore入门手册-数据管理-GetRow

简介: GetRow接口概述     GetRow接口用于读取一行数据,是Tablestore最基础的API之一。官方提供了Java、Go、Node.js、Python、PHP、C#、C++ SDK。     本文以Java代码为例,对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

过滤器,在服务端对读取结果进行过滤

示例代码

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
OLAP on TableStore:基于Data Lake Analytics的Serverless SQL大数据分析
TableStore(简称OTS)是阿里云的一款分布式表格系统,为用户提供schema-free的分布式表格服务。随着越来越多用户对OLAP有强烈的需求,我们提供在表格存储上接入Data Lake Analytics(简称DLA)服务的方式,提供一种快速的OLAP解决方案。
6489 0
DLA如何分析Table Store的数据
数据湖(Data Lake)是时下热门的概念,基于数据湖,可以不用做任何ETL、数据搬迁等过程,实现跨各种异构数据源进行大数据关联分析,从而极大的节省成本和提升用户体验。
886 0
大数据分布式架构单点故障详解(Hdfs+Yarn+HBase+Spark+Storm)构建HA高可用架构
本文梳理了常见的hadoop生态圈中的组件:Hdfs+Yarn+HBase+Spark+Storm的单点故障问题,出现原因以及单点故障的原理和解决方案(构建HA(High Available)高可用架构)。阅读本文之前,最好了解清楚各组件的架构原理。
19639 0
海量结构化数据存储技术揭秘:Tablestore表设计最佳实践
前言 表格存储Tablestore是阿里云自研的面向海量结构化数据存储的Serverless NoSQL多模型数据库。在处理海量数据时,方案设计非常重要,合理的设计才能够发挥出数据库的性能水平。本文主要介绍Tablestore在表设计方面的一些实践经验,供大家参考。
7797 0
使用JDBC获取各数据库的Meta信息——表以及对应的列
先贴代码,作为草稿: 第一个是工具类, MapUtil.java import java.util.ArrayList; import java.util.HashMap; import java.
756 0
TensorFlow 卷积神经网络手写数字识别数据集介绍
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习、深度学习的知识! 手写数字识别 接下来将会以 MNIST 数据集为例,使用卷积层和池化层,实现一个卷积神经网络来进行手写数字识别,并输出卷积和池化效果。
1494 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 32 章 回归测试_32.4. TAP Tests
32.4. TAP Tests 各种测试,尤其是src/bin下的客户端程序测试, 都使用Perl TAP工具,并使用Perl测试程序prove运行。 你可以通过设置make变量PROVE_FLAGS 向prove传递命令行选项,例如: make -C src/bin check PROVE_FLAGS='--timer' 详见prove的手册页。
950 0
+关注
伯箫
存储与数据库领域的学习者
5
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载