在开发调试,或者在生产运维过程中,往往需要去HBase中查询某条数据。除了使用了HBase shell来写Get、Scan请求。HBase增强版还在集群管理系统中提供了一个简单的SQL查询入口。用户可以使用熟悉的SQL语法来查询HBase的表。

从集群管理系统中的SQL查询页面可以进入数据查询系统。在使用前,先要选择要查询的表所在namespace。选中了namespace后,会在页面右边的树形结构中列出这个namespace里所有的表。点击表名可以显示这个表的schema,ROW代表RowKey,COL是预置的列名。用户可以方便地根据这个表的schema来构造select请求。

一个典型的SQL查询交互过程如下:

 首先选择一个namespace,例如'default'
 在页面右侧中查看您需要查询的表结构
 在编辑器中输入您的SQL
 点击上面的'执行'按钮,或者通过键盘输入  'contrl+enter'(Windows)/'command+return' (macOS) 来执行
 查看编辑器下方的结果表格,如果执行出错,在此处也可看见错误详情

页面操作过程如下图所示:

注意:集群管理系统的SQL查询页面不支持use namespace语法,只能通过左上角的namespace列表选择/切换namespace。

二、使用说明

在您执行SQL前,请您务必先阅读下面的几点重要说明,能有效解决您使用时可能遇到的问题或疑惑:

 本系统只支持 'SELECT' 查询语句,如果需要变更数据操作,需要通过命令行或者使用产品提供的api自行开发应用。
 为确保数据安全,本系统没次查询仅返回最多100条数据。
 对所有varbinary类型的字段进行条件查询时,必须使用HexCode编码的字符串作为value 。
 'ROW' 字段对应 HBase 的 rowkey,'ROW' 和 'qualifier' 都是 'varbinary' 类型,'qualifier' 如果不属于 family 'f', 则需要指定 family,例如: 'select `ROW`, q1, `f1:q2` from ...'。
 'ROW' 和 'COL' 是 SQL 保留字,查询时需要加反引号;'qualifier' 指定 family 时也需要加反引号。

三、Binary编码字符与HexCode编码字符的转换

HBase内部使用byte[]的形式存储数据,在SQL查询页中返回的查询结果中,varbinary 类型的字段以HBase BinaryString的编码形式展示的。

在varbinary类型的字段进行条件查询时(即 where 句中包含如 rowkey 等字段),必须使用HexCode编码的字符作为查询条件的value。例如:查询rowkey 为r1 据,则SQL查询中的 where子句应该写成 where rowkey='7321'(注:字符串r1的HexCode编码字符为7321)。

为方便用户在查询时进行编码转换,系统在SQL查询页面中提供了一个简单的转换工具,只需将您的Binary编码字符串输入转换框中,即可在SQL编辑器内看到该字符串相应的HexCode编码。详情如下图所示:

如果用户想查看HexCode编码的查询结果,可以勾选执行按钮后的HexString单选框,系统会将查询返回的结果中varbinary类型的字段都转为HexCode编码的字符串。详情如下图所示: