本文介绍如何使用存储引擎Beam。

注意事项

  • 仅存储弹性模式v7.0.x版本支持Beam存储引擎。

  • Beam存储引擎在存储弹性模式v7.0.6.2版本中结束公测正式上线,该版本修复了公测中的问题,建议您尽快升级到v7.0.6.2及以上版本。

创建Beam表

使用Beam引擎创建表,需要在SQL语句中指定USING beam配置项。例如,创建一个名为test的Beam表。

CREATE TABLE test(a INT, b INT) 
USING beam 
DISTRIBUTED BY (a);
说明

默认情况下,Beam表会对所有的列使用LZ4 9级压缩。

指定排序键

您可以通过指定排序键的方式来指定数据的物理聚集方式。同时Beam会对指定的排序键和主键列收集最大(Max)或最小(Min)信息,从而加速包含排序键过滤条件的查询。 例如,SQL语句中包含sale_date='20230715'的条件,则数据基于sale_date列排序会获得额外的性能收益。

您可以在ORDER BY子句中指定一个或多个排序键。Beam表会在后台自动对数据基于排序键进行重排序优化。

示例

创建带排序建的Beam表。

CREATE TABLE beam_example (
    id integer,
    name text,
    ftime timestamp
) 
USING beam 
DISTRIBUTED BY (id) 
ORDER BY(id);

向Beam表中写入10000000行数据,并带排序键过滤条件查询。

INSERT INTO beam_example 
SELECT r, md5((r*random())::text), now() + interval '1 seconds' *(r*random())::int 
FROM generate_series(1,10000000)r;
SELECT * FROM beam_example WHERE id = 100000;

指定压缩算法

Beam支持多种压缩算法,您可以根据实际业务需要选择不同的压缩算法。Beam支持ZSTD、LZ4、AUTO和GDICT压缩算法。默认使用LZ4 1级压缩,以提供在大部分场景下更优的解压性能。

ZSTD

如果您期望获得更高的压缩比,可以使用ZSTD压缩算法,但其压缩和解压性能较弱于LZ4。

LZ4

拥有极高的压缩和解压性能,但是会损失一部分压缩率。

AUTO

AUTO是Beam自研的自适应的压缩算法。对于数值列,根据数据的Layout提供相对于通用压缩算法更高的压缩比和更高的压缩、解压效率。对于其他类型,则使用LZ4通用压缩算法进行压缩。

GDICT

GDICT是Beam自研的全局字典编码。GDICT在低基数列(小于256个值),可以提供极致的压缩比和解压性能。同时支持过滤条件下推,在特定的场景下,相对于通用压缩算法可以获得最高100X的扫描性能提升。

示例

创建一个压缩算法为ZSTD 9级压缩的Beam表。

CREATE TABLE beam_example (
    id integer,
    name text,
    ftime timestamp
) USING beam  
WITH(compresstype='zstd',  compresslevel=9) ;

Auto Optimize

当您的Beam表有多次写入、更新或删除操作时,随着时间的推移,表中会存在大量的过期数据,从而导致扫描性能下降。Auto Optimize是后台的数据优化进程,会自动对您的Beam表进行过期数据回收,小文件合并和数据按照排序键聚集操作,从而保障查询性能。一般情况下,该操作都会由后台进程自动完成,您也可以通过OPTIMIZE beam_example;命令手动触发Optimize。