lindorm-cli除支持以MySQL/Avatica协议以SQL方式访问宽表引擎外,还提供了HBase兼容模式:通过hbase://连接宽表引擎后,可以使用一组熟悉的HBase Shell命令(create、put、get、scan、describe等)进行建表、插入、查询等数据操作。本文介绍如何使用lindorm-cli以HBase模式连接并使用Lindorm宽表引擎。
前提条件
使用场景
大多数场景下,我们都建议您优先通过MySQL协议(或Avatica协议)以SQL方式访问宽表引擎:SQL方式支持完整的宽表能力(二级索引、多列查询、聚合、分页等),生态与工具链也更丰富。
仅当您处于以下场景时,才建议使用HBase模式访问宽表引擎:
宽表引擎中的表与数据是从HBase开源版本中迁移过来的:原有业务的表和数据是存在开源版本的HBase中,现在表和数据通过LTS等工具迁移到了Lindorm宽表引擎中。
已有HBase使用习惯或存量脚本:您已熟悉HBase Shell命令语法(
create/put/get/scan/describe等),希望直接沿用这些命令操作宽表引擎,而不必改写为SQL。需要执行HBase风格的表管理操作:例如按列族设置属性、管理namespace等。
连接方法
使用hbase://<host>:<port>格式的URL连接宽表引擎(hbase://前缀不可省略):
./lindorm-cli -url "hbase://<host>:30020" -username <用户名>其中hbase://<host>:<port>为宽表引擎"使用HBase Java API访问"的连接地址(可在控制台数据库连接 > 宽表引擎页获取);HBase模式仅要求用户名,密码可选,如需鉴权可通过-password或环境变量LINDORM_PASSWORD传入。连接成功后即可在交互界面输入HBase命令。
更多连接方式与参数(包括Windows下的连接、connect子命令等),请参见通过Lindorm-cli连接并使用宽表引擎。
HBase命令不以分号;结尾,单条命令直接回车执行;退出交互界面使用exit或quit。也可使用非交互模式(-execute)直接执行单条命令:
lindorm-cli -url "hbase://<host>:30020" -username <用户名> -execute "list"命令参考
lindorm-cli在HBase模式下支持一组HBase Shell命令子集,按DDL/DML读/DML写/Namespace四类分组。您可随时在交互界面输入help查看全部命令,或help '<命令名>'查看单个命令的详细用法。
数据定义语言(DDL)
list:展示所有表,可选正则表达式过滤表名。create:创建表(至少指定一个列族)。describe(别名desc):展示指定表的详细信息,包括表属性、列族结构等。exists:验证表是否存在。disable:禁用表(使表离线,无法读写)。enable:启用表(使表重新上线)。alter:修改表或列族属性。drop:删除指定表(需先disable)。
数据操作语言(DML)
put:写入或更新特定单元格中的值。get:获取指定行或单元格的内容。delete:删除表中单元格的值(单个版本)。deleteall:删除指定行、列族或列的所有单元格。scan:扫描并返回表数据。count:计算并返回表中的行数。
Namespace命令
create_namespace:创建命名空间。list_namespace:列出所有命名空间。drop_namespace:删除命名空间(同时删除其下所有表)。
操作参考
以下示例均以交互式输入为主;在非交互模式下,将命令作为-execute的参数值传入即可。
建表并插入数据
创建表。创建时必须输入表和列族的名称。
# 创建一个名称为 test、列族名为 cf 的表 create 'test', 'cf'也可以在建表时以Hash形式为列族指定属性(如版本数VERSIONS):
create 'test', {NAME => 'cf', VERSIONS => 3}插入数据。
put 'test', 'row1', 'cf:a', 'value1' put 'test', 'row2', 'cf:b', 'value2' put 'test', 'row3', 'cf:c', 'value3'其中
row1为表test的Rowkey,cf:a表示列族名与列名,value1为值。put还可携带可选的时间戳(版本号),例如put 'test','row1','cf:a','value2', 1735689600000。
查询
查询所有表的信息。支持使用正则表达式过滤表名。
list list 'test' list 't.*'查询指定表的数据(scan)。scan可用于扫描全表或查询固定范围的数据。
scan 'test'在默认(table)格式下,返回采用HBase原生风格(
ROW/COLUMN+CELL两列):ROW COLUMN+CELL row1 column=cf:a, timestamp=1735689600000, value=value1 row2 column=cf:b, timestamp=1735689600000, value=value2 row3 column=cf:c, timestamp=1735689600000, value=value3 3 row(s) in 0.0230 secondsscan支持以Hash形式指定扫描属性,例如起止行键、限制行数与过滤器:
scan 'test', {STARTROW => 'row1', STOPROW => 'row3', LIMIT => 100} scan 'test', {FILTER => "PrefixFilter('row')"}查询表的单条数据(get)。
get 'test', 'row1'在默认(table)格式下,返回
COLUMN/CELL两列:COLUMN CELL cf:a timestamp=1735689600000, value=value1 1 row(s) in 0.0350 seconds可携带Hash属性只读取指定列:
get 'test', 'row1', {COLUMN => 'cf:a'}。统计行数(count)。
count 'test'说明get/scan在-format json下,每个单元格渲染为一行,固定字段为row_key/column_family/qualifier/timestamp/value,便于程序解析。行数限制可通过-max-rows控制(对scan有效)。
查看表结构(describe)
describe 'test'在默认(table)格式下,describe按列族聚合为HBase原生风格输出。
禁用和启用表
如果要对一张表执行删除、修改设置或其他操作,请先使用disable命令禁用这张表;完成后再使用enable命令重新启用。
disable 'test'
enable 'test'删除表
删除指定表(需先禁用):
disable 'test'
drop 'test'常用配置参考
可通过alter命令为表或列族调整常用配置。
# 为列族设置数据压缩算法
alter 'test', {NAME => 'cf', COMPRESSION => 'ZSTD'}
# 为列族设置版本数
alter 'test', {NAME => 'cf', VERSIONS => 5}
# 为列族设置数据有效期TTL(单位秒,2592000 秒 = 30 天)
alter 'test', {NAME => 'cf', TTL => 2592000}修改后可通过describe 'test'验证是否生效。
alter与其他破坏性命令在开启-safe-mode时会被拦截(见下文安全模式),需要时请在不开启安全模式的会话中执行。
输出格式与常用参数
HBase模式复用lindorm-cli的通用输出格式与安全能力,可通过以下参数控制(参数完整说明请参见通过Lindorm-cli连接并使用宽表引擎的命令行参数与子命令):
参数 | 说明 |
| 输出格式,支持 |
| 限制客户端返回的最大行数,对 |
| 开启安全模式,拦截破坏性命令。 |
| 在原生table风格下将非可打印字节渲染为 |
| 将非交互模式的执行结果输出到指定文件。 |
示例:以JSON格式安全扫描并限制行数:
lindorm-cli -url "hbase://<host>:30020" -username user -format json -safe-mode -max-rows 1000 -execute "scan 'test'"安全模式
在HBase模式下开启-safe-mode后,客户端会在命令执行前拦截以下破坏性命令,避免误操作:
拦截的命令 | 说明 |
| 禁用表 |
| 删除表 |
| 清空表 |
| 修改表/列族(可能携带列族删除,整条拦截) |
| 删除单版本单元格 |
| 删除整行/列族/列 |
| 删除命名空间 |
lindorm-cli -url "hbase://<host>:30020" -username user -safe-mode -execute "drop 'test'"
#output: Operation [DROP] is forbidden by --safe-modeput / create / enable / create_namespace等非破坏性命令不受拦截。
常见问题
Q:HBase模式下为何提示无法连接宽表引擎?
A:请确认:
lindorm-cli版本为2.4.0及以上。
URL严格为
hbase://<host>:<port>且hbase://前缀未省略。使用的是控制台中使用HBase Java API访问的连接地址。
Lindorm宽表引擎的版本是否是2.4以后的版本。
Q:为什么读到的数据是乱码?
A:请确认目标表是通过HBase API / HBase Shell创建的。请勿使用HBase模式访问基于SQL创建的宽表;若需访问SQL宽表,请使用MySQL / Avatica协议。