访问AP模式列存表

更新时间:
复制为 MD 格式

云原生多模数据库 Lindorm计算引擎OLAP资源组支持访问湖模式列存数据、AP模式列存数据和宽表引擎数据三种数据源。本文主要介绍如何创建AP模式列存表。

根据数据的存储方式,可以分为主键表和明细表两种类型:

  • 明细表:保留所有导入记录,允许主键重复。用户可完整查询历史数据,每条记录与原始数据一一对应。

  • 主键表:强制主键唯一性约束,禁止重复主键。新导入数据会覆盖相同主键的旧记录,确保每个主键仅存最新版本。

创建明细表

仅需在CREATE TABLE语句中定义列和列的数据类型,即可创建一张表。

CREATE TABLE user_access (
    uid int,
    name varchar(64),
    age int, 
    phone varchar(16),
    last_access datetime,
    credits double
)
ORDER BY (uid, name);

在上述建表示例中,创建的是明细表,该表的数据不具有任何约束,允许主键重复(即相同数据行可能多次出现)。同时,指定前两列为排序列,构成排序键;数据按此排序键排序后存储,可显著提升查询时的索引效率,实现快速数据检索。

创建主键表

主键表的核心优势是支持实时数据更新和高效复杂即席查询,在实时分析业务中采用主键表,能实时处理最新数据指导决策,消除 T+1 数据延迟限制。只需在CREATE TABLE语句中使用PRIMARY KEY 定义主键,即可创建主键表。

CREATE TABLE orders1 (
    order_id bigint NOT NULL,
    dt date NOT NULL,
    user_id INT NOT NULL,
    good_id INT NOT NULL,
    cnt int NOT NULL,
    revenue int NOT NULL
)
PRIMARY KEY (order_id)
DISTRIBUTED BY HASH (order_id)
;

主键表仅支持哈希分桶策略,建表时必须通过 DISTRIBUTED BY HASH() 指定哈希分桶键。

实际业务中,通常会结合数据分布、排序键等功能提升查询效率与数据管理能力。主键表将主键与排序键解耦,用户可根据高频查询条件灵活设计排序键。例如经常按订单日期(dt)和商户ID(merchant_id)查询销售数据时,可通过 ORDER BY (dt,merchant_id) 设置排序键,显著提升范围查询效率。

数据分布

建表时,用户可以通过设置合理的分区和分桶,实现数据均匀分布和查询性能提升。数据均匀分布是指数据按照一定规则划分为子集,并且均衡地分布在不同节点上。查询时能够有效裁剪数据扫描量,最大限度地利用集群的并发性能,从而提升查询性能。

分区

分区用于将数据划分成不同的区间,主要作用是将一张表按照分区键拆分成不同的管理单元。

建表时使用PARTITION BY子句指定,支持指定按一个或多个列的值分区,或者基于表达式计算结果的分区。

分桶

一个分区按分桶方式被分成了多个桶(bucket),每个桶的数据称之为一个 tablet。

分桶方式:支持随机分桶和哈希分桶。通过建表时使用DISTRIBUTED BY来指定。

  • 随机分桶:建表或新增分区时无需设置分桶键。在同一分区内,数据随机分布到不同的分桶中。

  • 哈希分桶:建表和新增分区时需要指定分桶键。在同一分区内,数据按照分桶键划分分桶后,所有分桶键的值相同的行会唯一分配到对应的一个分桶。

分桶数量默认由系统自动设定,无需手动配置。

使用示例

CREATE TABLE t_recharge_detail1 (
    id bigint,
    user_id bigint,
    recharge_money decimal(32,2), 
    city varchar(20) not null,
    dt varchar(20) not null
)
DUPLICATE KEY(id)
PARTITION BY dt,city
DISTRIBUTED BY HASH(`id`);

上述建表语句说明了按(日期、城市)对表进行分区,然后按 id 列进行哈希分桶。