CREATE TABLE <tableName> ( <key> <data_type>, <column1> <data_type>, <column2> <data_type>, ... ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' ① [WITH SERDEPROPERTIES('hbase.columns.mapping'=':key,<f1:c1>,<f1:c2>,...')] ② [TBLPROPERTIES ("hbase.table.name" = "<hbase_table>")]; ③
复制
Hyperbase SQL 中的 DDL(Data Definition Language)包含:
创建表:CREATE
由前文介绍可知,hbase 表有内外表之分,两者的建表语句也存在一定的差别,下面将分别介绍:
注意,在建较大表时,需要预分 region 。建议 1 个 region 分 3.5G 数据。 |
创建内表:CREATE TABLE
语法:建 hbase 内表
① 指定表使用的存储格式。建 Hyperbase 表的固定写法 。
② 可选项,指定新建表和实际 Hyperbase 表列的映射关系,推荐使用默认映射关系(内表映射)。具体参数含义见 建 hbase 外表语法 。
③ 可选项,指定映射表对应的 Hyperbase 表的名称,该表名需不存在,推荐使用默认值即 tableName。
示例:创建了一张名为 "hbase_inner_table" 的 Hyperbase 内表,存储格式为 HBaseStorageHandler。
create table hbase_inner_table( key1 string, bi bigint, dc decimal(10,2), ch varchar(10), ts timestamp, en string )STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler';
复制
hbase 表支持的数据类型
hbase 表支持的数据类型包括: BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, DATE, TIMESTAMP, FLOAT, DOUBLE, STRING, VARCHAR, DECIMAL 和 STRUCT。所有数据类型映射在实际 Hyperbase 表中的类型都是 byte[]。 具体数据类型的相关介绍请参考《 Inceptor 使用手册》。 |
建表后可通过 DESCRIBE FORMATTED 查看 hbase_inner_table 的元数据信息,确认是否创建成功。如下:
示例:查看元数据信息
describe formatted hbase_inner_table;
复制

由上图可见,hbase_inner_table 表的列名、数据类型、映射关系等等。
创建外表:CREATE EXTERNAL TABLE
语法:建 Hyperbase 外表
CREATE EXTERNAL TABLE <tableName> ( <key> <data_type>, <column> <data_type>, <column> <data_type>, ... ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES('hbase.columns.mapping'=':key,<f:q1>,<f:q2>,...') ① TBLPROPERTIES ("hbase.table.name" = "<hbase_table>"); ②
复制
① 必选项,建外表时必须定义映射表和 Hyperbase 表列之间的映射关系。映射表第一项:key 为固定写法,剩余项为 <column_family>:<column_qualifier> 的自定义组合。
② 必选项,TBLPROPERTIES 中的 hbase.table.name 属性定义映射表对应的 Hyperbase 表的表名。hbase_table 必须为 Hyperbase 中一个已存在的表名。
示例:建 Hyperbase 外表
CREATE EXTERNAL TABLE hbase_external_table( key1 string, ex1 double, ex3 date, ex5 string ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,f:q1,f:q4,f:q5") ① TBLPROPERTIES ("hbase.table.name"="test.hbase_inner_table"); ②
复制
① 指定外表 hbase_external_table 中的列与源表的映射关系。映射时数据类型强行转换,转换失败则为 NULL。
② 指定外表 hbase_external_table 和已存在的 hbase_inner_table 表的列映射关系。
示例:查看元数据信息
describe formatted hbase_external_table;
复制

由上图可见,hbase_external_table 表的列名、数据类型、映射关系等等。
编辑表:ALTER
ALTER TABLE 只支持对 Hyperbase 内表操作,且仅支持为内表添加列:
-
添加列:ALTER TABLE … ADD COLUMNS
语法:添加列
ALTER TABLE <tableName> ADD COLUMNS (<column> <datat_type>, <column> <data_type>, ...);
复制
示例:为内表添加列,对表 "hbase_inner_table" 添加了一个数据类型为 boolean 列 "bl"。
ALTER TABLE hbase_inner_table ADD COLUMNS (bl boolean);
复制
添加列操作完成后,同样可以通过 DESCRIBE FORMATTED 查看 hbase_inner_table 的元数据信息,确认是否添加成功。如下图:

清空表:TRUNCATE
TRUNCATE TABLE 只支持对 Hyperbase 内表操作,可以清空表中的数据。具体语法如下:
语法:清空 Hyperbase 内表
TRUNCATE TABLE <tableName>;
复制
将表中数据全部删除,将表变为空表(不删除元数据)。
删除表:DROP
语法:删除 Hyperbase 内/外表
DROP TABLE <tableName>;
复制
删除 hbase 内外表的语法相同,但是具体的删除过程和作用不同,下面将分别举例介绍。
示例:删除外表 "hbase_external_table" ,只能删除源表在 Inceptor 中的映射关系,即外表的元数据信息,但源表中的数据不会被删除。
DROP TABLE hbase_external_table;
复制
示例:删除内表 "hbase_inner_table" ,会同时删除表的数据和元数据信息,表彻底不存在。
DROP TABLE hbase_inner_table;
复制