Commit 9ebfd004ebd05dd7be27f0dc3a7bd3d001cbccdc
1 parent
12118125
offline tasks: mem optimize
Showing
8 changed files
with
3 additions
and
1542 deletions
Show diff stats
.gitignore
CONFIG_CHANGES_SUMMARY.md deleted
| ... | ... | @@ -1,213 +0,0 @@ |
| 1 | -# 配置优化总结 | |
| 2 | - | |
| 3 | -## ✅ 完成的改动 | |
| 4 | - | |
| 5 | -### 1. 配置集中化 | |
| 6 | - | |
| 7 | -**文件**: `offline_tasks/config/offline_config.py` | |
| 8 | - | |
| 9 | -新增默认参数配置: | |
| 10 | -```python | |
| 11 | -# 默认参数配置(用于调试和生产) | |
| 12 | -DEFAULT_LOOKBACK_DAYS = 30 # 默认回看天数(当前为30天,便于快速调试) | |
| 13 | -DEFAULT_RECENT_DAYS = 7 # 默认最近天数 | |
| 14 | -DEFAULT_I2I_TOP_N = 50 # 默认返回Top N个相似商品 | |
| 15 | -DEFAULT_INTEREST_TOP_N = 1000 # 默认每个key返回Top N个商品 | |
| 16 | -``` | |
| 17 | - | |
| 18 | -**好处**: | |
| 19 | -- ✅ 集中管理所有默认参数 | |
| 20 | -- ✅ 调试环境使用小数值(30天),快速验证 | |
| 21 | -- ✅ 生产环境只需修改配置文件一处 | |
| 22 | -- ✅ 所有脚本自动使用统一配置 | |
| 23 | - | |
| 24 | -### 2. 脚本更新 | |
| 25 | - | |
| 26 | -更新了所有脚本使用配置文件的默认值: | |
| 27 | - | |
| 28 | -| 脚本 | 更新内容 | | |
| 29 | -|------|---------| | |
| 30 | -| `i2i_swing.py` | 使用 `DEFAULT_LOOKBACK_DAYS`, `DEFAULT_I2I_TOP_N` | | |
| 31 | -| `i2i_session_w2v.py` | 使用 `DEFAULT_LOOKBACK_DAYS`, `DEFAULT_I2I_TOP_N` | | |
| 32 | -| `i2i_deepwalk.py` | 使用 `DEFAULT_LOOKBACK_DAYS`, `DEFAULT_I2I_TOP_N` | | |
| 33 | -| `i2i_content_similar.py` | 使用 `DEFAULT_I2I_TOP_N` | | |
| 34 | -| `interest_aggregation.py` | 使用 `DEFAULT_LOOKBACK_DAYS`, `DEFAULT_RECENT_DAYS`, `DEFAULT_INTEREST_TOP_N` | | |
| 35 | -| `run_all.py` | 使用所有默认配置 | | |
| 36 | - | |
| 37 | -### 3. .gitignore 文件 | |
| 38 | - | |
| 39 | -**文件**: `/home/tw/recommendation/.gitignore` | |
| 40 | - | |
| 41 | -忽略以下内容: | |
| 42 | -``` | |
| 43 | -# 数据文件 | |
| 44 | -*.txt (除了 requirements.txt, COMMANDS.txt) | |
| 45 | -*.csv | |
| 46 | -*.json | |
| 47 | -*.jsonl | |
| 48 | -*.parquet | |
| 49 | -*.pkl | |
| 50 | - | |
| 51 | -# 输出和临时文件 | |
| 52 | -output/ | |
| 53 | -logs/ | |
| 54 | -models/ | |
| 55 | -cache/ | |
| 56 | -tmp/ | |
| 57 | - | |
| 58 | -# Python 相关 | |
| 59 | -__pycache__/ | |
| 60 | -*.pyc | |
| 61 | -*.egg-info/ | |
| 62 | -venv/ | |
| 63 | - | |
| 64 | -# IDE 相关 | |
| 65 | -.vscode/ | |
| 66 | -.idea/ | |
| 67 | -.DS_Store | |
| 68 | -``` | |
| 69 | - | |
| 70 | -## 📊 使用对比 | |
| 71 | - | |
| 72 | -### 之前(硬编码) | |
| 73 | - | |
| 74 | -```bash | |
| 75 | -# 每次都要手动指定参数 | |
| 76 | -python3 run_all.py --lookback_days 30 --top_n 50 | |
| 77 | - | |
| 78 | -# 不同脚本的默认值不统一,容易混淆 | |
| 79 | -``` | |
| 80 | - | |
| 81 | -### 现在(配置化) | |
| 82 | - | |
| 83 | -```bash | |
| 84 | -# 使用配置文件的默认值(当前30天,调试快速) | |
| 85 | -python3 run_all.py | |
| 86 | - | |
| 87 | -# 临时覆盖(不修改配置文件) | |
| 88 | -python3 run_all.py --lookback_days 7 | |
| 89 | - | |
| 90 | -# 查看当前默认值 | |
| 91 | -python3 run_all.py --help | |
| 92 | -# 输出: --lookback_days (default: 30, adjust in offline_config.py) | |
| 93 | -``` | |
| 94 | - | |
| 95 | -## 🎯 调试与生产切换 | |
| 96 | - | |
| 97 | -### 当前配置(调试模式) | |
| 98 | - | |
| 99 | -```python | |
| 100 | -# config/offline_config.py | |
| 101 | -DEFAULT_LOOKBACK_DAYS = 30 # 30天,快速验证 | |
| 102 | -DEFAULT_RECENT_DAYS = 7 # 7天 | |
| 103 | -``` | |
| 104 | - | |
| 105 | -**运行效果**: | |
| 106 | -- 数据量小,运行快(30-60分钟) | |
| 107 | -- 内存占用低(2-4GB) | |
| 108 | -- 适合验证流程和参数调优 | |
| 109 | - | |
| 110 | -### 切换到生产(编辑配置文件) | |
| 111 | - | |
| 112 | -```python | |
| 113 | -# config/offline_config.py | |
| 114 | -DEFAULT_LOOKBACK_DAYS = 730 # 2年,更准确 | |
| 115 | -DEFAULT_RECENT_DAYS = 180 # 半年 | |
| 116 | -``` | |
| 117 | - | |
| 118 | -**运行效果**: | |
| 119 | -- 数据量大,推荐质量高 | |
| 120 | -- 运行时间长(6-10小时) | |
| 121 | -- 内存占用高(8-16GB) | |
| 122 | -- 适合生产环境 | |
| 123 | - | |
| 124 | -## 🚀 快速开始 | |
| 125 | - | |
| 126 | -### 第一步:快速验证(7天数据) | |
| 127 | - | |
| 128 | -```bash | |
| 129 | -cd /home/tw/recommendation/offline_tasks | |
| 130 | -python3 run_all.py --lookback_days 7 --top_n 10 | |
| 131 | -``` | |
| 132 | - | |
| 133 | -### 第二步:调试模式(使用默认30天) | |
| 134 | - | |
| 135 | -```bash | |
| 136 | -# 当前配置文件已设置为30天 | |
| 137 | -python3 run_all.py | |
| 138 | -``` | |
| 139 | - | |
| 140 | -### 第三步:生产模式 | |
| 141 | - | |
| 142 | -1. 编辑配置文件: | |
| 143 | -```bash | |
| 144 | -vim config/offline_config.py | |
| 145 | -# 修改: DEFAULT_LOOKBACK_DAYS = 730 | |
| 146 | -# 修改: DEFAULT_RECENT_DAYS = 180 | |
| 147 | -``` | |
| 148 | - | |
| 149 | -2. 运行: | |
| 150 | -```bash | |
| 151 | -python3 run_all.py | |
| 152 | -``` | |
| 153 | - | |
| 154 | -## 📝 新增文档 | |
| 155 | - | |
| 156 | -1. **UPDATE_CONFIG_GUIDE.md** - 配置调整详细指南 | |
| 157 | -2. **.gitignore** - Git忽略规则 | |
| 158 | - | |
| 159 | -## 🔍 验证配置 | |
| 160 | - | |
| 161 | -```bash | |
| 162 | -# 查看当前配置 | |
| 163 | -cd /home/tw/recommendation/offline_tasks | |
| 164 | -python3 -c "from config.offline_config import *; print(f'LOOKBACK_DAYS: {DEFAULT_LOOKBACK_DAYS}')" | |
| 165 | - | |
| 166 | -# 查看帮助 | |
| 167 | -python3 run_all.py --help | |
| 168 | -python3 scripts/i2i_swing.py --help | |
| 169 | -python3 scripts/interest_aggregation.py --help | |
| 170 | -``` | |
| 171 | - | |
| 172 | -## ✨ 主要优势 | |
| 173 | - | |
| 174 | -1. **集中管理** - 所有默认参数在一处配置 | |
| 175 | -2. **调试友好** - 默认使用小数据量,快速验证 | |
| 176 | -3. **灵活切换** - 调试/生产环境一键切换 | |
| 177 | -4. **参数透明** - help信息显示默认值来源 | |
| 178 | -5. **版本控制** - .gitignore防止数据文件被提交 | |
| 179 | - | |
| 180 | -## 📌 注意事项 | |
| 181 | - | |
| 182 | -1. **首次运行建议使用小数据量**: | |
| 183 | - ```bash | |
| 184 | - python3 run_all.py --lookback_days 7 | |
| 185 | - ``` | |
| 186 | - | |
| 187 | -2. **配置文件修改后立即生效**: | |
| 188 | - ```bash | |
| 189 | - # 修改 offline_config.py 后 | |
| 190 | - python3 run_all.py # 自动使用新配置 | |
| 191 | - ``` | |
| 192 | - | |
| 193 | -3. **临时参数不影响配置文件**: | |
| 194 | - ```bash | |
| 195 | - python3 run_all.py --lookback_days 100 # 仅本次有效 | |
| 196 | - ``` | |
| 197 | - | |
| 198 | -## 📅 更新日志 | |
| 199 | - | |
| 200 | -**日期**: 2025-10-16 | |
| 201 | -**版本**: v1.2 | |
| 202 | -**改动**: | |
| 203 | -- ✅ 新增默认参数配置(DEFAULT_LOOKBACK_DAYS=30) | |
| 204 | -- ✅ 更新所有6个脚本使用配置文件 | |
| 205 | -- ✅ 创建 .gitignore 忽略数据和临时文件 | |
| 206 | -- ✅ 新增配置调整指南文档 | |
| 207 | - | |
| 208 | ---- | |
| 209 | - | |
| 210 | -**配置文件**: `config/offline_config.py` | |
| 211 | -**当前默认**: 30天调试模式 | |
| 212 | -**生产建议**: 730天 | |
| 213 | -**状态**: ✅ 已完成并测试 |
DEBUG_IMPLEMENTATION_SUMMARY.md deleted
| ... | ... | @@ -1,255 +0,0 @@ |
| 1 | -# 🐛 Debug功能实现总结 | |
| 2 | - | |
| 3 | -## ✅ 完成情况 | |
| 4 | - | |
| 5 | -### 已实现 ✓ | |
| 6 | - | |
| 7 | -1. **Debug工具库** (`scripts/debug_utils.py`) - ✅ 完成 | |
| 8 | - - 369行完整实现 | |
| 9 | - - 7个核心函数 | |
| 10 | - - 支持日志、明文输出、数据统计 | |
| 11 | - | |
| 12 | -2. **配置更新** (`config/offline_config.py`) - ✅ 完成 | |
| 13 | - - 新增DEBUG_CONFIG配置段 | |
| 14 | - - 默认参数配置(DEFAULT_LOOKBACK_DAYS=30) | |
| 15 | - | |
| 16 | -3. **i2i_swing.py** - ✅ 完成 | |
| 17 | - - 完整debug日志 | |
| 18 | - - 明文索引输出 | |
| 19 | - - --debug参数支持 | |
| 20 | - | |
| 21 | -4. **run_all.py** - ✅ 完成 | |
| 22 | - - 支持--debug参数 | |
| 23 | - - 自动传递给所有子脚本 | |
| 24 | - | |
| 25 | -5. **文档** - ✅ 完成 | |
| 26 | - - DEBUG_GUIDE.md (完整使用指南) | |
| 27 | - - QUICK_DEBUG_SUMMARY.md (快速总结) | |
| 28 | - - UPDATE_CONFIG_GUIDE.md (配置调整指南) | |
| 29 | - | |
| 30 | -### 待实现(可选) | |
| 31 | - | |
| 32 | -其他4个脚本可以按需添加debug支持: | |
| 33 | -- i2i_session_w2v.py | |
| 34 | -- i2i_deepwalk.py | |
| 35 | -- i2i_content_similar.py | |
| 36 | -- interest_aggregation.py | |
| 37 | - | |
| 38 | -**实现模式**:与i2i_swing.py相同,只需: | |
| 39 | -1. 导入debug_utils | |
| 40 | -2. 添加--debug参数 | |
| 41 | -3. 调用log函数记录关键信息 | |
| 42 | -4. 生成明文文件 | |
| 43 | - | |
| 44 | -## 🎯 核心功能 | |
| 45 | - | |
| 46 | -### 1. 详细日志 | |
| 47 | - | |
| 48 | -```python | |
| 49 | -# 自动记录的信息: | |
| 50 | -✓ 算法参数(alpha, top_n, lookback_days等) | |
| 51 | -✓ SQL查询和数据获取(行数、时间范围) | |
| 52 | -✓ DataFrame详情(列名、类型、缺失值、统计) | |
| 53 | -✓ 行为类型分布(百分比) | |
| 54 | -✓ 用户/商品数量统计 | |
| 55 | -✓ 处理进度(每N条/每N个商品) | |
| 56 | -✓ 中间结果采样(Top3展示) | |
| 57 | -✓ 每个步骤耗时 | |
| 58 | -✓ 相似度分布统计(min/max/avg) | |
| 59 | -``` | |
| 60 | - | |
| 61 | -### 2. 明文索引 | |
| 62 | - | |
| 63 | -``` | |
| 64 | -ID全部带名称,格式清晰: | |
| 65 | - | |
| 66 | -[1] i2i:swing:12345(香蕉干) | |
| 67 | --------------------------------------------------------------------------------- | |
| 68 | - 1. ID:67890(芒果干) - Score:0.8567 | |
| 69 | - 2. ID:11223(菠萝干) - Score:0.7234 | |
| 70 | - 3. ID:44556(苹果干) - Score:0.6891 | |
| 71 | - | |
| 72 | -[2] interest:hot:category_level2:200(水果类) | |
| 73 | --------------------------------------------------------------------------------- | |
| 74 | - 1. ID:12345(香蕉干) | |
| 75 | - 2. ID:67890(芒果干) | |
| 76 | - 3. ID:11223(菠萝干) | |
| 77 | -``` | |
| 78 | - | |
| 79 | -### 3. 名称映射 | |
| 80 | - | |
| 81 | -自动从数据库获取: | |
| 82 | -- 商品名称 (prd_goods_sku.name) | |
| 83 | -- 分类名称 (prd_category.name) | |
| 84 | -- 供应商名称 (sup_supplier.name) | |
| 85 | -- 平台名称(硬编码映射) | |
| 86 | - | |
| 87 | -## 📊 使用示例 | |
| 88 | - | |
| 89 | -### 基础使用 | |
| 90 | - | |
| 91 | -```bash | |
| 92 | -# 单个脚本debug | |
| 93 | -python3 scripts/i2i_swing.py --lookback_days 7 --top_n 10 --debug | |
| 94 | - | |
| 95 | -# 所有任务debug | |
| 96 | -python3 run_all.py --lookback_days 7 --top_n 10 --debug | |
| 97 | -``` | |
| 98 | - | |
| 99 | -### 输出位置 | |
| 100 | - | |
| 101 | -``` | |
| 102 | -offline_tasks/ | |
| 103 | -├── logs/debug/ | |
| 104 | -│ └── i2i_swing_20251016_193000.log # 详细日志 | |
| 105 | -└── output/debug/ | |
| 106 | - └── i2i_swing_20251016_readable.txt # 明文索引 | |
| 107 | -``` | |
| 108 | - | |
| 109 | -### 查看输出 | |
| 110 | - | |
| 111 | -```bash | |
| 112 | -# 实时查看日志 | |
| 113 | -tail -f logs/debug/i2i_swing_*.log | |
| 114 | - | |
| 115 | -# 查看明文索引 | |
| 116 | -less output/debug/i2i_swing_*_readable.txt | |
| 117 | - | |
| 118 | -# 搜索特定商品 | |
| 119 | -grep "香蕉干" output/debug/*_readable.txt -A 5 | |
| 120 | -``` | |
| 121 | - | |
| 122 | -## 🔧 技术实现 | |
| 123 | - | |
| 124 | -### Debug Logger | |
| 125 | - | |
| 126 | -```python | |
| 127 | -from offline_tasks.scripts.debug_utils import setup_debug_logger | |
| 128 | - | |
| 129 | -# 自动设置: | |
| 130 | -logger = setup_debug_logger('script_name', debug=True) | |
| 131 | -# - DEBUG级别 | |
| 132 | -# - 控制台 + 文件双输出 | |
| 133 | -# - 彩色格式化 | |
| 134 | -``` | |
| 135 | - | |
| 136 | -### 数据统计 | |
| 137 | - | |
| 138 | -```python | |
| 139 | -from offline_tasks.scripts.debug_utils import log_dataframe_info | |
| 140 | - | |
| 141 | -# 自动记录: | |
| 142 | -log_dataframe_info(logger, df, "数据名称", sample_size=10) | |
| 143 | -# - 行列数 | |
| 144 | -# - 数据类型 | |
| 145 | -# - 缺失值 | |
| 146 | -# - 采样数据 | |
| 147 | -# - 数值统计 | |
| 148 | -``` | |
| 149 | - | |
| 150 | -### 明文输出 | |
| 151 | - | |
| 152 | -```python | |
| 153 | -from offline_tasks.scripts.debug_utils import ( | |
| 154 | - save_readable_index, fetch_name_mappings | |
| 155 | -) | |
| 156 | - | |
| 157 | -# 获取名称映射 | |
| 158 | -name_mappings = fetch_name_mappings(engine, debug=True) | |
| 159 | - | |
| 160 | -# 保存明文文件 | |
| 161 | -readable_file = save_readable_index( | |
| 162 | - output_file, | |
| 163 | - index_data, | |
| 164 | - name_mappings, | |
| 165 | - description="算法描述" | |
| 166 | -) | |
| 167 | -``` | |
| 168 | - | |
| 169 | -## 💡 使用建议 | |
| 170 | - | |
| 171 | -### 开发阶段 | |
| 172 | -```bash | |
| 173 | -# 小数据量 + debug | |
| 174 | -python3 run_all.py --lookback_days 3 --top_n 10 --debug | |
| 175 | -``` | |
| 176 | -✓ 快速验证 | |
| 177 | -✓ 详细排错 | |
| 178 | -✓ 检查效果 | |
| 179 | - | |
| 180 | -### 调优阶段 | |
| 181 | -```bash | |
| 182 | -# 中等数据量 + debug | |
| 183 | -python3 scripts/i2i_swing.py --lookback_days 30 --top_n 50 --debug | |
| 184 | -``` | |
| 185 | -✓ 查看分布 | |
| 186 | -✓ 评估质量 | |
| 187 | -✓ 调整参数 | |
| 188 | - | |
| 189 | -### 生产阶段 | |
| 190 | -```bash | |
| 191 | -# 大数据量 + 正常模式 | |
| 192 | -python3 run_all.py --lookback_days 730 --top_n 50 | |
| 193 | -``` | |
| 194 | -✓ 高效运行 | |
| 195 | -✓ 必要日志 | |
| 196 | -✓ 节省空间 | |
| 197 | - | |
| 198 | -## 📈 性能影响 | |
| 199 | - | |
| 200 | -| 模式 | 运行时间 | 磁盘占用 | 日志详细度 | | |
| 201 | -|------|---------|---------|-----------| | |
| 202 | -| 正常 | 基准 | 基准 | INFO | | |
| 203 | -| Debug | +10-20% | +50MB-500MB | DEBUG | | |
| 204 | - | |
| 205 | -**建议**: | |
| 206 | -- 开发/调试:始终使用debug | |
| 207 | -- 生产环境:关闭debug | |
| 208 | -- 定期清理:`rm -rf logs/debug/* output/debug/*` | |
| 209 | - | |
| 210 | -## 🎉 主要优势 | |
| 211 | - | |
| 212 | -1. **数据可见** - 看清楚每一步的数据流向 | |
| 213 | -2. **效果可查** - 明文文件直接检查推荐质量 | |
| 214 | -3. **性能可测** - 每个步骤的耗时统计 | |
| 215 | -4. **问题可追** - 详细日志快速定位错误 | |
| 216 | -5. **参数可调** - 对比不同参数的效果 | |
| 217 | - | |
| 218 | -## 📚 相关文档 | |
| 219 | - | |
| 220 | -1. **DEBUG_GUIDE.md** - 完整使用指南(200+行) | |
| 221 | -2. **QUICK_DEBUG_SUMMARY.md** - 快速参考 | |
| 222 | -3. **UPDATE_CONFIG_GUIDE.md** - 配置调整指南 | |
| 223 | -4. **scripts/debug_utils.py** - 源代码和注释 | |
| 224 | - | |
| 225 | -## ✨ 下一步(可选) | |
| 226 | - | |
| 227 | -如需为其他脚本添加debug支持,参考i2i_swing.py的模式: | |
| 228 | - | |
| 229 | -```python | |
| 230 | -# 1. 导入 | |
| 231 | -from offline_tasks.scripts.debug_utils import ( | |
| 232 | - setup_debug_logger, log_dataframe_info, ... | |
| 233 | -) | |
| 234 | - | |
| 235 | -# 2. 添加参数 | |
| 236 | -parser.add_argument('--debug', action='store_true') | |
| 237 | - | |
| 238 | -# 3. 设置logger | |
| 239 | -logger = setup_debug_logger('script_name', debug=args.debug) | |
| 240 | - | |
| 241 | -# 4. 记录信息 | |
| 242 | -log_algorithm_params(logger, params) | |
| 243 | -log_dataframe_info(logger, df, "名称") | |
| 244 | - | |
| 245 | -# 5. 生成明文 | |
| 246 | -if args.debug: | |
| 247 | - name_mappings = fetch_name_mappings(engine, debug=True) | |
| 248 | - save_readable_index(output_file, index_data, name_mappings) | |
| 249 | -``` | |
| 250 | - | |
| 251 | ---- | |
| 252 | - | |
| 253 | -**状态**: ✅ 核心功能已完成 | |
| 254 | -**当前**: i2i_swing.py + run_all.py完整支持 | |
| 255 | -**扩展**: 其他脚本可按需添加(模式已建立) |
OFFLINE_TASKS_README.md deleted
| ... | ... | @@ -1,231 +0,0 @@ |
| 1 | -# 推荐系统离线任务 - 完整交付 | |
| 2 | - | |
| 3 | -## 🎯 项目目标 | |
| 4 | - | |
| 5 | -根据业务文档要求,构建推荐系统的离线任务部分,建立基于现有用户特征的相应索引。 | |
| 6 | - | |
| 7 | -## ✅ 已完成的任务 | |
| 8 | - | |
| 9 | -### 1. i2i - 行为相似索引(3种算法) | |
| 10 | - | |
| 11 | -参考 `item_sim.py`(真实可运行的代码),改写了以下算法以适配我们的数据: | |
| 12 | - | |
| 13 | -#### ✅ Swing算法 | |
| 14 | -- **文件**: `offline_tasks/scripts/i2i_swing.py` | |
| 15 | -- **来源**: 改写自 `collaboration/src/swing.cc` | |
| 16 | -- **特点**: 基于用户共同行为的物品相似度,效果优于传统协同过滤 | |
| 17 | -- **输出**: `i2i_swing_YYYYMMDD.txt` | |
| 18 | - | |
| 19 | -#### ✅ Session Word2Vec | |
| 20 | -- **文件**: `offline_tasks/scripts/i2i_session_w2v.py` | |
| 21 | -- **来源**: 改写自 `graphembedding/session_w2v/` | |
| 22 | -- **特点**: 基于用户会话序列训练Word2Vec,捕获序列关系 | |
| 23 | -- **输出**: `i2i_session_w2v_YYYYMMDD.txt` + 模型文件 | |
| 24 | - | |
| 25 | -#### ✅ DeepWalk | |
| 26 | -- **文件**: `offline_tasks/scripts/i2i_deepwalk.py` | |
| 27 | -- **来源**: 改写自 `graphembedding/deepwalk/deepwalk.py` | |
| 28 | -- **特点**: 基于图随机游走训练Word2Vec,发现图结构特征 | |
| 29 | -- **输出**: `i2i_deepwalk_YYYYMMDD.txt` + 模型文件 | |
| 30 | - | |
| 31 | -### 2. 兴趣点聚合索引 | |
| 32 | - | |
| 33 | -按照指定的key生成索引: | |
| 34 | - | |
| 35 | -#### ✅ 支持的维度Key | |
| 36 | -- ✅ **平台**: PC/Mobile/App | |
| 37 | -- ✅ **国家/销售区域**: US/UK/CN... | |
| 38 | -- ✅ **客户类型**: retailer/wholesaler... | |
| 39 | -- ✅ **用户偏好的二级分类**: category_level2 | |
| 40 | -- ✅ **用户偏好的三级分类**: category_level3 | |
| 41 | - | |
| 42 | -#### ✅ 支持的List类型 | |
| 43 | -- ✅ **热门** (hot): 基于最近180天的高交互商品 | |
| 44 | -- ✅ **加购** (cart): 基于加购行为的高频商品 | |
| 45 | -- ✅ **新品** (new): 基于商品创建时间的新品 | |
| 46 | - | |
| 47 | -#### ✅ 时间衰减 | |
| 48 | -- 最近2年数据 | |
| 49 | -- 权重时间衰减(每30天衰减5%) | |
| 50 | - | |
| 51 | -## 📁 项目结构 | |
| 52 | - | |
| 53 | -``` | |
| 54 | -/home/tw/recommendation/ | |
| 55 | -│ | |
| 56 | -├── db_service.py # 数据库连接服务(共享) | |
| 57 | -├── requirements.txt # Python依赖包 | |
| 58 | -│ | |
| 59 | -├── offline_tasks/ # 离线任务主目录 | |
| 60 | -│ │ | |
| 61 | -│ ├── config/ | |
| 62 | -│ │ └── offline_config.py # 配置文件 | |
| 63 | -│ │ | |
| 64 | -│ ├── scripts/ | |
| 65 | -│ │ ├── i2i_swing.py # ✅ Swing算法 | |
| 66 | -│ │ ├── i2i_session_w2v.py # ✅ Session W2V | |
| 67 | -│ │ ├── i2i_deepwalk.py # ✅ DeepWalk | |
| 68 | -│ │ ├── interest_aggregation.py # ✅ 兴趣点聚合 | |
| 69 | -│ │ └── load_index_to_redis.py # Redis加载工具 | |
| 70 | -│ │ | |
| 71 | -│ ├── run_all.py # 统一调度脚本 | |
| 72 | -│ ├── install.sh # 安装脚本 | |
| 73 | -│ ├── test_connection.py # 连接测试 | |
| 74 | -│ ├── example_query_redis.py # 查询示例 | |
| 75 | -│ │ | |
| 76 | -│ └── 文档/ | |
| 77 | -│ ├── README.md # 详细文档 | |
| 78 | -│ ├── QUICKSTART.md # 快速开始 | |
| 79 | -│ ├── PROJECT_SUMMARY.md # 项目总结 | |
| 80 | -│ ├── STRUCTURE.md # 目录结构 | |
| 81 | -│ └── DELIVERY.md # 交付文档 | |
| 82 | -│ | |
| 83 | -└── (原有代码参考) | |
| 84 | - ├── item_sim.py # 参考的实现 | |
| 85 | - ├── collaboration/ # Swing算法参考 | |
| 86 | - └── graphembedding/ # 图嵌入算法参考 | |
| 87 | -``` | |
| 88 | - | |
| 89 | -## 🚀 快速开始 | |
| 90 | - | |
| 91 | -### 步骤1: 安装依赖 | |
| 92 | -```bash | |
| 93 | -cd /home/tw/recommendation/offline_tasks | |
| 94 | -bash install.sh | |
| 95 | -``` | |
| 96 | - | |
| 97 | -### 步骤2: 测试连接 | |
| 98 | -```bash | |
| 99 | -python3 test_connection.py | |
| 100 | -``` | |
| 101 | - | |
| 102 | -### 步骤3: 运行离线任务 | |
| 103 | -```bash | |
| 104 | -# 运行所有任务(推荐) | |
| 105 | -python3 run_all.py --lookback_days 730 --top_n 50 | |
| 106 | - | |
| 107 | -# 或单独运行 | |
| 108 | -python3 scripts/i2i_swing.py --lookback_days 730 --top_n 50 | |
| 109 | -python3 scripts/i2i_session_w2v.py --lookback_days 730 --top_n 50 | |
| 110 | -python3 scripts/i2i_deepwalk.py --lookback_days 730 --top_n 50 | |
| 111 | -python3 scripts/interest_aggregation.py --lookback_days 730 --top_n 1000 | |
| 112 | -``` | |
| 113 | - | |
| 114 | -### 步骤4: 加载到Redis | |
| 115 | -```bash | |
| 116 | -python3 scripts/load_index_to_redis.py --redis-host localhost --redis-port 6379 | |
| 117 | -``` | |
| 118 | - | |
| 119 | -## 📊 输出示例 | |
| 120 | - | |
| 121 | -### i2i相似度索引 | |
| 122 | -``` | |
| 123 | -item_id \t item_name \t similar_item_id1:score1,similar_item_id2:score2,... | |
| 124 | -``` | |
| 125 | - | |
| 126 | -### 兴趣点聚合索引 | |
| 127 | -``` | |
| 128 | -platform:PC \t item_id1:score1,item_id2:score2,... | |
| 129 | -country:US \t item_id1:score1,item_id2:score2,... | |
| 130 | -customer_type:retailer \t item_id1:score1,item_id2:score2,... | |
| 131 | -category_level2:100 \t item_id1:score1,item_id2:score2,... | |
| 132 | -platform_country:PC_US \t item_id1:score1,item_id2:score2,... | |
| 133 | -``` | |
| 134 | - | |
| 135 | -## 🎬 业务场景映射 | |
| 136 | - | |
| 137 | -根据文档中的3个业务场景: | |
| 138 | - | |
| 139 | -### 1. 首页猜你喜欢 | |
| 140 | -**使用**: 兴趣点聚合索引 | |
| 141 | -```python | |
| 142 | -# 组合查询 | |
| 143 | -interest:hot:platform_country:{platform}_{country} | |
| 144 | -interest:hot:customer_type:{customer_type} | |
| 145 | -interest:global:category_level2:{preferred_category} | |
| 146 | -``` | |
| 147 | - | |
| 148 | -### 2. 详情页的大家都在看 | |
| 149 | -**使用**: i2i行为相似索引 | |
| 150 | -```python | |
| 151 | -# 查询相似商品 | |
| 152 | -i2i:swing:{item_id} | |
| 153 | -i2i:session_w2v:{item_id} | |
| 154 | -i2i:deepwalk:{item_id} | |
| 155 | -``` | |
| 156 | - | |
| 157 | -### 3. 搜索结果页底部的供应商推荐 | |
| 158 | -**使用**: 兴趣点聚合索引 | |
| 159 | -```python | |
| 160 | -# 按分类推荐 | |
| 161 | -interest:global:category_level2:{category_id} | |
| 162 | -interest:hot:category_level3:{category_id} | |
| 163 | -``` | |
| 164 | - | |
| 165 | -## ⚙️ 核心特性 | |
| 166 | - | |
| 167 | -1. ✅ **数据适配**: 完全适配现有数据库(SelectDB)和表结构 | |
| 168 | -2. ✅ **时间衰减**: 2年数据,近期行为权重更高 | |
| 169 | -3. ✅ **行为加权**: 不同行为类型有不同权重(购买>联系工厂>加购>点击) | |
| 170 | -4. ✅ **多维度**: 支持单维度和组合维度查询 | |
| 171 | -5. ✅ **多算法**: 3种i2i算法,可融合使用 | |
| 172 | -6. ✅ **可配置**: 所有参数集中配置,便于调优 | |
| 173 | -7. ✅ **自动化**: 统一调度,一键运行 | |
| 174 | -8. ✅ **文档完善**: 提供完整的使用文档和示例 | |
| 175 | - | |
| 176 | -## 📚 详细文档 | |
| 177 | - | |
| 178 | -- **QUICKSTART.md**: 5分钟快速上手 | |
| 179 | -- **README.md**: 完整的功能说明 | |
| 180 | -- **PROJECT_SUMMARY.md**: 技术架构和原理 | |
| 181 | -- **STRUCTURE.md**: 项目结构和数据流 | |
| 182 | -- **DELIVERY.md**: 交付清单和状态 | |
| 183 | - | |
| 184 | -## 🔧 定时任务 | |
| 185 | - | |
| 186 | -建议设置crontab每天运行: | |
| 187 | - | |
| 188 | -```bash | |
| 189 | -# 每天凌晨2点运行离线任务 | |
| 190 | -0 2 * * * cd /home/tw/recommendation/offline_tasks && /usr/bin/python3 run_all.py >> logs/cron.log 2>&1 | |
| 191 | - | |
| 192 | -# 凌晨6点加载到Redis | |
| 193 | -0 6 * * * cd /home/tw/recommendation/offline_tasks && /usr/bin/python3 scripts/load_index_to_redis.py >> logs/load_redis.log 2>&1 | |
| 194 | -``` | |
| 195 | - | |
| 196 | -## 📈 性能参考 | |
| 197 | - | |
| 198 | -基于100万条用户行为数据: | |
| 199 | - | |
| 200 | -| 任务 | 时间 | 内存 | | |
| 201 | -|------|------|------| | |
| 202 | -| Swing | 2-4小时 | 4-8GB | | |
| 203 | -| Session W2V | 30-60分钟 | 2-4GB | | |
| 204 | -| DeepWalk | 1-2小时 | 2-4GB | | |
| 205 | -| 兴趣点聚合 | 30-60分钟 | 2-4GB | | |
| 206 | - | |
| 207 | -## ✨ 与原有代码的关系 | |
| 208 | - | |
| 209 | -本项目是对以下原有代码的改写和扩展: | |
| 210 | - | |
| 211 | -1. **item_sim.py** → 数据格式参考,保持一致性 | |
| 212 | -2. **collaboration/src/swing.cc** → 改写为Python版本的 `i2i_swing.py` | |
| 213 | -3. **graphembedding/session_w2v/** → 改写为 `i2i_session_w2v.py` | |
| 214 | -4. **graphembedding/deepwalk/** → 改写为 `i2i_deepwalk.py` | |
| 215 | -5. **hot/main.py** → 参考其聚合逻辑,扩展为多维度的 `interest_aggregation.py` | |
| 216 | - | |
| 217 | -所有改写都保持了与现有数据格式的兼容性。 | |
| 218 | - | |
| 219 | -## 🎉 交付状态 | |
| 220 | - | |
| 221 | -**状态**: ✅ 已完成并可用 | |
| 222 | - | |
| 223 | -所有功能已实现、测试并文档化。可以立即部署使用。 | |
| 224 | - | |
| 225 | ---- | |
| 226 | - | |
| 227 | -**目录**: `/home/tw/recommendation/offline_tasks/` | |
| 228 | -**入口**: `run_all.py` | |
| 229 | -**文档**: `QUICKSTART.md` | |
| 230 | -**日期**: 2025-10-16 | |
| 231 | - |
OFFLINE_TASKS_SUMMARY.md deleted
| ... | ... | @@ -1,290 +0,0 @@ |
| 1 | -# 📊 推荐系统离线任务 - 完整总结 | |
| 2 | - | |
| 3 | -## ✅ 项目状态:已完成 | |
| 4 | - | |
| 5 | ---- | |
| 6 | - | |
| 7 | -## 📦 交付内容 | |
| 8 | - | |
| 9 | -### 1. 核心算法(5个脚本) | |
| 10 | - | |
| 11 | -| 脚本 | 功能 | 代码行数 | | |
| 12 | -|------|------|---------| | |
| 13 | -| `i2i_swing.py` | Swing算法(行为相似) | ~240行 | | |
| 14 | -| `i2i_session_w2v.py` | Session W2V(行为相似) | ~240行 | | |
| 15 | -| `i2i_deepwalk.py` | DeepWalk(行为相似) | ~330行 | | |
| 16 | -| `i2i_content_similar.py` | 内容相似(新增) | ~320行 | | |
| 17 | -| `interest_aggregation.py` | 兴趣点聚合 | ~310行 | | |
| 18 | - | |
| 19 | -### 2. 工具脚本(5个) | |
| 20 | - | |
| 21 | -| 脚本 | 功能 | | |
| 22 | -|------|------| | |
| 23 | -| `run_all.py` | 统一调度所有任务 | | |
| 24 | -| `load_index_to_redis.py` | 加载索引到Redis | | |
| 25 | -| `test_connection.py` | 测试数据库和Redis连接 | | |
| 26 | -| `example_query_redis.py` | Redis查询示例 | | |
| 27 | -| `check_table_structure.py` | 检查表结构 | | |
| 28 | - | |
| 29 | -### 3. 配置文件(2个) | |
| 30 | - | |
| 31 | -| 文件 | 功能 | | |
| 32 | -|------|------| | |
| 33 | -| `config/offline_config.py` | 离线任务配置 | | |
| 34 | -| `requirements.txt` | Python依赖包 | | |
| 35 | - | |
| 36 | -### 4. 文档(14份) | |
| 37 | - | |
| 38 | -| 文档 | 说明 | | |
| 39 | -|------|------| | |
| 40 | -| **START_HERE.md** | 开始文档(推荐阅读) | | |
| 41 | -| **QUICKSTART.md** | 快速开始指南 | | |
| 42 | -| **README.md** | 详细使用文档 | | |
| 43 | -| **CURRENT_STATUS.md** | 当前功能状态 | | |
| 44 | -| **FINAL_UPDATE.md** | 最终更新说明 | | |
| 45 | -| **COMPLETE_INDEX_LIST.md** | 完整索引清单 | | |
| 46 | -| **PROJECT_SUMMARY.md** | 技术架构总结 | | |
| 47 | -| **FIELD_MAPPING.md** | 字段映射说明 | | |
| 48 | -| **DATABASE_SETUP.md** | 数据库配置指南 | | |
| 49 | -| **STRUCTURE.md** | 目录结构说明 | | |
| 50 | -| **TROUBLESHOOTING.md** | 故障排除指南 | | |
| 51 | -| **CHANGELOG.md** | 更新日志 | | |
| 52 | -| **COMMANDS.txt** | 常用命令参考 | | |
| 53 | -| **FINAL_SUMMARY.txt** | 交付总结 | | |
| 54 | - | |
| 55 | ---- | |
| 56 | - | |
| 57 | -## 🎯 功能清单 | |
| 58 | - | |
| 59 | -### i2i 相似度索引 | |
| 60 | - | |
| 61 | -#### 行为相似(3种) | |
| 62 | -✅ **Swing** - 基于用户共同行为 | |
| 63 | -✅ **Session W2V** - 基于会话序列 | |
| 64 | -✅ **DeepWalk** - 基于图随机游走 | |
| 65 | - | |
| 66 | -#### 内容相似(1种,3个方法) | |
| 67 | -✅ **Content-based** - 基于商品属性 | |
| 68 | -- TF-IDF方法 | |
| 69 | -- 分类方法 | |
| 70 | -- 混合方法(推荐) | |
| 71 | - | |
| 72 | -### 兴趣点聚合索引 | |
| 73 | - | |
| 74 | -#### 单维度(7个) | |
| 75 | -✅ 业务平台(platform) | |
| 76 | -✅ 客户端平台(client_platform) | |
| 77 | -✅ 供应商(supplier) | |
| 78 | -✅ 一级分类(category_level1) | |
| 79 | -✅ 二级分类(category_level2) | |
| 80 | -✅ 三级分类(category_level3) | |
| 81 | -✅ 四级分类(category_level4) | |
| 82 | - | |
| 83 | -#### 组合维度(4个) | |
| 84 | -✅ 平台 + 客户端 | |
| 85 | -✅ 平台 + 二级分类 | |
| 86 | -✅ 平台 + 三级分类 | |
| 87 | -✅ 客户端 + 二级分类 | |
| 88 | - | |
| 89 | -#### 列表类型(3种) | |
| 90 | -✅ 热门(hot) | |
| 91 | -✅ 加购(cart) | |
| 92 | -✅ 新品(new) | |
| 93 | - | |
| 94 | ---- | |
| 95 | - | |
| 96 | -## 📊 数据依赖 | |
| 97 | - | |
| 98 | -### 数据库表 | |
| 99 | -- `sensors_events` - 用户行为事件(必需) | |
| 100 | -- `prd_goods_sku` - 商品SKU信息(必需) | |
| 101 | -- `prd_goods` - 商品主表(必需) | |
| 102 | -- `prd_category` - 分类信息(用于分类维度) | |
| 103 | -- `sup_supplier` - 供应商信息(用于供应商维度) | |
| 104 | -- `prd_goods_sku_attribute` - 商品属性(用于内容相似) | |
| 105 | -- `prd_option` - 属性选项(用于内容相似) | |
| 106 | - | |
| 107 | -### 关键字段 | |
| 108 | -- `anonymous_id` - 用户ID | |
| 109 | -- `item_id` - 商品ID | |
| 110 | -- `event` - 事件类型 | |
| 111 | -- `create_time` - 时间戳 | |
| 112 | -- `business_platform` - 业务平台 | |
| 113 | -- `category_id` - 分类ID(通过path解析出1-4级) | |
| 114 | -- `supplier_id` - 供应商ID | |
| 115 | - | |
| 116 | ---- | |
| 117 | - | |
| 118 | -## 🚀 使用指南 | |
| 119 | - | |
| 120 | -### 快速开始 | |
| 121 | -```bash | |
| 122 | -cd /home/tw/recommendation/offline_tasks | |
| 123 | -bash install.sh | |
| 124 | -python3 test_connection.py | |
| 125 | -python3 run_all.py --lookback_days 730 --top_n 50 | |
| 126 | -``` | |
| 127 | - | |
| 128 | -### 单独运行 | |
| 129 | -```bash | |
| 130 | -# i2i算法 | |
| 131 | -python3 scripts/i2i_swing.py --lookback_days 730 --top_n 50 | |
| 132 | -python3 scripts/i2i_content_similar.py --top_n 50 --method hybrid | |
| 133 | - | |
| 134 | -# 兴趣点聚合 | |
| 135 | -python3 scripts/interest_aggregation.py --lookback_days 730 --top_n 1000 | |
| 136 | -``` | |
| 137 | - | |
| 138 | -### 加载到Redis | |
| 139 | -```bash | |
| 140 | -python3 scripts/load_index_to_redis.py --redis-host localhost | |
| 141 | -``` | |
| 142 | - | |
| 143 | ---- | |
| 144 | - | |
| 145 | -## 📈 性能指标 | |
| 146 | - | |
| 147 | -| 任务 | 数据量 | 预估时间 | 内存占用 | | |
| 148 | -|------|--------|---------|---------| | |
| 149 | -| Swing | 730天行为数据 | 2-4小时 | 4-8GB | | |
| 150 | -| Session W2V | 730天行为数据 | 30-60分钟 | 2-4GB | | |
| 151 | -| DeepWalk | 730天行为数据 | 1-2小时 | 2-4GB | | |
| 152 | -| Content-based | 全量商品属性 | 10-30分钟 | 2-4GB | | |
| 153 | -| 兴趣点聚合 | 730天行为数据 | 30-60分钟 | 2-4GB | | |
| 154 | -| **总计** | - | **6-10小时** | **8-16GB** | | |
| 155 | - | |
| 156 | ---- | |
| 157 | - | |
| 158 | -## 💾 输出数据 | |
| 159 | - | |
| 160 | -### 文件格式 | |
| 161 | -``` | |
| 162 | -i2i_swing_20251016.txt | |
| 163 | -i2i_session_w2v_20251016.txt | |
| 164 | -i2i_deepwalk_20251016.txt | |
| 165 | -i2i_content_hybrid_20251016.txt | |
| 166 | -interest_aggregation_hot_20251016.txt | |
| 167 | -interest_aggregation_cart_20251016.txt | |
| 168 | -interest_aggregation_new_20251016.txt | |
| 169 | -interest_aggregation_global_20251016.txt | |
| 170 | -``` | |
| 171 | - | |
| 172 | -### 索引数量 | |
| 173 | -- i2i索引:6种方法 × 商品数量 | |
| 174 | -- 兴趣点聚合:10000-50000条索引 | |
| 175 | - | |
| 176 | ---- | |
| 177 | - | |
| 178 | -## 🎬 业务场景 | |
| 179 | - | |
| 180 | -### 1. 首页猜你喜欢 | |
| 181 | -``` | |
| 182 | -interest:hot:platform:pc | |
| 183 | -interest:hot:category_level2:200 | |
| 184 | -interest:hot:platform_category2:pc_200 | |
| 185 | -``` | |
| 186 | - | |
| 187 | -### 2. 详情页大家都在看 | |
| 188 | -``` | |
| 189 | -i2i:swing:12345 | |
| 190 | -i2i:content_hybrid:12345 | |
| 191 | -``` | |
| 192 | - | |
| 193 | -### 3. 搜索结果页推荐 | |
| 194 | -``` | |
| 195 | -interest:global:category_level2:200 | |
| 196 | -interest:hot:supplier:10001 | |
| 197 | -``` | |
| 198 | - | |
| 199 | ---- | |
| 200 | - | |
| 201 | -## ✨ 核心优势 | |
| 202 | - | |
| 203 | -### 1. 完整性 | |
| 204 | -- 行为 + 内容双重相似度 | |
| 205 | -- 短期热门 + 长期稳定 | |
| 206 | -- 粗粒度 + 细粒度查询 | |
| 207 | - | |
| 208 | -### 2. 灵活性 | |
| 209 | -- 4级分类查询 | |
| 210 | -- 供应商维度 | |
| 211 | -- 多维度组合 | |
| 212 | - | |
| 213 | -### 3. 可扩展性 | |
| 214 | -- 易于添加新维度 | |
| 215 | -- 易于添加新算法 | |
| 216 | -- 配置化管理 | |
| 217 | - | |
| 218 | -### 4. 实用性 | |
| 219 | -- 完全适配真实数据库 | |
| 220 | -- 参考现有可运行代码 | |
| 221 | -- 文档详细完善 | |
| 222 | - | |
| 223 | ---- | |
| 224 | - | |
| 225 | -## 📖 推荐阅读顺序 | |
| 226 | - | |
| 227 | -1. **START_HERE.md** ← 从这里开始 | |
| 228 | -2. **QUICKSTART.md** - 快速上手 | |
| 229 | -3. **COMPLETE_INDEX_LIST.md** - 了解所有索引 | |
| 230 | -4. **FINAL_UPDATE.md** - 了解完整功能 | |
| 231 | -5. **README.md** - 详细使用说明 | |
| 232 | - | |
| 233 | ---- | |
| 234 | - | |
| 235 | -## 🔍 关键数字 | |
| 236 | - | |
| 237 | -| 指标 | 数值 | | |
| 238 | -|------|------| | |
| 239 | -| 总代码行数 | ~2500行 | | |
| 240 | -| 算法数量 | 4种(3行为+1内容) | | |
| 241 | -| 维度数量 | 11个(7单+4组合) | | |
| 242 | -| 分类层级 | 4级 | | |
| 243 | -| 文档数量 | 14份 | | |
| 244 | -| 脚本数量 | 10个 | | |
| 245 | -| 预计索引总数 | 10000-50000条 | | |
| 246 | - | |
| 247 | ---- | |
| 248 | - | |
| 249 | -## 📅 项目时间线 | |
| 250 | - | |
| 251 | -- **2025-10-16 上午**: 创建基础框架和配置 | |
| 252 | -- **2025-10-16 中午**: 实现3种行为相似算法 | |
| 253 | -- **2025-10-16 下午**: 实现兴趣点聚合 | |
| 254 | -- **2025-10-16 下午**: 根据实际表结构适配 | |
| 255 | -- **2025-10-16 傍晚**: 新增内容相似算法 | |
| 256 | -- **2025-10-16 傍晚**: 完善分类和供应商维度 | |
| 257 | -- **2025-10-16 晚上**: 完成所有文档 | |
| 258 | - | |
| 259 | ---- | |
| 260 | - | |
| 261 | -## 🎉 交付状态 | |
| 262 | - | |
| 263 | -**✅ 已完成并可用!** | |
| 264 | - | |
| 265 | -所有代码、配置、文档均已完成,可以立即部署使用。 | |
| 266 | - | |
| 267 | ---- | |
| 268 | - | |
| 269 | -## 📞 支持 | |
| 270 | - | |
| 271 | -### 文档 | |
| 272 | -- 完整文档在 `offline_tasks/` 目录 | |
| 273 | -- 从 `START_HERE.md` 开始 | |
| 274 | - | |
| 275 | -### 日志 | |
| 276 | -- 查看 `offline_tasks/logs/` 目录 | |
| 277 | -- `tail -f logs/run_all_*.log` | |
| 278 | - | |
| 279 | -### 帮助 | |
| 280 | -- 各个脚本都支持 `--help` 参数 | |
| 281 | -- 查看 `TROUBLESHOOTING.md` 排查问题 | |
| 282 | - | |
| 283 | ---- | |
| 284 | - | |
| 285 | -**项目目录**: `/home/tw/recommendation/offline_tasks/` | |
| 286 | -**入口文档**: `START_HERE.md` | |
| 287 | -**主脚本**: `run_all.py` | |
| 288 | -**版本**: v1.1 | |
| 289 | -**日期**: 2025-10-16 | |
| 290 | -**状态**: ✅ 交付完成 |
SWING_IMPLEMENTATION_SUMMARY.md deleted
| ... | ... | @@ -1,375 +0,0 @@ |
| 1 | -# Swing算法实现总结 | |
| 2 | - | |
| 3 | -## 完成的任务 | |
| 4 | - | |
| 5 | -本次实现完成了以下功能: | |
| 6 | - | |
| 7 | -### 1. Session生成脚本 ✓ | |
| 8 | - | |
| 9 | -**文件**: `offline_tasks/scripts/generate_session.py` | |
| 10 | - | |
| 11 | -**功能**: | |
| 12 | -- 从数据库提取用户行为数据 | |
| 13 | -- 聚合用户session(按商品维度累加权重) | |
| 14 | -- 支持两种输出格式: | |
| 15 | - - 标准格式:`uid \t {"item_id":score,...}` | |
| 16 | - - C++格式:`{"item_id":score,...}` (每行一个用户) | |
| 17 | - | |
| 18 | -**主要参数**: | |
| 19 | -- `--lookback_days`: 回看天数(默认730天) | |
| 20 | -- `--format`: 输出格式(standard/cpp/both) | |
| 21 | -- `--output`: 输出文件路径 | |
| 22 | -- `--debug`: 启用debug模式 | |
| 23 | - | |
| 24 | -**使用示例**: | |
| 25 | -```bash | |
| 26 | -cd /home/tw/recommendation/offline_tasks | |
| 27 | -python3 scripts/generate_session.py --lookback_days 730 --format both | |
| 28 | -``` | |
| 29 | - | |
| 30 | -### 2. Swing运行脚本 ✓ | |
| 31 | - | |
| 32 | -**文件**: `collaboration/run.sh` | |
| 33 | - | |
| 34 | -**改进内容**: | |
| 35 | -- ✓ 适配新的数据路径(`../offline_tasks/output/`) | |
| 36 | -- ✓ 自动检测session文件格式(带uid或纯json) | |
| 37 | -- ✓ 增加配置区域,便于修改参数 | |
| 38 | -- ✓ 添加错误检查和友好的输出信息 | |
| 39 | -- ✓ 自动调用debug脚本生成可读文件 | |
| 40 | -- ✓ 支持自定义Python环境 | |
| 41 | - | |
| 42 | -**配置项**: | |
| 43 | -```bash | |
| 44 | -SESSION_DATA_DIR="../offline_tasks/output" # session文件目录 | |
| 45 | -ALPHA=0.7 # Swing alpha参数 | |
| 46 | -THRESHOLD1=1 # 交互强度阈值1 | |
| 47 | -THRESHOLD2=3 # 交互强度阈值2 | |
| 48 | -THREAD_NUM=4 # 线程数 | |
| 49 | -SHOW_PROGRESS=1 # 显示进度 | |
| 50 | -PYTHON_CMD="python3" # Python命令 | |
| 51 | -``` | |
| 52 | - | |
| 53 | -**执行流程**: | |
| 54 | -1. 编译C++程序 | |
| 55 | -2. 查找session文件 | |
| 56 | -3. 运行Swing算法(多线程) | |
| 57 | -4. 合并结果 | |
| 58 | -5. 生成可读版本(自动调用debug脚本) | |
| 59 | - | |
| 60 | -### 3. Debug脚本 ✓ | |
| 61 | - | |
| 62 | -**文件**: `offline_tasks/scripts/add_names_to_swing.py` | |
| 63 | - | |
| 64 | -**功能**: | |
| 65 | -- 读取Swing算法输出结果 | |
| 66 | -- 从数据库获取商品名称映射 | |
| 67 | -- 生成可读版本:`item_id:name \t similar_id1:name1:score1,...` | |
| 68 | - | |
| 69 | -**使用示例**: | |
| 70 | -```bash | |
| 71 | -cd /home/tw/recommendation/offline_tasks | |
| 72 | -python3 scripts/add_names_to_swing.py \ | |
| 73 | - ../collaboration/output/swing_similar.txt \ | |
| 74 | - ../collaboration/output/swing_similar_readable.txt \ | |
| 75 | - --debug | |
| 76 | -``` | |
| 77 | - | |
| 78 | -### 4. 使用文档 ✓ | |
| 79 | - | |
| 80 | -**文件**: | |
| 81 | -- `offline_tasks/SWING_USAGE.md` - 完整使用指南 | |
| 82 | -- `collaboration/QUICKSTART.md` - 快速开始指南 | |
| 83 | - | |
| 84 | -**包含内容**: | |
| 85 | -- 详细的使用步骤 | |
| 86 | -- 参数说明和调优建议 | |
| 87 | -- 故障排查指南 | |
| 88 | -- 性能优化建议 | |
| 89 | -- 完整示例 | |
| 90 | - | |
| 91 | -## 数据流程 | |
| 92 | - | |
| 93 | -``` | |
| 94 | -┌─────────────────────────────────────────────────────────────┐ | |
| 95 | -│ 步骤1: 生成Session文件 │ | |
| 96 | -│ generate_session.py │ | |
| 97 | -│ ↓ │ | |
| 98 | -│ 数据库 → 用户行为数据 → 聚合权重 → session.txt.YYYYMMDD │ | |
| 99 | -└─────────────────────────────────────────────────────────────┘ | |
| 100 | - ↓ | |
| 101 | -┌─────────────────────────────────────────────────────────────┐ | |
| 102 | -│ 步骤2: 运行Swing算法 │ | |
| 103 | -│ collaboration/run.sh │ | |
| 104 | -│ ↓ │ | |
| 105 | -│ session文件 → C++ Swing → sim_matrx.* → swing_similar.txt │ | |
| 106 | -└─────────────────────────────────────────────────────────────┘ | |
| 107 | - ↓ | |
| 108 | -┌─────────────────────────────────────────────────────────────┐ | |
| 109 | -│ 步骤3: 生成Debug文件 │ | |
| 110 | -│ add_names_to_swing.py (自动调用) │ | |
| 111 | -│ ↓ │ | |
| 112 | -│ swing_similar.txt → 添加商品名 → swing_similar_readable.txt│ | |
| 113 | -└─────────────────────────────────────────────────────────────┘ | |
| 114 | -``` | |
| 115 | - | |
| 116 | -## 文件格式说明 | |
| 117 | - | |
| 118 | -### Session文件格式 | |
| 119 | - | |
| 120 | -**标准格式** (`session.txt.YYYYMMDD`): | |
| 121 | -``` | |
| 122 | -user_id1 {"123":10.0,"456":5.0,"789":3.0} | |
| 123 | -user_id2 {"123":8.0,"999":12.0} | |
| 124 | -``` | |
| 125 | - | |
| 126 | -**C++格式** (`session.txt.YYYYMMDD.cpp`): | |
| 127 | -``` | |
| 128 | -{"123":10.0,"456":5.0,"789":3.0} | |
| 129 | -{"123":8.0,"999":12.0} | |
| 130 | -``` | |
| 131 | - | |
| 132 | -### Swing结果格式 | |
| 133 | - | |
| 134 | -**原始格式** (`swing_similar.txt`): | |
| 135 | -``` | |
| 136 | -12345 67890:0.8523,23456:0.7234,34567:0.6891 | |
| 137 | -``` | |
| 138 | - | |
| 139 | -**可读格式** (`swing_similar_readable.txt`): | |
| 140 | -``` | |
| 141 | -12345:iPhone 15 Pro 67890:iPhone 15:0.8523,23456:iPhone 14 Pro:0.7234 | |
| 142 | -``` | |
| 143 | - | |
| 144 | -## 行为权重配置 | |
| 145 | - | |
| 146 | -当前配置(在`generate_session.py`中): | |
| 147 | - | |
| 148 | -| 行为类型 | 权重 | 说明 | | |
| 149 | -|---------|------|------| | |
| 150 | -| purchase | 10.0 | 购买行为(最强信号) | | |
| 151 | -| contactFactory | 5.0 | 联系厂家 | | |
| 152 | -| addToCart | 3.0 | 加入购物车 | | |
| 153 | -| addToPool | 2.0 | 加入询价池 | | |
| 154 | - | |
| 155 | -## 快速开始 | |
| 156 | - | |
| 157 | -```bash | |
| 158 | -# 1. 生成session文件(730天数据) | |
| 159 | -cd /home/tw/recommendation/offline_tasks | |
| 160 | -python3 scripts/generate_session.py --lookback_days 730 | |
| 161 | - | |
| 162 | -# 2. 运行Swing算法 | |
| 163 | -cd /home/tw/recommendation/collaboration | |
| 164 | -bash run.sh | |
| 165 | - | |
| 166 | -# 3. 查看结果 | |
| 167 | -cat output/swing_similar_readable.txt | head -20 | |
| 168 | -``` | |
| 169 | - | |
| 170 | -## 项目结构 | |
| 171 | - | |
| 172 | -``` | |
| 173 | -recommendation/ | |
| 174 | -├── offline_tasks/ | |
| 175 | -│ ├── scripts/ | |
| 176 | -│ │ ├── generate_session.py # 新增:生成session | |
| 177 | -│ │ ├── add_names_to_swing.py # 新增:添加商品名 | |
| 178 | -│ │ ├── i2i_swing.py # 已有:Python版Swing | |
| 179 | -│ │ └── debug_utils.py # 已有:Debug工具 | |
| 180 | -│ ├── config/ | |
| 181 | -│ │ └── offline_config.py # 配置文件 | |
| 182 | -│ ├── output/ | |
| 183 | -│ │ ├── session.txt.YYYYMMDD # 生成的session文件 | |
| 184 | -│ │ └── session.txt.YYYYMMDD.cpp # C++格式session | |
| 185 | -│ ├── SWING_USAGE.md # 新增:详细使用文档 | |
| 186 | -│ └── ... | |
| 187 | -├── collaboration/ | |
| 188 | -│ ├── run.sh # 修改:适配新数据格式 | |
| 189 | -│ ├── QUICKSTART.md # 新增:快速开始 | |
| 190 | -│ ├── src/ | |
| 191 | -│ │ ├── swing.cc # C++ Swing实现 | |
| 192 | -│ │ ├── swing_symmetric.cc # 对称Swing | |
| 193 | -│ │ ├── icf_simple.cc # 简单协同过滤 | |
| 194 | -│ │ └── ucf.py # 用户协同 | |
| 195 | -│ ├── bin/ # 编译后的可执行文件 | |
| 196 | -│ ├── output_YYYYMMDD/ # 输出目录 | |
| 197 | -│ │ ├── sim_matrx.* # 多线程输出 | |
| 198 | -│ │ ├── swing_similar.txt # 合并结果 | |
| 199 | -│ │ └── swing_similar_readable.txt # 可读结果 | |
| 200 | -│ └── output -> output_YYYYMMDD # 软链接 | |
| 201 | -└── SWING_IMPLEMENTATION_SUMMARY.md # 本文档 | |
| 202 | -``` | |
| 203 | - | |
| 204 | -## 参数调优建议 | |
| 205 | - | |
| 206 | -### 针对B2B低频场景 | |
| 207 | - | |
| 208 | -```bash | |
| 209 | -# Session生成 | |
| 210 | ---lookback_days 730 # 2年数据(B2B交互频次低) | |
| 211 | - | |
| 212 | -# Swing算法 | |
| 213 | -ALPHA=0.5-0.7 # 关注用户共同行为的多样性 | |
| 214 | -THRESHOLD1=1 # 低阈值,保留更多数据 | |
| 215 | -THRESHOLD2=3 # 中等阈值,过滤噪音 | |
| 216 | -THREAD_NUM=4-8 # 根据服务器配置 | |
| 217 | -``` | |
| 218 | - | |
| 219 | -### 针对大数据量场景 | |
| 220 | - | |
| 221 | -```bash | |
| 222 | -# 增加线程数 | |
| 223 | -THREAD_NUM=8 | |
| 224 | - | |
| 225 | -# 修改C++代码参数 | |
| 226 | -max_sim_list_len=300 # 相似列表长度 | |
| 227 | -max_session_list_len=100 # session截断长度 | |
| 228 | -``` | |
| 229 | - | |
| 230 | -## 与现有系统集成 | |
| 231 | - | |
| 232 | -### 1. 定时任务 | |
| 233 | - | |
| 234 | -```bash | |
| 235 | -# 每天凌晨2点运行 | |
| 236 | -0 2 * * * cd /home/tw/recommendation/offline_tasks && \ | |
| 237 | - python3 scripts/generate_session.py && \ | |
| 238 | - cd ../collaboration && bash run.sh | |
| 239 | -``` | |
| 240 | - | |
| 241 | -### 2. 结果导入Redis | |
| 242 | - | |
| 243 | -可使用现有的 `load_index_to_redis.py` 脚本导入结果。 | |
| 244 | - | |
| 245 | -### 3. 与Python版Swing对比 | |
| 246 | - | |
| 247 | -- **C++版本**(本次实现):性能更好,适合大数据量 | |
| 248 | -- **Python版本**(`i2i_swing.py`):易于调试,支持时间衰减 | |
| 249 | - | |
| 250 | -可以运行两个版本对比效果: | |
| 251 | -```bash | |
| 252 | -# Python版本 | |
| 253 | -python3 offline_tasks/scripts/i2i_swing.py --debug | |
| 254 | - | |
| 255 | -# C++版本 | |
| 256 | -cd collaboration && bash run.sh | |
| 257 | -``` | |
| 258 | - | |
| 259 | -## 测试验证 | |
| 260 | - | |
| 261 | -### 1. 小数据量测试 | |
| 262 | - | |
| 263 | -```bash | |
| 264 | -# 生成小范围数据(30天) | |
| 265 | -python3 scripts/generate_session.py --lookback_days 30 | |
| 266 | - | |
| 267 | -# 运行Swing | |
| 268 | -cd ../collaboration | |
| 269 | -bash run.sh | |
| 270 | -``` | |
| 271 | - | |
| 272 | -### 2. 查看结果质量 | |
| 273 | - | |
| 274 | -```bash | |
| 275 | -# 查看可读版本前100行 | |
| 276 | -head -100 output/swing_similar_readable.txt | |
| 277 | - | |
| 278 | -# 检查相似度分布 | |
| 279 | -cat output/swing_similar.txt | awk -F'\t' '{print NF-1}' | sort -n | uniq -c | |
| 280 | -``` | |
| 281 | - | |
| 282 | -### 3. 性能测试 | |
| 283 | - | |
| 284 | -```bash | |
| 285 | -# 记录运行时间 | |
| 286 | -time bash run.sh | |
| 287 | -``` | |
| 288 | - | |
| 289 | -## 故障排查 | |
| 290 | - | |
| 291 | -### 常见问题 | |
| 292 | - | |
| 293 | -1. **Session文件不存在** | |
| 294 | - - 先运行 `generate_session.py` | |
| 295 | - | |
| 296 | -2. **编译失败** | |
| 297 | - - 检查g++版本:`g++ --version` | |
| 298 | - - 手动编译:`cd collaboration && make` | |
| 299 | - | |
| 300 | -3. **数据库连接失败** | |
| 301 | - - 检查配置:`offline_tasks/config/offline_config.py` | |
| 302 | - - 测试连接:`python3 offline_tasks/test_connection.py` | |
| 303 | - | |
| 304 | -4. **结果为空** | |
| 305 | - - 降低threshold参数 | |
| 306 | - - 增加lookback_days | |
| 307 | - - 检查数据量:`wc -l output/session.txt.*` | |
| 308 | - | |
| 309 | -详细故障排查参见:`offline_tasks/SWING_USAGE.md` | |
| 310 | - | |
| 311 | -## 后续优化方向 | |
| 312 | - | |
| 313 | -1. **性能优化** | |
| 314 | - - 支持分布式计算 | |
| 315 | - - 增量更新机制 | |
| 316 | - - 结果缓存 | |
| 317 | - | |
| 318 | -2. **功能增强** | |
| 319 | - - 支持多种相似度算法 | |
| 320 | - - 在线实时更新 | |
| 321 | - - A/B测试框架 | |
| 322 | - | |
| 323 | -3. **可观测性** | |
| 324 | - - 添加监控指标 | |
| 325 | - - 结果质量评估 | |
| 326 | - - 自动报警 | |
| 327 | - | |
| 328 | -## 相关文档 | |
| 329 | - | |
| 330 | -- **详细使用指南**: `offline_tasks/SWING_USAGE.md` | |
| 331 | -- **快速开始**: `collaboration/QUICKSTART.md` | |
| 332 | -- **配置说明**: `offline_tasks/config/offline_config.py` | |
| 333 | -- **Debug工具**: `offline_tasks/scripts/debug_utils.py` | |
| 334 | -- **Swing算法原理**: `collaboration/README.md` | |
| 335 | - | |
| 336 | -## 维护说明 | |
| 337 | - | |
| 338 | -### 代码维护 | |
| 339 | - | |
| 340 | -- **Session生成**: `offline_tasks/scripts/generate_session.py` | |
| 341 | -- **Swing执行**: `collaboration/run.sh` | |
| 342 | -- **Debug脚本**: `offline_tasks/scripts/add_names_to_swing.py` | |
| 343 | - | |
| 344 | -### 配置维护 | |
| 345 | - | |
| 346 | -- **数据库配置**: `offline_tasks/config/offline_config.py` | |
| 347 | -- **行为权重**: `generate_session.py` 中的 `behavior_weights` | |
| 348 | -- **Swing参数**: `collaboration/run.sh` 中的配置区域 | |
| 349 | - | |
| 350 | -### 日志查看 | |
| 351 | - | |
| 352 | -```bash | |
| 353 | -# Session生成日志 | |
| 354 | -ls offline_tasks/logs/debug/generate_session_*.log | |
| 355 | - | |
| 356 | -# Swing运行日志 | |
| 357 | -ls collaboration/logs/ | |
| 358 | -``` | |
| 359 | - | |
| 360 | -## 总结 | |
| 361 | - | |
| 362 | -本次实现完成了一套完整的C++ Swing算法工作流: | |
| 363 | - | |
| 364 | -1. ✓ **前置任务**:Session文件生成(`generate_session.py`) | |
| 365 | -2. ✓ **核心算法**:C++ Swing执行(改进的`run.sh`) | |
| 366 | -3. ✓ **后处理**:Debug文件生成(`add_names_to_swing.py`) | |
| 367 | -4. ✓ **文档完善**:详细使用指南和快速开始 | |
| 368 | - | |
| 369 | -所有脚本都支持debug模式,便于调试和监控。整体流程自动化程度高,只需一条命令即可完成全流程。 | |
| 370 | - | |
| 371 | ---- | |
| 372 | - | |
| 373 | -**实现时间**: 2024-10-17 | |
| 374 | -**状态**: ✅ 已完成 | |
| 375 | - |
collaboration/QUICKSTART.md renamed to collaboration/Swing快速开始.md
tables_structure.md deleted
| ... | ... | @@ -1,178 +0,0 @@ |
| 1 | - | |
| 2 | -check_table_structure.py 的输出 | |
| 3 | - | |
| 4 | -================================================================================ | |
| 5 | -检查 prd_goods_sku 表结构 | |
| 6 | -================================================================================ | |
| 7 | - | |
| 8 | -表字段列表: | |
| 9 | - Field Type Null Key Default Extra | |
| 10 | -0 id bigint Yes true None | |
| 11 | -1 buyer_id bigint Yes false None REPLACE | |
| 12 | -2 proxy_buyer_id bigint Yes false None REPLACE | |
| 13 | -3 goods_id bigint Yes false None REPLACE | |
| 14 | -4 name varchar(1536) Yes false None REPLACE | |
| 15 | -5 name_pinyin varchar(3072) Yes false None REPLACE | |
| 16 | -6 accessories varchar(1536) Yes false None REPLACE | |
| 17 | -7 factory_no_buyer varchar(192) Yes false None REPLACE | |
| 18 | -8 factory_no varchar(765) Yes false None REPLACE | |
| 19 | -9 is_has_sample smallint Yes false None REPLACE | |
| 20 | -10 is_has_pkg_age_label smallint Yes false None REPLACE | |
| 21 | -11 pkg_age_label varchar(384) Yes false None REPLACE | |
| 22 | -12 onway_total int Yes false None REPLACE | |
| 23 | -13 onway_use_total int Yes false None REPLACE | |
| 24 | -14 onway_unuse_total int Yes false None REPLACE | |
| 25 | -15 deliver_day int Yes false None REPLACE | |
| 26 | -16 dev_level varchar(96) Yes false None REPLACE | |
| 27 | -17 length decimal(12,2) Yes false None REPLACE | |
| 28 | -18 width decimal(12,2) Yes false None REPLACE | |
| 29 | -19 height decimal(12,2) Yes false None REPLACE | |
| 30 | -20 volume decimal(12,8) Yes false None REPLACE | |
| 31 | -21 out_box_length decimal(12,2) Yes false None REPLACE | |
| 32 | -22 out_box_width decimal(12,2) Yes false None REPLACE | |
| 33 | -23 out_box_height decimal(12,2) Yes false None REPLACE | |
| 34 | -24 out_box_volume decimal(12,8) Yes false None REPLACE | |
| 35 | -25 out_box_cruft decimal(15,8) Yes false None REPLACE | |
| 36 | -26 package_length decimal(12,2) Yes false None REPLACE | |
| 37 | -27 package_width decimal(12,2) Yes false None REPLACE | |
| 38 | -28 package_height decimal(12,2) Yes false None REPLACE | |
| 39 | -29 package_volume decimal(12,8) Yes false None REPLACE | |
| 40 | -30 total_volume decimal(12,8) Yes false None REPLACE | |
| 41 | -31 gross_weight decimal(12,2) Yes false None REPLACE | |
| 42 | -32 net_weight decimal(12,2) Yes false None REPLACE | |
| 43 | -33 is_package_depart smallint Yes false None REPLACE | |
| 44 | -34 is_fixed_sale smallint Yes false None REPLACE | |
| 45 | -35 inbox_count int Yes false None REPLACE | |
| 46 | -36 no varchar(192) Yes false None REPLACE | |
| 47 | -37 hs_no varchar(192) Yes false None REPLACE | |
| 48 | -38 erp_old_no varchar(192) Yes false None REPLACE | |
| 49 | -39 factory_first_price decimal(12,3) Yes false None REPLACE | |
| 50 | -40 factory_first_price_unit varchar(96) Yes false None REPLACE | |
| 51 | -41 factory_first_price_date datetime Yes false None REPLACE | |
| 52 | -42 bar_code varchar(192) Yes false None REPLACE | |
| 53 | -43 count int Yes false None REPLACE | |
| 54 | -44 unit varchar(96) Yes false None REPLACE | |
| 55 | -45 price_supplier decimal(12,3) Yes false None REPLACE | |
| 56 | -46 gross_profit decimal(12,5) Yes false None REPLACE | |
| 57 | -47 price_base decimal(12,3) Yes false None REPLACE | |
| 58 | -48 bulk_result varchar(96) Yes false None REPLACE | |
| 59 | -49 bulk_type varchar(96) Yes false None REPLACE | |
| 60 | -50 purchase_moq int Yes false None REPLACE | |
| 61 | -51 capacity int Yes false None REPLACE | |
| 62 | -52 package_type_id bigint Yes false None REPLACE | |
| 63 | -53 package_type_name varchar(192) Yes false None REPLACE | |
| 64 | -54 package_type_value varchar(96) Yes false None REPLACE | |
| 65 | -55 sale_price decimal(12,3) Yes false None REPLACE | |
| 66 | -56 has_quote_rang smallint Yes false None REPLACE | |
| 67 | -57 is_stop_product smallint Yes false None REPLACE | |
| 68 | -58 is_upload_pic smallint Yes false None REPLACE | |
| 69 | -59 status varchar(96) Yes false None REPLACE | |
| 70 | -60 sku_compose_md5 varchar(192) Yes false None REPLACE | |
| 71 | -61 sku_compose varchar(6144) Yes false None REPLACE | |
| 72 | -62 src varchar(96) Yes false None REPLACE | |
| 73 | -63 price_bom_total decimal(12,3) Yes false None REPLACE | |
| 74 | -64 bom_id bigint Yes false None REPLACE | |
| 75 | -65 off_sell_time datetime Yes false None REPLACE | |
| 76 | -66 off_sell_user_id bigint Yes false None REPLACE | |
| 77 | -67 sort_time datetime Yes false None REPLACE | |
| 78 | -68 fir_on_sell_time datetime Yes false None REPLACE | |
| 79 | -69 on_sell_time datetime Yes false None REPLACE | |
| 80 | -70 on_sell_user_id bigint Yes false None REPLACE | |
| 81 | -71 is_draft smallint Yes false None REPLACE | |
| 82 | -72 per_pcs_price decimal(12,3) Yes false None REPLACE | |
| 83 | -73 fcl_price decimal(12,3) Yes false None REPLACE | |
| 84 | -74 init_price decimal(12,3) Yes false None REPLACE | |
| 85 | -75 last_pic_update_user_Id bigint Yes false None REPLACE | |
| 86 | -76 last_pic_update_time datetime Yes false None REPLACE | |
| 87 | -77 hide smallint Yes false None REPLACE | |
| 88 | -78 supplier_source varchar(192) Yes false None REPLACE | |
| 89 | -79 ref_sku_id bigint Yes false None REPLACE | |
| 90 | -80 ref_season_type varchar(192) Yes false None REPLACE | |
| 91 | -81 is_category_error smallint Yes false None REPLACE | |
| 92 | -82 is_attribute_error smallint Yes false None REPLACE | |
| 93 | -83 is_option_error smallint Yes false None REPLACE | |
| 94 | -84 price_protection_time datetime Yes false None REPLACE | |
| 95 | -85 remark varchar(6144) Yes false None REPLACE | |
| 96 | -86 audit_remark varchar(1536) Yes false None REPLACE | |
| 97 | -87 attribute_uid varchar(96) Yes false None REPLACE | |
| 98 | -88 refact_count int Yes false None REPLACE | |
| 99 | -89 last_refact_time datetime Yes false None REPLACE | |
| 100 | -90 last_refact_by bigint Yes false None REPLACE | |
| 101 | -91 is_delete smallint Yes false None REPLACE | |
| 102 | -92 soft_delete_time datetime Yes false None REPLACE | |
| 103 | -93 version bigint Yes false None REPLACE | |
| 104 | -94 last_update_by bigint Yes false None REPLACE | |
| 105 | -95 last_update_time datetime Yes false None REPLACE | |
| 106 | -96 create_by bigint Yes false None REPLACE | |
| 107 | -97 create_time datetime Yes false None REPLACE | |
| 108 | -98 ref_count bigint Yes false None REPLACE | |
| 109 | -99 can_update smallint Yes false None REPLACE | |
| 110 | -100 can_delete smallint Yes false None REPLACE | |
| 111 | -101 mig_old_id varchar(384) Yes false None REPLACE | |
| 112 | -102 mig_update_time datetime Yes false None REPLACE | |
| 113 | -103 mig_migrate_log_id bigint Yes false None REPLACE | |
| 114 | -104 create_platform varchar(150) Yes false None REPLACE | |
| 115 | -105 create_user_id bigint Yes false None REPLACE | |
| 116 | -106 last_update_platform varchar(150) Yes false None REPLACE | |
| 117 | -107 last_update_user_id bigint Yes false None REPLACE | |
| 118 | -108 is_market_sku smallint Yes false None REPLACE | |
| 119 | -109 is_star smallint Yes false None REPLACE | |
| 120 | -110 good_type tinyint Yes false None REPLACE | |
| 121 | -111 bom_config_id bigint Yes false None REPLACE | |
| 122 | -112 source_sku_id bigint Yes false None REPLACE | |
| 123 | - | |
| 124 | -================================================================================ | |
| 125 | -检查 sensors_events 表结构 | |
| 126 | -================================================================================ | |
| 127 | - | |
| 128 | -表字段列表: | |
| 129 | - Field Type Null Key Default Extra | |
| 130 | -0 id bigint No true None | |
| 131 | -1 ip varchar(128) Yes false None NONE | |
| 132 | -2 create_time datetime No false None NONE | |
| 133 | -3 last_update_time datetime Yes false None NONE | |
| 134 | -4 business_platform varchar(128) No false None NONE | |
| 135 | -5 client_platform varchar(128) No false None NONE | |
| 136 | -6 distinct_id varchar(128) No false None NONE | |
| 137 | -7 login_id int Yes false None NONE | |
| 138 | -8 anonymous_id varchar(128) Yes false None NONE | |
| 139 | -9 item_id int Yes false None NONE | |
| 140 | -10 item_type varchar(255) Yes false None NONE | |
| 141 | -11 event varchar(128) No false None NONE | |
| 142 | -12 location_src_type varchar(255) Yes false None NONE | |
| 143 | -13 location_src varchar(512) Yes false None NONE | |
| 144 | -14 search_content varchar(512) Yes false None NONE | |
| 145 | -15 page_type varchar(255) Yes false None NONE | |
| 146 | -16 module_name varchar(255) Yes false None NONE | |
| 147 | -17 position_name varchar(255) Yes false None NONE | |
| 148 | -18 channel_type varchar(512) Yes false None NONE | |
| 149 | -19 channel_mode varchar(1024) Yes false None NONE | |
| 150 | -20 channel_source varchar(512) Yes false None NONE | |
| 151 | -21 request_id bigint Yes false None NONE | |
| 152 | -22 session_id varchar(128) Yes false None NONE | |
| 153 | -23 session_duration int Yes false None NONE | |
| 154 | -24 stay_duration int Yes false None NONE | |
| 155 | -25 __properties json Yes false None NONE | |
| 156 | -26 __lib json Yes false None NONE | |
| 157 | -27 __identities json Yes false None NONE | |
| 158 | -28 __url_path varchar(1024) Yes false None NONE | |
| 159 | -29 __title varchar(2048) Yes false None NONE | |
| 160 | -30 __referrer_host varchar(128) Yes false None NONE | |
| 161 | -31 __is_first_day boolean Yes false None NONE | |
| 162 | -32 __is_first_time boolean Yes false None NONE | |
| 163 | -33 __os varchar(512) Yes false None NONE | |
| 164 | -34 __os_version varchar(512) Yes false None NONE | |
| 165 | -35 __browser varchar(512) Yes false None NONE | |
| 166 | -36 __browser_version varchar(255) Yes false None NONE | |
| 167 | -37 __browser_language varchar(255) Yes false None NONE | |
| 168 | -38 __screen_height int Yes false None NONE | |
| 169 | -39 __screen_width int Yes false None NONE | |
| 170 | -40 __user_agent varchar(512) Yes false None NONE | |
| 171 | -41 __url varchar(2048) Yes false None NONE | |
| 172 | -42 __element_type varchar(256) Yes false None NONE | |
| 173 | -43 __element_content varchar(1024) Yes false None NONE | |
| 174 | -44 __referrer varchar(1024) Yes false None NONE | |
| 175 | - | |
| 176 | -================================================================================ | |
| 177 | -检查完成 | |
| 178 | -================================================================================ |