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:
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用法的详细解析的更多相关文章
- MyBatis框架中的条件查询!关键字exists用法的详细解析
exists用法 exists: 如果括号内子查询语句返回结果不为空,说明where条件成立,就会执行主SQL语句 如果括号内子查询语句返回结果为空,说明where条件不成立,就不会执行主SQL语句 ...
- Redis 中 redis.conf配置详细解析
########################################### 基本配置 ##################################### # 端口 port 666 ...
- JDK中线程池参详细解析
在jdk中为我们提供了三种创建线程池的方式,但是在阿里的编码规范里面都是明确禁止使用这三种api去创建线程池,推荐我们去自定义线程池.为什么? 要回答为什么,我们需要明白创建线程池时,各参数的作用: ...
- MVC中HtmlHelper用法大全参考
MVC中HtmlHelper用法大全参考 解析MVC中HtmlHelper控件7个大类中各个控件的主要使用方法(1) 2012-02-27 16:25 HtmlHelper类在命令System.Web ...
- Intent的详细解析以及用法
Intent的详细解析以及用法 Android的四大组件分别为Activity .Service.BroadcastReceiver(广播接收器).ContentProvider(内容提供者 ...
- 转:二十一、详细解析Java中抽象类和接口的区别
转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...
- 在PHP中使用CURL,“撩”服务器只需几行——php curl详细解析和常见大坑
在PHP中使用CURL,"撩"服务器只需几行--php curl详细解析和常见大坑 七夕啦,作为开发,妹子没得撩就"撩"下服务器吧,妹子有得撩的同学那就左拥妹子 ...
- PHP中使用CURL之php curl详细解析和常见大坑
这篇文章主要介绍了PHP中使用CURL之php curl详细解析和常见大坑 ,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 七夕啦,作为开发,妹子没得撩就“撩”下服务器吧,妹子有得撩的同学 ...
- Thrift之代码生成器Compiler原理及源码详细解析1
我的新浪微博:http://weibo.com/freshairbrucewoo. 欢迎大家相互交流,共同提高技术. 又很久没有写博客了,最近忙着研究GlusterFS,本来周末打算写几篇博客的,但是 ...
随机推荐
- Hive集成HBase;安装pig
Hive集成HBase 配置 将hive的lib/中的HBase.jar包用实际安装的Hbase的jar包替换掉 cd /opt/hive/lib/ ls hbase-0.94.2* rm -rf ...
- hibernate 注解 主键生成策略
一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue ...
- 时间服务器:NTP 服务器
15.1 关于时区与网络校时的通讯协议 使得每一部主机的时间同步化. DHCP 客户端/服务器端所需要的租约时间限制. 网络侦测时所需要注意的时间点.刚刚谈到的登录文件分析功能.具有相关性的主 ...
- PAMI 2010 Context-aware saliency detection
This is a highly-cited paper. The context aware saliency proposed based on four principles, which ca ...
- mysql5.7忘记密码
注意:mysql5.7 user表密码字段由password改为authentication_string 1.service mysql stop 2.mysqld_safe --skip-gran ...
- WCF Misconfiguration: Insufficient Audit Failure Handling
Abstract: The program is configured not to generate an exception when it fails to write to an audit ...
- {Reship}{原文}{资治通鉴}
this article came from here ================================================= 资治通鉴 (361人评分) 9.0 作者 ...
- hdu1540 Tunnel Warfare
Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- php基础上
建立站点 localhost /文件 www目录下 不能放 中文目录 php 支持的数据类型 int 整数 float 小数 string 字符 bool 布尔型 date 时间 ...
- #define 小知识
#define N 15 #define M 2+N #define W 2*M 问3*W的结果是多少? 结果为27: 知识点:define只能进行非常简单的运算,简单来说就是仅仅是将自身的值代入,而 ...