跳转至

附录 E · H&M 数据集

本附录正式介绍 TTD 端到端验证所用的 H&M 数据集:来源、表结构、选择理由、加载流程与语义平面映射。全书凡提及"在 H&M 数据集上验证"之处(如 第 1 章第 5 章第 10 章第 15 章),均以本附录为权威参照。


E.1 数据集来源与领域

TTD 使用 Kaggle 竞赛 H&M Personalized Fashion Recommendations 作为端到端验证基线。

属性 说明
领域 零售 / 时尚电商
来源方 H&M Group(53 个在线市场、约 4,850 家门店)
原始任务 基于客户历史购买记录,预测其未来 7 天将购买的商品
数据形态 交易流水 + 客户画像 + 商品属性 + 商品图片(多模态)
在 TTD 中的角色 不做商品推荐,而是作为 Agentic BI 的业务数据——用户用自然语言查询"GMV 趋势""销量 Top N""客户分群"等分析问题,TTD 生成并执行 SQL

TTD 任务与原始竞赛任务不同

原始竞赛是推荐系统任务(预测 article_id);TTD 把同一份数据当作 Agentic BI 的查询对象——关注的是"用户提问 → NL2SQL → 执行 → 可视化"的端到端链路,而非推荐准确率。数据集的选择是出于其表结构清晰、语义丰富、公开可复现,适合演示语义治理与四引擎 RAG。


E.2 表结构与规模

H&M 在 TTD 数据面中以 gold_hm schema 的三张表承载,对应一个经典的星型拓扑(1 事实表 + 2 维度表)。DDL 见 data-plane/sql/100_hm_create_schema.sql

E.2.1 gold_hm.dim_article(维度表 · 26 列)

商品主数据,描述每一件可售卖商品的颜色、类别、部门、外观等属性。

类型 说明
article_id VARCHAR(16) 商品唯一标识(主键,关联事实表)
product_code / prod_name VARCHAR(16) / TEXT 商品编码与名称
product_type_no / product_type_name INTEGER / VARCHAR(256) 商品类型
product_group_name VARCHAR(256) 商品分组
graphical_appearance_no / _name INTEGER / VARCHAR(256) 图案外观
colour_group_code / _name VARCHAR(8) / VARCHAR(128) 颜色组
perceived_colour_value_id / _name INTEGER / VARCHAR(128) 感知色值
perceived_colour_master_id / _name INTEGER / VARCHAR(128) 感知主色
department_no / department_name INTEGER / VARCHAR(256) 部门
index_code / index_name VARCHAR(8) / VARCHAR(256) 索引
index_group_no / index_group_name INTEGER / VARCHAR(256) 索引分组
section_no / section_name INTEGER / VARCHAR(256) 系列
garment_group_no / garment_group_name INTEGER / VARCHAR(256) 服装分组
detail_desc TEXT 商品文本描述(多模态:可用于 NLP)
image_url TEXT 商品图片地址(多模态:非全量商品有图)

E.2.2 gold_hm.dim_customer(维度表 · 7 列)

客户主数据,描述客户的人口统计与会员状态。

类型 说明
customer_id VARCHAR(64) 客户唯一标识(主键,关联事实表)
fn REAL 是否接收时尚新闻邮件(1=是)
active REAL 是否活跃(1=是)
club_member_status VARCHAR(32) 会员状态(ACTIVE / PRE-CREATE / LEFT CLUB)
fashion_news_frequency VARCHAR(32) 时尚新闻频率(Regularly/Monthly/None)
age SMALLINT 年龄(已匿名化分桶)
postal_code VARCHAR(128) 邮编(已脱敏哈希)

E.2.3 gold_hm.fact_transaction(事实表 · 5 列)

交易流水,每一行代表一次购买行为(同一客户同一天购买同一商品计为多行)。

类型 说明
t_dat DATE 交易日期(主时间列)
customer_id VARCHAR(64) 客户(外键 → dim_customer)
article_id VARCHAR(16) 商品(外键 → dim_article)
price DECIMAL(18,8) 价格(退货为负值)
sales_channel_id SMALLINT 销售渠道(1=线下门店,2=线上)

E.2.4 数据规模

下表数字为 Kaggle 官方公布量级,标注为"约"。实际加载规模取决于本地是否全量导入;TTD 不依赖固定行数运行。

数据集 约略规模 说明
transactions_train.csvfact_transaction ~31.8M 行 2018-09-20 至 2020-09-22 的交易
customers.csvdim_customer ~1.37M 行 客户画像
articles.csvdim_article ~105K 行 商品主数据
images/ ~105K 张 商品图片(非全量商品有图,按 article_id 前三位分子目录)

数据规模为设计目标语境

上述行数为 Kaggle 原始数据集量级,用于让读者建立规模直觉。TTD 尚未进行系统化的大规模数据性能实测;本地开发常以子集加载以降低资源占用。性能基准(不同数据量下的延迟与吞吐)见 第 16 章 路线图。


E.3 为何选择 H&M

选择理由 说明
单域、易理解 零售/时尚是大众熟悉的领域,读者无需领域知识即可理解"销量""GMV""退货率"等指标
经典星型拓扑 1 事实表 + 2 维度表,足以演示 join 路径规划(Steiner 树)与多表关联,又不至于过于复杂
含 Chasm Trap 风险 fact_transaction 通过 customer_id 与 article_id 同时关联两维度表,适合演示 第 6 章 的 aggregate-before-join 重写
多模态元数据 detail_desc(文本)与 image_url(图像)天然适合演示多模态 RAG 的扩展空间
公开可复现 Kaggle 公开数据集,任何读者都可下载并复现 TTD 的端到端流程

诚实声明:H&M 的局限

H&M 是一个小规模、单领域数据集(仅 3 表)。它能验证 TTD 的端到端链路完整性,但无法证明系统在跨行业、大规模 schema(几十上百张表)下的泛化能力。这是 TTD 当前最大的验证缺口之一,已在多处标记为改进项:


E.4 数据加载与列存镜像

H&M 数据通过两步进入数据面(详见 第 10 章):

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#e8f0fe','primaryTextColor':'#202124','primaryBorderColor':'#1a73e8','lineColor':'#5f6368','secondaryColor':'#e0f2f1','tertiaryColor':'#f8f9fa'}}}%%
flowchart LR
    CSV["Kaggle CSV<br/>transactions · customers<br/>articles"] -->|"COPY FROM STDIN<br/>load_hm_data.py"| SRC["gold_hm.*_src<br/>堆表(行存)"]
    SRC -->|"mooncake.create_table<br/>mirror · source"| MIRROR["gold_hm.*<br/>列存镜像<br/>pg_mooncake columnstore"]
    MIRROR -->|"OLAP 聚合查询<br/>SUM · COUNT · GROUP BY"| QUERY["用户 SQL 执行<br/>语义资产引用规范名<br/>与生产 Redshift 同表契约"]

    classDef bpProcess  fill:#e8f0fe,stroke:#1a73e8,stroke-width:2px,color:#202124
    classDef bpData     fill:#e0f2f1,stroke:#0d7377,stroke-width:2px,color:#202124
    classDef bpSuccess  fill:#e6f4ea,stroke:#1e8e3e,stroke-width:2px,color:#202124

    class CSV bpProcess
    class SRC bpData
    class MIRROR bpData
    class QUERY bpSuccess
  1. 源表 _src(行存堆表)load_hm_data.pyCOPY FROM STDIN 将 CSV 导入 dim_article_src / dim_customer_src / fact_transaction_src
  2. 列存镜像(canonical 名)CALL mooncake.create_table('gold_hm.dim_article', 'gold_hm.dim_article_src') 创建列存镜像,镜像使用规范名(无 _src 后缀)。
  3. 语义资产与生产共用规范名semantic-plane/ 的 YAML 资产和生产 Redshift 都引用 gold_hm.dim_article 等规范名——本地 pg_mooncake 镜像与生产 Redshift 共享同一表契约,仅方言不同。

列存镜像为何存在

OLAP 聚合查询(SUM/COUNT/GROUP BY)在列存上远快于行存——列存按列压缩、只读所需列、向量化执行。这正是 Redshift/Snowflake 等 OLAP 引擎的核心。pg_mooncake 在本地以 PG 扩展形式提供列存能力,使开发态无需 Redshift 即可获得接近的查询特征。详见 第 10 章 pg_mooncake 内部


E.5 与语义平面的映射

H&M 的三张 gold 表在语义平面(第 9 章)中被映射为完整的治理资产,位于 semantic-plane/domains/hm_fashion/。这是"三层治理模型"的具体实例:

语义资产类型 H&M 示例 数量(约) 说明
table_asset fact_transactiondim_articledim_customer 3 三张 gold 表各一份资产
column_asset pricet_datagesales_channel_id 38 26+7+5 列逐列定义业务名、语义类型、暴露策略
metric_asset transaction_countavg_transaction_priceunique_customer_count 5 预定义指标(含 SQL 定义、反例、相似指标)
business_term "GMV""销量""退货率""客单价"… 业务术语到列/指标的强路由映射(ADR-16
join_rule fact_transaction ⟕ dim_article ON article_id 3 事实表到两维度表的 join 规则(含基数、扇出风险)
business_rule "退货金额为负""客户年龄匿名化"等 7 H&M 数据集的业务约束
few_shot_example "上月销量 Top 10 商品" → SQL 供 Engine D / Prompt 参考的问答对
business_context "H&M 零售分析"领域上下文 限定分析范围的上下文边界

示例 metric 资产(semantic-plane/domains/hm_fashion/metrics/transaction_count.yaml):

# file: domains/hm_fashion/metrics/transaction_count.yaml
metric_asset:
  metric_id: "met_hm_transaction_count"
  metric_name: "Transaction Count"
  business_definition_zh: >
    交易次数,统计购买交易事实表中的总行数。每一行代表一次购买行为,
    同一客户同一天购买同一商品会被计为多次。
  business_definition_en: >
    Total number of purchase transactions. Each row in fact_transaction
    represents one purchase event.
  sql_definition: >
    SELECT COUNT(*)
    FROM gold_hm.fact_transaction
  default_grain: "daily"
  allowed_dimensions: ["t_dat", "sales_channel_id"]
  owner: "data-team@hm.com"
  certification_status: "certified"
  version: "1.0.0"
  counter_examples:
    - "交易次数  订单数,这里没有订单概念,一行就是一次购买行为"

这 8 类资产经语义层发布管道(Git YAML → pre-commit/CI 校验 → PR 审查 → S3 发布 → Backend 自动导入)进入数据面,供 第 5 章 的 R/V/G/D 四引擎检索。资产类型与校验 schema 详见 第 9 章


相关文档