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,本来周末打算写几篇博客的,但是 ...
随机推荐
- PS Web切图界面设置
界面为移动工具时(快捷键V),选中左上角的图层. 点击视图,选中显示→智能参考线,与标尺. 点击窗口,把"库" "颜色"去掉,把屏幕右上角的"通道&q ...
- webform文件的上传
文件上传 (控件:Fileupload) --文件映射:Server.MapPath(path)(相 对转绝对路径)--保存到指定路径:Fileupload.SaveAs 例子:点击按钮,获取上传图片 ...
- An exception occurred while acquiring a poolable resource. Will retry.
我的是mysql-connector-java-5.1.20.jar加到lib下面就行了.或者在pom中加入配置也行.
- DataRow循环取出
string strName = null; DataRow dRow = DB.GetDataRow(Sql语句); if (null != dRow) { foreach (DataRow ite ...
- 在VPS上搭建SS访问火星
前段时间发布了Visual Studio 2017 RC,由于现在VS没有离线的ISO了,只有一个在线安装文件.虽然可以通过这个在线安装文件生成完整的离线安装包(之前的ISO版本在安装过程中仍然需要联 ...
- poi批量导入excel文件
package com.practice.util; import java.io.File; import java.io.FileInputStream; import java.io.FileN ...
- git命令解析
一 常用命令 1..gitignore 文件为git忽略文件,例*.[oa] *.~ 为忽略.a或.o或.~结尾的文件./表示忽略目录,!表示反取, *表示匹配零个或者多个字符.?表示匹配一个字符. ...
- 利用BeautifulSoup抓取新浪网页新闻的内容
第一次写的小爬虫,python确实功能很强大,二十来行的代码抓取内容并存储为一个txt文本 直接上代码 #coding = 'utf-8' import requests from bs4 impor ...
- NSMutableAttributedString 的使用
NSMutableAttributedString *msAttriStr = [[NSMutableAttributedString alloc] initWithString:[NSString ...
- 邮件中继成畅邮标配 U-Mail为何领先
中国力推“一带一路”战略,为首成立“亚投行”,越来越多的中国企业酝酿走出去.在企业间的商务往来中,电子邮件将扮演着重要角色,但是因为要跨洋 过海,各国互联网环境和法律法规有所区别,面临着种种变数,对方 ...