FIELD_MAPPING.md 4.73 KB

数据库字段映射说明

实际表结构

根据检查结果,实际的表结构如下:

sensors_events 表(用户行为事件表)

代码中使用的字段 实际字段名 说明
user_id anonymous_id 匿名用户ID
item_id item_id 商品ID
event_type event 事件类型
create_time create_time 创建时间
platform business_platform 业务平台
client_platform client_platform 客户端平台

不存在的字段

  • country - 国家字段(原计划支持,但表中不存在)
  • customer_type - 客户类型字段(原计划支持,但表中不存在)

其他可用字段

  • ip - IP地址
  • item_type - 商品类型
  • location_src - 位置来源
  • search_content - 搜索内容
  • page_type - 页面类型
  • session_id - 会话ID

prd_goods_sku 表(商品SKU表)

代码中使用的字段 实际字段名 说明
item_id id 商品ID
item_name name 商品名称
item_create_time create_time 商品创建时间

不存在的字段

  • category_level2_id - 二级分类ID
  • category_level3_id - 三级分类ID

其他可用字段

  • goods_id - 关联商品主表ID
  • buyer_id - 买家ID
  • factory_no - 工厂编号
  • package_type_name - 包装类型名称
  • on_sell_time - 上架时间
  • price_base - 基础价格

当前支持的维度

基于实际表结构,当前代码支持以下维度:

单维度

  1. platform - 业务平台(business_platform)
  2. client_platform - 客户端平台
  3. country - 国家(字段不存在)
  4. customer_type - 客户类型(字段不存在)
  5. category_level2 - 二级分类(字段不存在)
  6. category_level3 - 三级分类(字段不存在)

组合维度

  1. platform_client - 业务平台 + 客户端平台

列表类型

  1. hot - 热门商品
  2. cart - 加购商品
  3. new - 新品

如何扩展更多维度

方案1: 使用现有字段

可以考虑使用表中已有的其他字段来扩展维度:

# 在 interest_aggregation.py 的 SQL 查询中添加
sql_query = f"""
SELECT 
    ...
    se.page_type,           # 页面类型
    se.item_type,           # 商品类型
    pgs.package_type_name,  # 包装类型
    ...
"""

# 在聚合函数中添加新维度
if pd.notna(row.get('page_type')):
    key = f"page_type:{row['page_type']}"
    aggregations[key][item_id] += weight

if pd.notna(row.get('item_type')):
    key = f"item_type:{row['item_type']}"
    aggregations[key][item_id] += weight

方案2: 关联其他表获取分类信息

如果分类信息在其他表中,可以通过 JOIN 获取:

sql_query = f"""
SELECT 
    se.anonymous_id AS user_id,
    se.item_id,
    ...
    gc.category_level2_id,
    gc.category_level3_id
FROM 
    sensors_events se
LEFT JOIN prd_goods_sku pgs ON se.item_id = pgs.id
LEFT JOIN goods_category gc ON pgs.goods_id = gc.goods_id  # 假设有这个表
...
"""

方案3: 从 JSON 字段提取

如果 __properties 字段包含额外信息,可以解析JSON:

# 在查询中
sql_query = f"""
SELECT 
    ...
    se.__properties as properties_json
...
"""

# 在处理时
import json
props = json.loads(row.get('properties_json', '{}'))
if 'country' in props:
    key = f"country:{props['country']}"
    aggregations[key][item_id] += weight

推荐的实际使用维度

基于现有字段,建议使用以下维度组合:

  1. 业务平台维度 - platform:{business_platform}

    • 示例:platform:pc, platform:mobile
  2. 客户端平台维度 - client_platform:{client_platform}

    • 示例:client_platform:web, client_platform:app
  3. 页面类型维度 - page_type:{page_type} (需添加)

    • 示例:page_type:detail, page_type:list
  4. 商品类型维度 - item_type:{item_type} (需添加)

    • 示例:item_type:normal, item_type:special

更新后的输出示例

# 实际可用的索引键
platform:pc                          → 12345:98.5,23456:87.3,...
platform:mobile                      → 34567:76.2,45678:65.1,...
client_platform:web                  → 56789:54.3,67890:43.2,...
client_platform:app                  → 78901:32.1,89012:21.0,...
platform_client:pc_web               → 90123:123.4,01234:112.3,...

总结

  1. 已实现: 基于 business_platformclient_platform 的索引
  2. 未实现: country、customer_type、分类相关索引(因字段不存在)
  3. 可扩展: page_type、item_type 等其他维度

如需支持更多维度,请参考上述方案进行扩展。