一、表概述
·行:每一行代表一条记录,包含了一组相关联的数据。
·列:列定义了一条记录所包含的属性。
二、表类型
StarRocks 提供四种类型的表,包括主键表(Primary Key table)、明细表(Duplicate key table)、聚合表(Aggregate table)和更新表(Unique Key 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);
四、明细表
明细表是默认创建的表类型。如果在建表时未指定任何 key,默认创建的是明细表。建表时支持定义排序键。如果查询的过滤条件包含排序键,则 StarRocks 能够快速地过滤数据,提高查询效率。这篇以示例来介绍使用方法。更多详细信息,请参考文档 明细表。
— 建表时将 event_time 和 event_type 作为排序键CREATE TABLE detail ( event_time DATETIME NOT NULL COMMENT "datetime of event", event_type INT NOT NULL COMMENT "type of event", user_id INT COMMENT "id of user", device_code INT COMMENT "device code", channel INT COMMENT "")ORDER BY (event_time, event_type);
五、聚合表
建表时可以定义聚合键并且为 value 列指定聚合函数。当多条数据具有相同的聚合键时,value 列会进行聚合。并且支持单独定义排序键,如果查询的过滤条件包含排序键,则 StarRocks 能够快速地过滤数据,提高查询效率。这篇以示例来介绍使用方法。更多详细信息,请参考文档 聚合表。
— 建表时将 site_id、 date 和 city_code 作为聚合键– 将访问次数 pv 作为 value 列,并为 value 列 pv 指定聚合函数为 SUMCREATE TABLE aggregate_tbl ( site_id LARGEINT NOT NULL COMMENT "id of site", date DATE NOT NULL COMMENT "time of event", city_code VARCHAR(20) COMMENT "city_code of user", pv BIGINT SUM DEFAULT "0" COMMENT "total page views")AGGREGATE KEY(site_id, date, city_code)DISTRIBUTED BY HASH(site_id);
六、更新表
建表时需要定义唯一键。当多条数据具有相同的唯一键时,value 列会进行 REPLACE,查询时返回唯一键相同的一组数据中的最新数据。并且支持单独定义排序键,如果查询的过滤条件包含排序键,则 StarRocks 能够快速地过滤数据,提高查询效率。这篇以示例来介绍使用方法。更多详细信息,请参考文档 更新表。
— 建表时将常用的过滤字段作为指标列CREATE TABLE orders ( create_time DATE NOT NULL COMMENT "create time of an order", order_id BIGINT NOT NULL COMMENT "id of an order", order_state INT COMMENT "state of an order", total_price BIGINT COMMENT "price of an order")UNIQUE KEY(create_time, order_id)DISTRIBUTED BY HASH(order_id);