关于Kimball维度建模中Behavior Tag Time Series概念的技术咨询
行为标签时间序列(Behavior Tag Time Series)实战示例
场景:电商平台客户月度行为标签
假设你是电商数据仓库开发人员,平台每月会基于用户过去30天的浏览、下单、收藏行为,通过聚类分析生成文本型行为标签,常见标签比如:
价格敏感型:频繁浏览优惠券、仅购买促销商品潮流追逐者:优先下单新品、关注网红同款囤货达人:一次性采购大量日用品、定期补货佛系浏览者:仅偶尔打开APP,无固定消费规律
标签时间序列的生成
每个用户每月会得到1个专属标签,随着时间推移,就形成了该用户的行为标签时间序列。比如用户ID为U00123的标签序列:
2024-01: 价格敏感型
2024-02: 价格敏感型
2024-03: 潮流追逐者
2024-04: 囤货达人
数据仓库中的存储设计(位置化建模)
按照书中的建议,我们会把这个序列拆成位置属性存储在客户维度表中,同时可选存储完整的标签序列字符串,示例表结构如下:
| 客户ID | 标签_202401 | 标签_202402 | 标签_202403 | 标签_202404 | 完整标签序列字符串 |
|---|---|---|---|---|---|
| U00123 | 价格敏感型 | 价格敏感型 | 潮流追逐者 | 囤货达人 | 202401:价格敏感型,202402:价格敏感型,202403:潮流追逐者,202404:囤货达人 |
| U00456 | 佛系浏览者 | 价格敏感型 | 价格敏感型 | 价格敏感型 | 202401:佛系浏览者,202402:价格敏感型,202403:价格敏感型,202404:价格敏感型 |
为什么采用位置化设计?
因为我们的核心查询需求大多是基于标签的条件筛选,而非数值计算:
- 例1:筛选2024年2-4月连续3个月都是
价格敏感型的用户SELECT 客户ID FROM 客户维度表 WHERE 标签_202402 = '价格敏感型' AND 标签_202403 = '价格敏感型' AND 标签_202404 = '价格敏感型'; - 例2:筛选2024年1月是
佛系浏览者,之后转为价格敏感型的用户SELECT 客户ID FROM 客户维度表 WHERE 标签_202401 = '佛系浏览者' AND 标签_202402 = '价格敏感型';
如果仅把标签序列存在单个字符串字段中,查询时需要做字符串分割、正则匹配,效率会大幅降低,尤其不适合高并发查询场景。位置化设计让每个时间点的标签成为独立字段,能直接用等值条件快速筛选。
补充说明
- 当时间跨度变长时,可以按季度/年度分组扩展字段,比如
标签_2024Q1_1(2024年第一季度第一个月),避免字段数量过多。 - 完整标签序列字符串主要用于回溯历史完整路径,或导出给业务人员做人工分析,并非核心查询字段。
内容的提问来源于stack exchange,提问作者cloudscomputes
相关产品推荐
相关产品推荐

