2 个回答
doris高表适用于前导为实时ETL,模型变动较快,如当日有新增属性标签, 纵表模型避免了做schema change相对灵活 缺点:难以命中物化视图,建表时也需要考虑数据倾斜相关难点。示例如下:
-- 用户基础表
CREATE TABLE users (
user_id BIGINT,
base_info JSON COMMENT'基础信息(年龄、性别等)',
update_time DATETIME
)
ENGINE=OLAP
PRIMARY KEY(user_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 32;
-- 标签倒排表
CREATE TABLE tag_inverted_index (
tag_type STRING COMMENT'标签类型(如gender/city)',
tag_value STRING COMMENT'标签值(如male/beijing)',
user_bitmap BITMAP COMMENT'用户集合BITMAP'
)
ENGINE=OLAP
PRIMARY KEY(tag_type, tag_value)
DISTRIBUTED BY HASH(tag_type) BUCKETS 32
PROPERTIES (
"persistent"="true"
);
发布于:3周前 (04-07) IP属地:
doris宽表主要适用于前导流程为离线ETL,模型相对固定可以基于宽表模型构建物化视图,加速圈选查询效率另外宽表模型,对于基于UID查用户明细,应对高并发场景也比较友好,示例如下:
CREATE TABLE user_tags (
user_id BIGINT COMMENT'用户ID',
-- 基础标签
age SMINT COMMENT'年龄',
gender STRING COMMENT'性别',
city_code INT COMMENT'城市编码',
-- 兴趣标签(BITMAP存储多值)
sports_tags BITMAP COMMENT'运动兴趣标签(1:篮球, 2:足球...)',
-- 消费特征(JSON存储动态属性)
consumption JSON COMMENT'{"level":"high", "brand_pref":["Nike","Adidas"]}',
-- 更新时间
update_time DATETIME DEFAULT CURRENT_TIMESTAMP
)
ENGINE=OLAP
PRIMARY KEY(user_id) -- 主键模型支持实时更新
DISTRIBUTED BY HASH(user_id) BUCKETS 32
PARTITION BY RANGE(update_time)(
START ('2024-01-01') END ('2025-01-01') EVERY (INTERVAL 1 MONTH)
PROPERTIES (
"replication_num"="3",
"enable_persistent_index"="true"
);
发布于:3周前 (04-07) IP属地:
我来回答
您需要 登录 后回答此问题!