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:

 TGet = module.exports.TGet = function(args) {
this.row = null;
this.columns = null;
this.timestamp = null;
this.timeRange = null;
this.maxVersions = null;
this.filterString = null;
this.attributes = null;
if (args) {
if (args.row !== undefined) {
this.row = args.row;
}
if (args.columns !== undefined) {
this.columns = args.columns;
}
if (args.timestamp !== undefined) {
this.timestamp = args.timestamp;
}
if (args.timeRange !== undefined) {
this.timeRange = args.timeRange;
}
if (args.maxVersions !== undefined) {
this.maxVersions = args.maxVersions;
}
if (args.filterString !== undefined) {
this.filterString = args.filterString;
}
if (args.attributes !== undefined) {
this.attributes = args.attributes;
}
}
};

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

 THBaseService_get_args = function(args) {
this.table = null;
this.get = null;
if (args) {
if (args.table !== undefined) {
this.table = args.table;
}
if (args.get !== undefined) {
this.get = args.get;
}
}
};

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

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

 var thrift = require('thrift');
var HBase = require('./gen-nodejs/THBaseService');
var HBaseTypes = require('./gen-nodejs/hbase_types'); var connection = thrift.createConnection('localhost', 9090, {
transport: thrift.TFramedTransport,
protocol: thrift.TBinaryProtocol
}); connection.on('connect', function () {
console.log('connected');
var client = thrift.createClient(HBase, connection); var tGet = new HBaseTypes.TGet({row: '10_20121208',
columns: [new HBaseTypes.TColumn({family: 'DATA'})]});
client.get('tablename', tGet, function (err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
}
connection.end();
}); }); connection.on('error', function(err){
console.log('error', err);
});

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

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

 var thrift = require('thrift');
var HBase = require('./gen-nodejs/THBaseService');
var HBaseTypes = require('./gen-nodejs/hbase_types'); var connection = thrift.createConnection('localhost', 9090, {
transport: thrift.TFramedTransport,
protocol: thrift.TBinaryProtocol
}); connection.on('connect', function () {
console.log('connected');
var client = thrift.createClient(HBase, connection); var tGet = new HBaseTypes.TGet({row: '10_20121002',
columns: [new HBaseTypes.TColumn({family: 'PLATE'})],
timeRange: new HBaseTypes.TTimeRange({minStamp:1349138457,maxStamp:1349153466 })
});
client.get('rdga_by_ymd', tGet, function (err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
}
connection.end();
}); }); connection.on('error', function(err){
console.log('error', err);
});

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

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

  1. MyBatis框架中的条件查询!关键字exists用法的详细解析

    exists用法 exists: 如果括号内子查询语句返回结果不为空,说明where条件成立,就会执行主SQL语句 如果括号内子查询语句返回结果为空,说明where条件不成立,就不会执行主SQL语句 ...

  2. Redis 中 redis.conf配置详细解析

    ########################################### 基本配置 ##################################### # 端口 port 666 ...

  3. JDK中线程池参详细解析

    在jdk中为我们提供了三种创建线程池的方式,但是在阿里的编码规范里面都是明确禁止使用这三种api去创建线程池,推荐我们去自定义线程池.为什么? 要回答为什么,我们需要明白创建线程池时,各参数的作用: ...

  4. MVC中HtmlHelper用法大全参考

    MVC中HtmlHelper用法大全参考 解析MVC中HtmlHelper控件7个大类中各个控件的主要使用方法(1) 2012-02-27 16:25 HtmlHelper类在命令System.Web ...

  5. Intent的详细解析以及用法

    Intent的详细解析以及用法      Android的四大组件分别为Activity .Service.BroadcastReceiver(广播接收器).ContentProvider(内容提供者 ...

  6. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  7. 在PHP中使用CURL,“撩”服务器只需几行——php curl详细解析和常见大坑

    在PHP中使用CURL,"撩"服务器只需几行--php curl详细解析和常见大坑 七夕啦,作为开发,妹子没得撩就"撩"下服务器吧,妹子有得撩的同学那就左拥妹子 ...

  8. PHP中使用CURL之php curl详细解析和常见大坑

    这篇文章主要介绍了PHP中使用CURL之php curl详细解析和常见大坑 ,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 七夕啦,作为开发,妹子没得撩就“撩”下服务器吧,妹子有得撩的同学 ...

  9. Thrift之代码生成器Compiler原理及源码详细解析1

    我的新浪微博:http://weibo.com/freshairbrucewoo. 欢迎大家相互交流,共同提高技术. 又很久没有写博客了,最近忙着研究GlusterFS,本来周末打算写几篇博客的,但是 ...

随机推荐

  1. excel 作图中次横坐标及次纵坐标的调试,以及excel自定义轴标签的步骤方法

    在工作中除了要做一些常用的图表之外,不时还会有一切奇怪图表的制作需求. 今天的内容主要记录的是如何对excle图表的次横坐标及次纵坐标进行调试,以及如何自定义调整轴标签 首先看下如何做次纵坐标,工作中 ...

  2. Ubuntu实现wifi热点

    系统:Ubuntu14.04 方法一: 打开网络连接,新建wifi,设置SSID和密码,完成设置后保存,再连接到隐藏的wifi,选择刚建立好的连接即可 优点:简单方便 缺点:建立的是Ad-hoc模式信 ...

  3. idea 显示行号

    File->Settings->Editor->General->Appearence->Show Line Number 选中之后"Apply",然 ...

  4. IP转换hash以及返回

    InetAddress address = InetAddress.getByName("127.0.0.1"); System.out.println(address); int ...

  5. PLC M8000 M8001 M8002 M8003

  6. Linux和windows之间通过scp复制文件

    Windows是不支持ssh协议的 需要安装WinSSHD 安装以及设置过程如下: BvSshServer(原名winsshd)官方下载页在这里:https://www.bitvise.com/dow ...

  7. 如何在一台电脑上开启多个tomcat

    大家基本上都只在一台电脑上面启动一个Tomcat,而启动多个Tomcat会提示报错等相关故障.而假如调试负载均衡及集群的时候,需要在一台电脑上面开启多个Tomcat,那么怎么开启呢? 首先需要知道的是 ...

  8. mobx源码解读4

    这节介绍一下mobx的变动因子的稳定性. mobx整个系统是由ObservableValue, ComputedValue, Reaction这三个东西构建的 ObservableValue 是最小的 ...

  9. CSS特殊性值

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. gulp 学习笔记 (初识)

    根据极客学院入门视频整理 一.gulp介绍,主要提到了gulp是基于流式来管理运行的,目前完全搞不懂这一套专业术语. 二.gulp的安装使用. 1.首先需要在全局环境下安装gulp npm insta ...