03 · 本体数据映射实现

目标:建立「本体概念 ↔ 现有表字段」的映射(mapsTo),把语义层桥接到账单表/维度表。

1. 映射设计

本体管语义,现有表管数据,mapsTo 是桥:

本体概念(GMV)    ──mapsTo──>  账单表字段(dwd_bill.bill_amount)
维度成员(华东区) ──mapsTo──>  维度表字段值(dim_region.region_group='华东区')

2. 映射表结构(DDL)

CREATE TABLE ontology_mapping (
    mapping_id   BIGINT COMMENT '映射ID',
    onto_concept STRING COMMENT '本体概念IRI(如 :GMV)',
    concept_type STRING COMMENT '类型:metric/dimension/measure',
    table_name   STRING COMMENT '物理表名',
    column_name  STRING COMMENT '物理字段名',
    filter_expr  STRING COMMENT '口径过滤表达式',
    calc_expr    STRING COMMENT '计算表达式'
) COMMENT '本体到现有表的映射';

3. 映射示例数据(映射到现有账单表)

onto_concept concept_type table_name column_name calc_expr filter_expr
:GMV metric dwd_bill bill_amount SUM(bill_amount) status='paid' AND refunded=false
:订单数 metric dwd_bill bill_count SUM(bill_count) status='paid'
:客单价 metric dwd_bill - SUM(bill_amount)/SUM(bill_count) status='paid' AND refunded=false
:地区 dimension dwd_bill region_id - -
:大区 dimension dim_region region_group - -

4. 映射实现方式

4.1 本体内嵌(MVP 推荐)

映射直接写在本体文件里(02 文档的 :mapsToColumn "dwd_bill.bill_amount"),推理时一起加载。语义 + 映射一处维护,简单。

4.2 独立映射表(生产推荐)

映射存关系表,本体只管语义。映射变更不用动本体,适合指标多、映射频繁调整的场景。

5. 查询时的映射使用

① 本体推理:识别用户问的是「GMV」(等价推理:成交额≡GMV)
② 读映射:查 ontology_mapping,拿到 table_name/column_name/calc_expr/filter_expr
③ 生成 SQL:用映射信息 + 维度展开结果拼 SQL

6. 关键注意