联 系 我 们
售前咨询
售后咨询
微信关注:星环科技服务号
更多联系方式 >
4.2.1 Hyperbase SQL DDL
更新时间:9/2/2024, 10:48:41 AM

Hyperbase SQL 中的 DDL(Data Definition Language)包含:

创建表:CREATE

由前文介绍可知,hbase 表有内外表之分,两者的建表语句也存在一定的差别,下面将分别介绍:

注意,在建较大表时,需要预分 region 。建议 1 个 region 分 3.5G 数据。

创建内表:CREATE TABLE

语法:建 hbase 内表

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 表的固定写法 。

② 可选项,指定新建表和实际 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 sql desc
图 33. 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 sql desc ex
图 34. 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 的元数据信息,确认是否添加成功。如下图:

hbase sql col
图 35. 查看 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;
复制