1. hbase如何实现group by和order by等的功能
Hbase是不支持条件查询、聚集操作和Order by查询的!
Hbase查询方式只有三种:根据主键,根据主键范围和全表。
2. hbase数据库查询命令有什么
您好,对于你的遇到的问题,我很高兴能为你提供帮助,我之前也遇到过哟,以下是我的个人看法,希望能帮助到你,若有错误,还望见谅!。展开全部
select
*
from
a
where
列名
<>0
--<>标示不等于
2.--not
in
select
*
from
a
where
列名
not
in(0)
--这样是用索
不用。
3.--子
where
select
*
from
a
where
a
not
in
(select
列名from
a
where
a
='1')非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!
3. Hbase shell查询命令 如何显示整张表的某一列限定符的内容
1.hadoop是分布式平台,就把计算和存储都由hadoop自动调节分布到接入的计算机单元中
2.hbase是hadoop上实现的kv数据库
3.hbase+hadoop无需再与mysql搭配了, 而且kv数据库与传统关系数据库区别很大
4.hadoop+hbase是分布式计算与分布式数据库存储的组合
5.增删查改都是真的hbase的,
4. hbase 多条件查询or 怎么过滤掉不需要查的列
hbase的region是按行划分,而非按列,如果你读取指定一行的所有列数据,regionServer虽然无法保证你的所有数据都在一个HFile中,但是至少是在一个Region中。但是具体的HFile所在的hdfs的节点那就不是HBase关心的事了,因为HBase的存储是依赖与hdfs,所以底层存储读取的事会由NameNode操心,NameNode会考虑就近原则,而提供最高效的数据读取策略。
你的数据传输是必然,但是HBase不会计算,计算是发生在你将想要的数据获取到之后再自行进行计算的。你读取大量数据必然会有大量数据传输,HBase只是将提供了一种高效的数据读取策略,尽量减小数据传输量
5. hbase查询,只能以行键为条件么
没办法,hbase只对行健做索引,且查询只能根据行健或者行健范围进行查询
6. 如何用hive查询hbase中的数据
第一步,启动hadoop,命令:./start-all.sh
第二步,启动hive,命令:
./hive --auxpath /home/dream-victor/hive-0.6.0/lib/hive_hbase-handler.jar,/home/dream-victor/hive-0.6.0/lib/hbase-0.20.3.jar,/home/dream-victor/hive-0.6.0/lib/zookeeper-3.2.2.jar -hiveconf hbase.master=127.0.0.1:60000
这里,-hiveconf hbase.master=指向自己在hbase-site.xml中hbase.master的值
第三步,启动hbase,命令:./start-hbase.sh
第四步,建立关联表,这里我们要查询的表在hbase中已经存在所以,使用CREATE EXTERNAL TABLE来建立,如下:
CREATE EXTERNAL TABLE hbase_table_2(key string, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "data:1")
TBLPROPERTIES("hbase.table.name" = "test");
�0�2hbase.columns.mapping指向对应的列族;多列时,data:1,data:2;多列族时,data1:1,data2:1;
�0�2hbase.table.name指向对应的表;
�0�2hbase_table_2(key string, value string),这个是关联表
我们看一下HBase中要查询的表的结构,
7. HBase中显示表的指令是
进入hbase shell命令界面:hbase shell
2. 查看表格:list
3. 查看所有命令:help
4. 创建表格(如果不记得命令格式 可以直接输入create 系统会给出提示和示例):create 'test','f1','f2','f3'
创建了一个表名为test 有f1 f2 f3三个列族的表
5. 查看表格结构信息:desc 'test'
8. HBase条件查询(多条件查询)
转 https://blog.csdn.net/PirateLeo/article/details/7956965
文中可能涉及到的API:
Hadoop/HDFS: http://hadoop.apache.org/common/docs/current/api/
HBase: http://hbase.apache.org/apidocs/index.html?overview-summary.html
Begin!
HBase的查询实现只提供两种方式:
1、按指定RowKey获取唯一一条记录,get方法(org.apache.hadoop.hbase.client.Get)
2、按指定的条件获取一批记录,scan方法(org.apache.hadoop.hbase.client.Scan)
实现条件查询功能使用的就是scan方式,scan在使用时有以下几点值得注意:
1、scan可以通过setCaching与setBatch方法提高速度(以空间换时间);
2、scan可以通过setStartRow与setEndRow来限定范围。范围越小,性能越高。
通过巧妙的RowKey设计使我们批量获取记录集合中的元素挨在一起(应该在同一个Region下),可以在遍历结果时获得很好的性能。
3、scan可以通过setFilter方法添加过滤器,这也是分页、多条件查询的基础。
下面举个形象的例子:
我们在表中存储的是文件信息,每个文件有5个属性:文件id(long,全局唯一)、创建时间(long)、文件名(String)、分类名(String)、所有者(User)。
我们可以输入的查询条件:文件创建时间区间(比如从20120901到20120914期间创建的文件),文件名(“中国好声音”),分类(“综艺”),所有者(“浙江卫视”)。
假设当前我们一共有如下文件:
内容列表
ID CreateTime Name Category UserID
1 20120902 中国好声音第1期 综艺 1
2 20120904 中国好声音第2期 综艺 1
3 20120906 中国好声音外卡赛 综艺 1
4 20120908 中国好声音第3期 综艺 1
5 20120910 中国好声音第4期 综艺 1
6 20120912 中国好声音选手采访 综艺花絮 2
7 20120914 中国好声音第5期 综艺 1
8 20120916 中国好声音录制花絮 综艺花絮 2
9 20120918 张玮独家专访 花絮 3
10 20120920 加多宝凉茶广告 综艺广告 4
这里UserID应该对应另一张User表,暂不列出。我们只需知道UserID的含义:
1代表 浙江卫视; 2代表 好声音剧组; 3代表 XX微博; 4代表 赞助商。
调用查询接口的时候将上述5个条件同时输入find(20120901,20121001,"中国好声音","综艺","浙江卫视")。
此时我们应该得到记录应该有第1、2、3、4、5、7条。第6条由于不属于“浙江卫视”应该不被选中。
我们在设计RowKey时可以这样做:采用UserID + CreateTime + FileID组成rowKey,这样既能满足多条件查询,又能有很快的查询速度。
需要注意以下几点:
1、每条记录的RowKey,每个字段都需要填充到相同长度。假如预期我们最多有10万量级的用户,则userID应该统一填充至6位,如000001,000002...
2、结尾添加全局唯一的FileID的用意也是使每个文件对应的记录全局唯一。避免当UserID与CreateTime相同时的两个不同文件记录相互覆盖。
按照这种RowKey存储上述文件记录,在HBase表中是下面的结构:
rowKey(userID 6 + time 8 + fileID 6) name category ....
00000120120902000001
00000120120904000002
00000120120906000003
00000120120908000004
00000120120910000005
00000120120914000007
00000220120912000006
00000220120916000008
00000320120918000009
00000420120920000010
怎样用这张表?
在建立一个scan对象后,我们setStartRow(00000120120901),setEndRow(00000120120914)。
这样,scan时只扫描userID=1的数据,且时间范围限定在这个指定的时间段内,满足了按用户以及按时间范围对结果的筛选。并且由于记录集中存储,性能很好。
然后使用SingleColumnValueFilter(org.apache.hadoop.hbase.filter.SingleColumnValueFilter),共4个,分别约束name的上下限,与category的上下限。满足按同时按文件名以及分类名的前缀匹配。
(注意:使用SingleColumnValueFilter会影响查询性能,在真正处理海量数据时会消耗很大的资源,且需要较长的时间。
在后续的博文中我将多举几种应用场景下rowKey的,可以满足简单条件下海量数据瞬时返回的查询功能)
如果需要分页还可以再加一个PageFilter限制返回记录的个数。
以上,我们完成了高性能的支持多条件查询的HBase表结构设计。
9. 如何获取hbase数据查询 语句
get命令和HTable类的get()方法用于从HBase表中读取数据。使用 get 命令,可以同时获取一行数据。它的语法如下:
get ’<table name>’,’row1’
下面的例子说明如何使用get命令。扫描emp表的第一行。
hbase(main):012:0> get 'emp', '1'
COLUMN CELL
personal : city timestamp=1417521848375, value=hyderabad
personal : name timestamp=1417521785385, value=ramu
professional: designation timestamp=1417521885277, value=manager
professional: salary timestamp=1417521903862, value=50000
4 row(s) in 0.0270 seconds
读取指定列
下面给出的是语法,使用get方法读取指定列。
hbase>get 'table name', ‘rowid’, {COLUMN => ‘column family:column name ’}
下面给出的示例,是用于读取HBase表中的特定列。
hbase(main):015:0> get 'emp', 'row1', {COLUMN=>'personal:name'}
COLUMN CELL
personal:name timestamp=1418035791555, value=raju
10. hbase如何根据某个列的值,查询出这个列的ro
刚才理解错了,你是要在C列显示对应A列的B列值,修改一下答案
在c列第一个单元格C1复制如下公式:
=VLOOKUP(A1,sheet1!$A$1:$B$n,2,0)
其中n为A列最后一个单元格行数
然后把B1向下填充到其他B列单元格,公示应该会自动变为
=VLOOKUP(A2,sheet1!$A$1:$B$n,2,0)
=VLOOKUP(A3,sheet1!$A$1:$B$n,2,0)
......
=VLOOKUP(An,sheet1!$A$1:$B$n,2,0)
这样应该可行,我没试验过你这种情况。你应该仔细看看VLOOKUP()这个函数的用法
下面是我给别人写的,不过对方说没看懂,你看看:
如果你有一个数据表,而另一个表格需要自动读取这个数据表内的数据,函数VLOOKUP()就很有用了。
下面简单说一下:
函数VLOOKUP()用法:
例子 公式如下
=VLOOKUP(F5,Sheet2!$F$4:$W$957,2,0)
其中第一个参数F5为查找值,即使用该公式的单元格内的数据是根据F5单元格内的数据查找出来的,例如你把姓名放在F列,其中F5是一个叫张三的人,G列是身份证号。G5要查找张三的身份证号,就可以在G5用函数VLOOKUP()
第二个参数是数据表,就是由哪一个数据表的哪几列数据为查找范围,【Sheet2!】就是数据表名,$F$4(F4)就是范围的左上角单元格,$W$957(W957)就是右下角单元格,查找范围就是在这个矩形内。其中F列数据必须是第一个参数F5的比照列,简单来说就是第一个参数F5的数值应该在查找的数据表的F列内。且F列必须是查找范围的第一个列该公式才起作用。举例你要查找张三,那么张三在Sheet2数据表查找范围内的所在列必须是查找范围内的第一列。F4写成$F$4是为了固定该单元格,否则在复制公式的时候excel会自动递加单元格数值,F4在复制的时候可能会变成F5、F6...,造成查找范围改变
第三个参数是列数,就是该函数返回的是第几列的数值,该列数是相对列数,即查找范围内的第几列。例如Sheet2工作表内的F列在整个表格内属于第6列,但在查找范围内的相对列数是第1列。假如张三的身份证在G列内,那么就是返回查找范围的第二列。
第四个参数是匹配条件,一般为0。
下面举一个具体使用的例子。
假设你有一个excel文件,里面的sheet1工作表记录的是单位人员姓名及人员身份证号,你现在需要创建一个新excel文件,记录单位人员的三险一金,里面需要输入人员的身份证号,如果再一个一个输入,重复劳动效率低不说,很有可能输错了,这时候你就可以从以前那个excel文件中读取这些人员的身份证号。
在新表中先输入人员姓名(如果你用人员序号作比对的话,姓名也可以自动读取),然后在需要输入身份证号的地方点击上面的【fx】,出现【插入函数】的对话框,在类别中选择【查找和引用】,最后一个就是VLOOKUP,选中它,点【确定】,然后出现【函数参数】对话框,【Lookup-value】为第一个参数,点击旁边的表格红箭头图标,选中新表中需要查找身份证号的那个人的姓名单元格;【table-array】为第二个参数,顾名思义是表格数组,包含行列的一个范围,就是查找范围,点击旁边表格红箭头图标,在老表sheet1中框选所有姓名和身份证号,保证老表中姓名在第一列;【col-index-num】为第三个参数,看看老表中身份证号在选择范围是第几列,就写上几。假如老表内身份证号紧跟着姓名,因为姓名列是范围内的第一列,那么身份证号就是第二列;【range-lookup】为第四个参数,写上0。全部弄好以后,回到新表看看身份证号是不是已经自动读出来了。如果没有一是查查这个人在老表中有没有,名字有没有空格,还有你选择的第三个参数列数对不对,注意有没有隐藏列,因为隐藏列虽然看不到,但是也计算在列数里面。如果没问题,将公示复制到所有需要读取身份证的单元格内。
这样有一个问题,因为你新表读取的是文件外的数据,所以必须保证老表文件位置不能变动,否则新表就不知道去哪里找数据了。解决方法有三个,一是保证老表文件位置永远不动(废话);二是在操作前先把老表数据复制到新表所在的文件内,单独作为一个sheet工作表存在,然后再查找新表复制后的数据,因为在同一个文件内,不用担心数据源丢失问题;三是不复制老表,新表读取数据后,选中读取的数据,点击【复制】,然后在原位置点击【选择性粘贴】,选中粘贴【数据】,这样公式会被公式读取的数据覆盖,就和数据源没有关系了。
还会遇到一个问题,如果老表没有数据,比如说老表内李四这个人当时就没有输入身份证号,那么新表内李四用公式查出来的身份证号并不是空,而是0,解决这个问题需要加一个if判断语句,如下:
=IF(你的公式=0,"",你的原公式)
还有就是,如果数据查找出错,会出现#N/A或者#VALUE,也可以用if语句取消,如下:
=IF(ISERROR(你的公式),"",你的公式)
不过不建议这样做,有错误提示才能知道去查找公式是不是有问题,公式没问题自然不会出现错误提示,没必要人为取消。