Без опису
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.


name: warehouse-table-sql-doris description: 根据现有业务表生成Doris数据仓库建表SQL代码,遵循严格的字段处理和注释规范 license: MIT compatibility: opencode metadata: audience: data engineers workflow: data warehouse development

target_db: Apache Doris

功能概述

本技能根据现有的业务数据库表结构,生成Apache Doris数据仓库的建表SQL代码。技能严格遵循以下原则:

  1. 不增加新字段(除非用户明确要求)
  2. 为每个表和字段添加详细中文说明
  3. 对含义不明确的字段,通过查询业务数据或询问用户来明确含义
  4. 排除与分析无关的字段
  5. 优化表和字段命名,使其更能反映业务意图
  6. 为常用字段创建索引
  7. 输出JSON格式的建表定义,包含表名、描述、字段集合和完整SQL代码
  8. 生成的SQL文件保存到项目create8-sql目录下
  9. 生成的SQL代码包含IF NOT EXISTS控制
  10. 调用工具测试SQL语法有效性

使用前准备

在使用本技能前,请确保以下信息已明确:

  1. 业务表来源:业务表定义的位置(Go结构体文件、数据库连接、SQL文件等)
  2. 目标数据仓库:Apache Doris(本技能专用)
  3. 项目路径:生成的SQL文件保存的项目目录(默认为当前项目的create8-sql目录)

工作流程

1. 确定业务表来源

  • 询问用户业务表定义的来源(如Go结构体文件、现有数据库、SQL脚本等)
  • 根据来源采取相应的读取策略:
    • Go结构体文件:读取tables目录下的.go文件,解析sqldef定义或GORM标签
    • 数据库连接:需要用户提供连接信息,使用相应工具查询表结构
    • SQL文件:读取现有SQL建表语句

2. 提取表结构

  • 使用globread工具查找并读取业务表定义文件
  • 解析表名、字段名、数据类型、长度、是否可为空、默认值、注释等信息
  • 如果字段缺少注释或含义不明确,执行以下步骤:
    • 优先查询业务数据库的示例数据(如果可访问)
    • 使用数据分析工具推断字段含义
    • 如果仍不明确,使用提问工具向用户询问字段含义

3. 筛选相关字段

  • 根据数据分析需求,排除与分析无关的字段(如内部ID、审计字段等)
  • 保留业务分析相关的字段(如金额、数量、状态、时间等)
  • 如果用户有特定要求,按用户指示筛选

4. 优化命名

  • 检查表和字段命名是否符合规范
  • 对命名不规范的字段进行重命名,使其更能反映业务意图:
    • 使用中文拼音或缩写字段名转换为英文描述性名称
    • 统一命名风格(蛇形命名法snake_case
    • 确保名称简洁且含义明确

5. 生成Doris表结构

  • 将业务数据类型映射到Doris兼容类型:
    • VARCHARVARCHAR
    • INTINT
    • BIGINTBIGINT
    • DATETIMEDATETIME
    • DECIMALDECIMAL
    • TEXTSTRING
    • 注意Doris特有类型:ARRAYMAPBITMAP
  • 添加Doris表属性:
    • ENGINE=OLAP
    • DUPLICATE KEYUNIQUE KEYAGGREGATE KEY
    • DISTRIBUTED BY HASH分桶
    • PROPERTIES配置(如replication_num

6. 添加中文注释

  • 为每个字段生成详细的中文注释,说明:
    • 字段的业务含义
    • 数据格式和取值范围
    • 与其他字段的关系
  • 为表生成中文描述,说明:
    • 表的业务用途
    • 数据来源和更新频率
    • 主要分析维度

7. 创建索引

  • 为常用查询字段创建索引:
    • 时间字段(created_atupdated_at
    • 状态字段(status
    • 外键字段(user_idorder_id
    • 高频过滤字段
  • 使用Doris的INDEX语法或BITMAP索引

8. 生成JSON输出

  • 按照以下JSON格式组织输出: json { "table_name": "表英文名", "description": "表中文描述", "fields": [ { "name": "字段名", "length": "字段长度", "type": "字段类型", "description": "字段中文描述" } ], "create_sql": "完整的建表SQL语句" }

9. 保存文件

  • 在项目根目录下创建create8-sql目录(如果不存在)
  • 生成文件名格式:{表名}_doris_create.json
  • 使用write工具将JSON内容写入文件
  • 同时生成一个纯SQL文件(可选):{表名}_doris_create.sql

10. 测试SQL语法

  • 调用Bash工具测试生成的SQL语法:
    • 如果有Doris测试环境,使用echo "SQL" | doris-cli进行验证
    • 如果没有,使用mysql --parse进行基本语法检查(注意Doris与MySQL的差异)
    • 报告任何语法错误并修正

输出示例

JSON格式输出

{
  "table_name": "dw_user_info",
  "description": "用户基本信息表,包含用户身份、联系方式和状态信息",
  "fields": [
    {
      "name": "user_id",
      "length": "",
      "type": "BIGINT",
      "description": "用户唯一标识符,系统自动生成的主键ID"
    },
    {
      "name": "user_name",
      "length": "100",
      "type": "VARCHAR",
      "description": "用户真实姓名,用于身份识别和显示"
    },
    {
      "name": "email",
      "length": "200",
      "type": "VARCHAR",
      "description": "用户电子邮箱地址,用于登录和接收通知"
    }
  ],
  "create_sql": "CREATE TABLE IF NOT EXISTS dw_user_info (\n    user_id BIGINT COMMENT '用户唯一标识符,系统自动生成的主键ID',\n    user_name VARCHAR(100) COMMENT '用户真实姓名,用于身份识别和显示',\n    email VARCHAR(200) COMMENT '用户电子邮箱地址,用于登录和接收通知',\n    phone VARCHAR(20) COMMENT '用户手机号码,用于登录验证和联系',\n    status TINYINT COMMENT '用户状态:0-禁用,1-正常,2-锁定',\n    created_at DATETIME COMMENT '用户注册时间,记录账户创建时间戳',\n    updated_at DATETIME COMMENT '最后更新时间,记录用户信息修改时间'\n) ENGINE=OLAP\nDUPLICATE KEY(user_id)\nDISTRIBUTED BY HASH(user_id) BUCKETS 10\nPROPERTIES (\n    \"replication_num\" = \"3\"\n);\nCOMMENT ON TABLE dw_user_info IS '用户基本信息表,包含用户身份、联系方式和状态信息';"
}

纯SQL输出

-- 数据仓库建表语句 (Apache Doris)
-- 表中文描述:用户基本信息表,包含用户身份、联系方式和状态信息
-- 源表:用户信息表 (user_info)
CREATE TABLE IF NOT EXISTS dw_user_info (
    user_id BIGINT COMMENT '用户唯一标识符,系统自动生成的主键ID',
    user_name VARCHAR(100) COMMENT '用户真实姓名,用于身份识别和显示',
    email VARCHAR(200) COMMENT '用户电子邮箱地址,用于登录和接收通知',
    phone VARCHAR(20) COMMENT '用户手机号码,用于登录验证和联系',
    status TINYINT COMMENT '用户状态:0-禁用,1-正常,2-锁定',
    created_at DATETIME COMMENT '用户注册时间,记录账户创建时间戳',
    updated_at DATETIME COMMENT '最后更新时间,记录用户信息修改时间'
) ENGINE=OLAP
DUPLICATE KEY(user_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 10
PROPERTIES (
    "replication_num" = "3"
);

COMMENT ON TABLE dw_user_info IS '用户基本信息表,包含用户身份、联系方式和状态信息';

注意事项

  1. 字段控制:绝不增加新字段,除非用户明确说明要增加什么字段
  2. 注释完整性:确保每个字段和表都有详细的中文注释
  3. 数据安全:不查询真实业务数据(除非用户明确授权),使用示例数据或元数据分析
  4. Doris语法:注意Doris与MySQL的语法差异,特别是:
    • 表属性配置(PROPERTIES
    • 索引类型(BITMAPINVERTED
    • 分区和分桶语法
    • 数据模型(Duplicate、Unique、Aggregate)
  5. 命名规范:优化命名时保持与业务系统的一致性,避免混淆
  6. 文件保存:确保create8-sql目录存在,文件命名清晰

错误处理

  • 如果无法解析业务表结构,请求用户提供更详细的信息或手动输入
  • 如果字段含义不明确且无法查询数据,必须询问用户
  • 如果Doris语法检查失败,查找文档修正语法错误
  • 如果文件保存失败,检查目录权限和磁盘空间

相关工具

  • glob:查找业务表定义文件
  • read:读取文件内容
  • grep:搜索特定模式
  • write:保存生成的JSON和SQL文件
  • bash:测试SQL语法
  • question:询问用户字段含义和确认信息