Doris中宽表和高表有哪些使用场景?

提问者:Rae 问题分类:面试刷题
Doris中宽表和高表有哪些使用场景?
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属地:
我来回答