Thrift 2中get用法的详细解析

Thrift2相比于Thrift 1改动较大,这里不去描述改动的地方,但是它的改动确实比Thrift1方便了很多。但是不能理解的是Thrift2网上的资料和文档相当的少,就以Thrift2操作Hbase为例,Thrift2提供的crud操作主要有Put, Get, Delete, Scan和Increment,网上及官网上对其使用也比较简单,对于实现一些复杂的操作无从下手,面对这么囧的状况,没办法,只能去研究源码了。通过研究源码知道了Put, Get, Delete, Scan和Increment下一些复杂操作的使用,现以get为例进行描述,其他的都和get相似。

先看hbase_types.js中TGet:

 1 TGet = module.exports.TGet = function(args) {
 2   this.row = null;
 3   this.columns = null;
 4   this.timestamp = null;
 5   this.timeRange = null;
 6   this.maxVersions = null;
 7   this.filterString = null;
 8   this.attributes = null;
 9   if (args) {
10     if (args.row !== undefined) {
11       this.row = args.row;
12     }
13     if (args.columns !== undefined) {
14       this.columns = args.columns;
15     }
16     if (args.timestamp !== undefined) {
17       this.timestamp = args.timestamp;
18     }
19     if (args.timeRange !== undefined) {
20       this.timeRange = args.timeRange;
21     }
22     if (args.maxVersions !== undefined) {
23       this.maxVersions = args.maxVersions;
24     }
25     if (args.filterString !== undefined) {
26       this.filterString = args.filterString;
27     }
28     if (args.attributes !== undefined) {
29       this.attributes = args.attributes;
30     }
31   }
32 };

THBase_Severce.js中get部分代码如下:

 1 THBaseService_get_args = function(args) {
 2   this.table = null;
 3   this.get = null;
 4   if (args) {
 5     if (args.table !== undefined) {
 6       this.table = args.table;
 7     }
 8     if (args.get !== undefined) {
 9       this.get = args.get;
10     }
11   }
12 };

由以上的部分源码可知,使用get要用到TGet,TGet中有7个参数,分别为row、columns、timestamp、timeRange、maxVersions、filterString、attributes。

如果只是简单的在Hbase取某一行的数据,代码如下:

 1 var thrift = require(‘thrift‘);
 2 var HBase = require(‘./gen-nodejs/THBaseService‘);
 3 var HBaseTypes = require(‘./gen-nodejs/hbase_types‘);
 4
 5 var connection = thrift.createConnection(‘localhost‘, 9090, {
 6   transport: thrift.TFramedTransport,
 7   protocol: thrift.TBinaryProtocol
 8 });
 9
10 connection.on(‘connect‘, function () {
11   console.log(‘connected‘);
12   var client = thrift.createClient(HBase, connection);
13
14
15   var tGet = new HBaseTypes.TGet({row: ‘10_20121208‘,
16     columns: [new HBaseTypes.TColumn({family: ‘DATA‘})]});
17   client.get(‘tablename‘, tGet, function (err, data) {
18     if (err) {
19       console.log(err);
20     } else {
21       console.log(data);
22     }
23     connection.end();
24   });
25
26 });
27
28 connection.on(‘error‘, function(err){
29   console.log(‘error‘, err);
30 });

当然如果想对输出数据的个数加以限制的话,可以通过maxVersions的值来设定,这里就不解释了。但是对于复杂的情况,例如我想查询指定时间戳范围内的data,该怎么办?

方法就会用到timeRange参数,至于timeRange的形式如何写就要看源码了,经过调试,最终timeRange的使用方法的代码实现如下:

 1 var thrift = require(‘thrift‘);
 2 var HBase = require(‘./gen-nodejs/THBaseService‘);
 3 var HBaseTypes = require(‘./gen-nodejs/hbase_types‘);
 4
 5 var connection = thrift.createConnection(‘localhost‘, 9090, {
 6   transport: thrift.TFramedTransport,
 7   protocol: thrift.TBinaryProtocol
 8 });
 9
10 connection.on(‘connect‘, function () {
11   console.log(‘connected‘);
12   var client = thrift.createClient(HBase, connection);
13
14
15  var tGet = new HBaseTypes.TGet({row: ‘10_20121002‘,
16                 columns: [new HBaseTypes.TColumn({family: ‘PLATE‘})],
17                 timeRange: new HBaseTypes.TTimeRange({minStamp:1349138457,maxStamp:1349153466 })
18                });
19         client.get(‘rdga_by_ymd‘, tGet, function (err, data) {
20     if (err) {
21       console.log(err);
22     } else {
23       console.log(data);
24     }
25     connection.end();
26   });
27
28 });
29
30 connection.on(‘error‘, function(err){
31   console.log(‘error‘, err);
32 });

其他的参数的使用方法可通过上述介绍的方法看源码就可以很快的写出相应的形式,希望上述介绍的方法能帮到你,欢迎转载,转载请注明出处http://www.cnblogs.com/cocos2014/p/4539092.html。

时间: 2024-12-23 14:53:43

Thrift 2中get用法的详细解析的相关文章

linux中的压缩命令详细解析(二)

我们在<Linux中的压缩命令详细解析(一)>中已经讲解了常见的三种压缩命令,下面我们开始讲解工作中最常用到的tar命令. 为了使压缩和解压缩变得简单,tar命令就应运而生了.那么究竟该如何使用呢? tar.gz格式: 压缩命令: tar -zcvf 压缩文件名 源文件名 举例: 把abc文件压缩成后缀为tar.gz格式的文件 tar -zcvf abc.tar.gz abc 解压缩命令: 举例:解压缩abc.tar.gz文件 tar -zxvf abc.tar.gz tar.bz2格式: 压

iOS中中UIView头文件详细解析

@interface UIView : UIResponder<NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem> /** *  通过一个frame来初始化一个UI控件 */ - (id)initWithFrame:(CGRect)frame; // YES:能够跟用户进行交互 @property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteraction

linux中的压缩命令详细解析(一)

我们在Linux中最常用到的有关压缩的命令,我们知道下面介绍的5种就完全足够了. 它们的格式分别是:*.zip  *.gz  *.bz2  *.tar.gz  *.tar.bz2 OK,言归正传,我们一个一个来介绍: (1)*.zip格式 这里强调一点:*.zip格式可以与Windows上的该格式文件通用,换句话说就是Windows上的zip格式压缩文件可以在Linux上解压. 压缩文件命令:zip 压缩文件名 源文件名 举例:我的/root目录下有一个abc文件,下面把abc文件压缩成一个压缩

vuex中的辅助函数mapMutations详细解析

mapMutations是vuex的mutation的辅助函数,用于在组件中映射mutation内的方法,以便在该组件中直接使用mutation里的方法 (说白了,就是一语法糖) 1.在组件中导入vuex中的mapMutations: import { mapMutations } from 'vuex' 2.在组件中导入mutation里的方法名: ...mapMutations([ //使用es6的拓展运算符 'INCREASE_SHOPCART', 'DECREASE_SHOPCART'

【转】UML中的几种关系详细解析

UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务.一个类可以有多种职责,设计得好的类一般只有一种职责,在定义类的时候,将类的职责分解成为类的属性和操作(即方法). 3) 类的属性即类的数据职责,类的操作即类的行为职责 一.依赖关系(Dependence) 依

如何在App中实现朋友圈功能之五点赞、评论属性详细解析——箭扣科技Arrownock

如何在App中实现朋友圈功能 之五 点赞.评论属性详细解析 快速查看评论和点赞数量: 当我们创建一个墙贴后,这个墙贴会自动带有评论数量commentCount.赞数量likeCount.讨厌数量dislikeCount三个属性. 当有用户对这个墙贴进行了评论,该墙贴的commentCount属性会自动增长,无需开发者来手动操作实现. 如果用户建立的Like中like=true,那么likeCount会自动增长,反之,dislikeCount会自动增长. 如果用户把评论删除了,或者是把点赞撤销了,

详细的SQL中datediff用法

DATEDIFF 函数 [日期和时间] 功能返回两个日期之间的间隔. 语法DATEDIFF ( date-part, date-expression-1, date-expression-2 ) date-part :year | quarter | month | week | day | hour | minute | second | millisecond 参数date-part 指定要测量其间隔的日期部分. 有关日期部分的详细信息,请参见日期部分. date-expression-1

Android AsyncTask 详细解析

结构 继承关系 public abstract class AsyncTask extends Object java.lang.Object android.os.AsyncTask<Params, Progress, Result> 类概述 AsyncTask能够适当地.简单地用于 UI线程. 这个类不需要操作线程(Thread)就可以完成后台操作将结果返回UI. 异步任务的定义是一个在后台线程上运行,其结果是在 UI线程上发布的计算. 异步任务被定义成三种泛型类型: Params,Pro

详细解析BluetoothAdapter的详细api

(1)开关状态值 (2)扫描状态值 (3)蓝牙操作接收的广播 (4)蓝牙操作请求的广播 (5)附加域 (6)错误码 (1)获取蓝牙适配器 (2)获取state状态方法 (3)蓝牙是否可用 (4)打开蓝牙 (5)关闭蓝牙 (1)开始扫描 (2)是否在扫描中 (3)取消查找 (4)获取扫描模式 (1)检查蓝牙地址 (2)获取本地蓝牙地址 (3)获取本地蓝牙名称 (4)获取绑定的蓝牙集合 (5)获取远程蓝牙设备 (6)创建监听 这篇文章将会详细解析BluetoothAdapter的详细api, 包括隐