前言:以下结合实践整理的数仓开发提示词旨在给大家在实际数仓开发过程中做个参考,用得好,确实提效明显!

一、ODS 层开发模板

1. ODS 层数据抽取脚本

指令标题:生成 ODS 层数据抽取脚本

指令内容:请生成一个 ODS 层数据抽取脚本,要求:

  1. 源系统:[源系统名称,如:订单系统、商品系统]
  2. 源表:[源表名称,如:source_orders、source_products]
  3. 目标表:[目标表名称,如:ods_orders、ods_products]
  4. 分区字段:ds(格式:YYYYMMDD)
  5. 抽取逻辑:[抽取方式,如:增量抽取、全量抽取]
  6. 增量字段:[增量抽取的字段,如:create_time、update_time]
  7. 目标字段:[字段列表,如:order_id, user_id, order_date, order_amount, order_status, create_time]
  8. 过滤条件:[可选,如:status = 'active']
  9. 格式:SQL 脚本,包含注释
  10. 特殊要求:[可选,如:处理空值、数据类型转换]

示例指令:请生成一个 ODS 层订单抽取脚本,要求:

  1. 源系统:订单系统
  2. 源表:source_orders
  3. 目标表:ods_orders
  4. 分区字段:ds
  5. 抽取逻辑:增量抽取
  6. 增量字段:create_time
  7. 目标字段:order_id, user_id, order_date, order_amount, order_status, payment_status, create_time, payment_time, shipping_time, finish_time, channel_id, region_id, refund_amount
  8. 过滤条件:status != 'deleted'
  9. 格式:SQL 脚本,包含注释
  10. 特殊要求:处理 order_amount 为空的情况,设置默认值为 0

预期输出:

-- ods_orders_extract.sql
-- 抽取订单数据到ODS层
INSERT OVERWRITE TABLE ods_orders PARTITION (ds = '${bizdate}')
SELECT
    order_id,
    user_id,
    order_date,
    COALESCE(order_amount, 0) AS order_amount,
    order_status,
    payment_status,
    create_time,
    payment_time,
    shipping_time,
    finish_time,
    channel_id,
    region_id,
    COALESCE(refund_amount, 0) AS refund_amount
FROM
    source_orders
WHERE
    create_time >= '${bizdate}'
    AND create_time < DATE_ADD('${bizdate}', 1)
    AND status != 'deleted';

二、DWD 层开发模板

1. DWD 层数据清洗和转换脚本

指令标题:生成 DWD 层数据清洗和转换脚本

指令内容:请生成一个 DWD 层数据清洗和转换脚本,要求:

  1. 业务域:[业务域名称,如:订单、商品、用户]
  2. 源表:[源表名称,如:ods_orders、ods_products]
  3. 目标表:[目标表名称,如:dwd_orders_detail、dwd_products_detail]
  4. 分区字段:ds
  5. 清洗规则:[清洗规则,如:处理空值、去重、格式标准化]
  6. 转换逻辑:[转换逻辑,如:字段映射、计算衍生字段、关联维度表]
  7. 关联维度:[关联的维度表,如:dim_user、dim_product]
  8. 目标字段:[字段列表,包含清洗和转换后的字段]
  9. 格式:SQL 脚本,包含注释
  10. 特殊要求:[可选,如:处理特殊业务逻辑、数据类型转换]

示例指令:请生成一个 DWD 层订单明细处理脚本,要求:

  1. 业务域:订单
  2. 源表:ods_orders、ods_order_items
  3. 目标表:dwd_orders_detail
  4. 分区字段:ds
  5. 清洗规则:处理空值,去重重复订单
  6. 转换逻辑:关联订单明细表,计算订单金额,生成日期 ID
  7. 关联维度:dim_user(通过 user_id 关联)、dim_product(通过 product_id 关联)
  8. 目标字段:order_id, user_id, order_date_id, product_id, channel_id, region_id, order_amount, payment_amount, refund_amount, order_status, payment_status, create_time, payment_time, shipping_time, finish_time, user_name, product_name, category_id, brand_id
  9. 格式:SQL 脚本,包含注释
  10. 特殊要求:订单日期 ID 格式为 YYYYMMDD

预期输出

-- dwd_orders_detail.sql
-- 清洗订单数据,关联维度表
INSERT OVERWRITE TABLE dwd_orders_detail PARTITION (ds = '${bizdate}')
SELECT
    o.order_id,
    o.user_id,
    CONCAT(SUBSTR(o.order_date, 1, 4), SUBSTR(o.order_date, 6, 2), SUBSTR(o.order_date, 9, 2)) AS order_date_id,
    oi.product_id,
    o.channel_id,
    o.region_id,
    COALESCE(o.order_amount, 0) AS order_amount,
    COALESCE(o.payment_amount, 0) AS payment_amount,
    COALESCE(o.refund_amount, 0) AS refund_amount,
    o.order_status,
    o.payment_status,
    o.create_time,
    o.payment_time,
    o.shipping_time,
    o.finish_time,
    u.user_name,
    p.product_name,
    p.category_id,
    p.brand_id
FROM
    ods_orders o
JOIN
    ods_order_items oi ON o.order_id = oi.order_id
LEFT JOIN
    dim_user u ON o.user_id = u.user_id
LEFT JOIN
    dim_product p ON oi.product_id = p.product_id
WHERE
    o.ds = '${bizdate}'
GROUP BY
    o.order_id, o.user_id, o.order_date, oi.product_id, o.channel_id, o.region_id, 
    o.order_amount, o.payment_amount, o.refund_amount, o.order_status, o.payment_status, 
    o.create_time, o.payment_time, o.shipping_time, o.finish_time, u.user_name, 
    p.product_name, p.category_id, p.brand_id;

三、DWS 层开发模板

1. DWS 层数据汇总脚本

指令标题:生成 DWS 层数据汇总脚本

指令内容:请生成一个 DWS 层数据汇总脚本,要求:

  1. 业务主题:[业务主题名称,如:销售、商品、用户]
  2. 源表:[源表名称,如:dwd_orders_detail、dwd_products_detail]
  3. 目标表:[目标表名称,如:dws_sales_summary、dws_product_summary]
  4. 分区字段:ds
  5. 汇总维度:[汇总维度,如:日期、地域、商品、用户]
  6. 汇总指标:[汇总指标,如:销售额、订单量、客单价、转化率]
  7. 计算逻辑:[计算逻辑,如:SUM、COUNT、AVG、MAX、MIN]
  8. 时间粒度:[时间粒度,如:日、周、月]
  9. 格式:SQL 脚本,包含注释
  10. 特殊要求:[可选,如:处理异常值、计算同比环比]

示例指令:请生成一个 DWS 层销售汇总脚本,要求:

  1. 业务主题:销售
  2. 源表:dwd_orders_detail
  3. 目标表:dws_sales_summary
  4. 分区字段:ds
  5. 汇总维度:order_date_id, region_id, channel_id, product_id
  6. 汇总指标:订单量、销售额、支付金额、退款金额、平均订单金额、转化率
  7. 计算逻辑:
    • 订单量:COUNT (DISTINCT order_id)
    • 销售额:SUM (order_amount)
    • 支付金额:SUM (payment_amount)
    • 退款金额:SUM (refund_amount)
    • 平均订单金额:AVG (order_amount)
    • 转化率:COUNT (DISTINCT CASE WHEN order_status = ' 已完成 ' THEN order_id END) / COUNT (DISTINCT order_id)
  8. 时间粒度:日
  9. 格式:SQL 脚本,包含注释
  10. 特殊要求:处理转化率为 NULL 的情况,设置默认值为 0

预期输出:

-- dws_sales_summary.sql
-- 按日期、地域、渠道、商品维度汇总销售数据
INSERT OVERWRITE TABLE dws_sales_summary PARTITION (ds = '${bizdate}')
SELECT
    order_date_id,
    region_id,
    channel_id,
    product_id,
    COUNT(DISTINCT order_id) AS order_count,
    SUM(order_amount) AS sales_amount,
    SUM(payment_amount) AS payment_amount,
    SUM(refund_amount) AS refund_amount,
    AVG(order_amount) AS avg_order_amount,
    COALESCE(COUNT(DISTINCT CASE WHEN order_status = '已完成' THEN order_id END) / NULLIF(COUNT(DISTINCT order_id), 0), 0) AS conversion_rate
FROM
    dwd_orders_detail
WHERE
    ds = '${bizdate}'
GROUP BY
    order_date_id,
    region_id,
    channel_id,
    product_id;

四、ADS 层开发模板

1. ADS 层数据分析脚本

指令标题:生成 ADS 层数据分析脚本

指令内容:请生成一个 ADS 层数据分析脚本,要求:

  1. 分析主题:[分析主题名称,如:销售分析、商品分析、用户分析]
  2. 源表:[源表名称,如:dws_sales_summary、dws_product_summary]
  3. 目标表:[目标表名称,如:ads_sales_analysis、ads_product_analysis]
  4. 分区字段:ds
  5. 分析维度:[分析维度,如:日期、地域、商品类别、用户类型]
  6. 分析指标:[分析指标,如:销售额、订单量、客单价、同比增长]
  7. 计算逻辑:[计算逻辑,如:汇总、同比、环比、占比]
  8. 数据处理:[数据处理,如:排序、过滤、格式化]
  9. 格式:SQL 脚本,包含注释
  10. 特殊要求:[可选,如:处理空值、格式化输出]

示例指令:请生成一个 ADS 层销售分析脚本,要求:

  1. 分析主题:销售分析
  2. 源表:dws_sales_summary
  3. 目标表:ads_sales_analysis
  4. 分区字段:ds
  5. 分析维度:order_date_id, region_id, channel_id
  6. 分析指标:销售额、订单量、平均订单金额、转化率、销售额占比
  7. 计算逻辑:
    • 销售额:SUM (sales_amount)
    • 订单量:SUM (order_count)
    • 平均订单金额:SUM (sales_amount) / SUM (order_count)
    • 转化率:AVG (conversion_rate)
    • 销售额占比:SUM (sales_amount) / (SELECT SUM (sales_amount) FROM dws_sales_summary WHERE ds = '${bizdate}')
  8. 数据处理:按销售额降序排序
  9. 格式:SQL 脚本,包含注释
  10. 特殊要求:销售额占比保留两位小数

预期输出:

-- ads_sales_analysis.sql
-- 处理销售分析数据,供QuickBI使用
INSERT OVERWRITE TABLE ads_sales_analysis PARTITION (ds = '${bizdate}')
SELECT
    order_date_id AS date,
    region_id,
    channel_id,
    SUM(sales_amount) AS sales_amount,
    SUM(order_count) AS order_count,
    SUM(sales_amount) / SUM(order_count) AS avg_order_amount,
    AVG(conversion_rate) AS conversion_rate,
    ROUND(SUM(sales_amount) / total_sales * 100, 2) AS sales_ratio
FROM
    dws_sales_summary,
    (SELECT SUM(sales_amount) AS total_sales FROM dws_sales_summary WHERE ds = '${bizdate}') t
WHERE
    ds = '${bizdate}'
GROUP BY
    order_date_id,
    region_id,
    channel_id,
    total_sales
ORDER BY
    sales_amount DESC;

五、维度表开发模板

1. 维度表开发脚本

指令标题:生成维度表开发脚本

指令内容:请生成一个维度表开发脚本,要求:

  1. 维度名称:[维度名称,如:用户、商品、时间、地域]
  2. 源表:[源表名称,如:ods_users、ods_products]
  3. 目标表:[目标表名称,如:dim_user、dim_product]
  4. 主键字段:[主键字段,如:user_id、product_id]
  5. 维度属性:[维度属性,如:用户维度包含:user_name、gender、age、city]
  6. SCD 类型:[SCD 类型,如:Type 1、Type 2]
  7. 历史处理:[历史处理方式,如:覆盖、保留历史]
  8. 格式:SQL 脚本,包含注释
  9. 特殊要求:[可选,如:处理空值、编码转换]

示例指令:请生成一个用户维度表开发脚本,要求:

  1. 维度名称:用户
  2. 源表:ods_users
  3. 目标表:dim_user
  4. 主键字段:user_id
  5. 维度属性:user_name、gender、age、city、province、registration_date、user_level、member_type
  6. SCD 类型:Type 1(覆盖更新)
  7. 历史处理:保留最新状态
  8. 格式:SQL 脚本,包含注释
  9. 特殊要求:处理 gender 为空的情况,设置默认值为 ' 未知'

预期输出:

-- dim_user.sql
-- 创建用户维度表
INSERT OVERWRITE TABLE dim_user
SELECT
    user_id,
    user_name,
    COALESCE(gender, '未知') AS gender,
    age,
    city,
    province,
    registration_date,
    user_level,
    member_type,
    CURRENT_TIMESTAMP AS update_time
FROM
    ods_users
WHERE
    ds = '${bizdate}';

六、数据质量监控模板

1. 数据质量监控脚本

指令标题:生成数据质量监控脚本

指令内容:请生成一个数据质量监控脚本,要求:

  1. 监控对象:[监控对象,如:ods_orders、dwd_orders_detail]
  2. 监控类型:[监控类型,如:完整性、准确性、一致性、及时性]
  3. 监控字段:[监控字段,如:order_id、order_amount]
  4. 监控规则:[监控规则,如:非空检查、范围检查、格式检查]
  5. 阈值设置:[阈值设置,如:空值率 < 1%、错误率 < 0.1%]
  6. 输出格式:[输出格式,如:SQL 结果、JSON 报告]
  7. 格式:SQL 脚本,包含注释
  8. 特殊要求:[可选,如:处理特殊情况、生成告警信息]

示例指令:请生成一个订单表数据完整性监控脚本,要求:

  1. 监控对象:ods_orders
  2. 监控类型:完整性
  3. 监控字段:order_id、user_id、order_amount、create_time
  4. 监控规则:
    • order_id:非空检查
    • user_id:非空检查
    • order_amount:非空且大于 0 检查
    • create_time:非空检查
  5. 阈值设置:空值率 < 0.1%
  6. 输出格式:SQL 结果,包含字段名、总记录数、空值数、空值率
  7. 格式:SQL 脚本,包含注释
  8. 特殊要求:按字段分组输出监控结果

预期输出:

-- data_quality_integrity.sql
-- 监控订单表数据完整性
SELECT
    'order_id' AS field_name,
    COUNT(*) AS total_count,
    COUNT(CASE WHEN order_id IS NULL THEN 1 END) AS null_count,
    (COUNT(CASE WHEN order_id IS NULL THEN 1 END) / COUNT(*)) * 100 AS null_rate
FROM
    ods_orders
WHERE
    ds = '${bizdate}'
UNION ALL
SELECT
    'user_id' AS field_name,
    COUNT(*) AS total_count,
    COUNT(CASE WHEN user_id IS NULL THEN 1 END) AS null_count,
    (COUNT(CASE WHEN user_id IS NULL THEN 1 END) / COUNT(*)) * 100 AS null_rate
FROM
    ods_orders
WHERE
    ds = '${bizdate}'
UNION ALL
SELECT
    'order_amount' AS field_name,
    COUNT(*) AS total_count,
    COUNT(CASE WHEN order_amount IS NULL OR order_amount <= 0 THEN 1 END) AS null_count,
    (COUNT(CASE WHEN order_amount IS NULL OR order_amount <= 0 THEN 1 END) / COUNT(*)) * 100 AS null_rate
FROM
    ods_orders
WHERE
    ds = '${bizdate}'
UNION ALL
SELECT
    'create_time' AS field_name,
    COUNT(*) AS total_count,
    COUNT(CASE WHEN create_time IS NULL THEN 1 END) AS null_count,
    (COUNT(CASE WHEN create_time IS NULL THEN 1 END) / COUNT(*)) * 100 AS null_rate
FROM
    ods_orders
WHERE
    ds = '${bizdate}';

七、数据字典管理模板

1. 数据字典管理脚本

指令标题:生成数据字典管理脚本

指令内容:请生成一个数据字典管理脚本,要求:

  1. 管理对象:[管理对象,如:指标、维度、业务术语]
  2. 操作类型:[操作类型,如:新增、更新、查询]
  3. 对象属性:[对象属性,如:指标包含:指标名称、口径定义、计算方法]
  4. 数据源:[数据源,如:dws_sales_summary、dim_user]
  5. 输出格式:[输出格式,如:SQL 脚本、JSON 配置]
  6. 格式:[脚本格式,如:SQL、Python]
  7. 特殊要求:[可选,如:版本控制、审批流程]

示例指令:请生成一个指标字典管理脚本,要求:

  1. 管理对象:指标
  2. 操作类型:新增
  3. 对象属性:
    • 指标 ID:sales_amount
    • 指标名称:销售额
    • 指标类型:业务指标
    • 指标层级:一级指标
    • 计算方法:SUM (order_amount)
    • 数据源:dws_sales_summary
    • 统计周期:日、周、月
    • 指标定义:一定时期内销售商品和服务的总收入
  4. 输出格式:SQL 脚本,插入到 dict_indicators 表
  5. 格式:SQL 脚本,包含注释
  6. 特殊要求:包含版本控制,初始版本为 1.0

预期输出:

-- dict_indicators.sql
-- 新增销售额指标到数据字典
INSERT INTO dict_indicators (
    indicator_id,
    indicator_name,
    indicator_type,
    indicator_level,
    calculation_method,
    data_source,
    statistical_cycle,
    definition,
    status,
    version,
    create_time,
    create_user
) VALUES (
    'sales_amount',
    '销售额',
    '业务指标',
    '一级指标',
    'SUM(order_amount)',
    'dws_sales_summary',
    '日、周、月',
    '一定时期内销售商品和服务的总收入',
    '发布',
    '1.0',
    CURRENT_TIMESTAMP,
    'system'
);

八、使用说明

1. 模板使用方法

  1. 复制模板:根据需要选择合适的模板
  2. 填写参数:替换模板中的占位符为实际值
  3. 执行指令:将填写后的指令提交给 AI
  4. 验证结果:检查生成的脚本是否符合要求
  5. 调整优化:根据实际情况调整和优化脚本

2. 最佳实践

  • 明确需求:提供清晰、具体的需求描述
  • 使用列表:使用列表形式组织需求,便于 AI 理解
  • 提供示例:如果可能,提供期望的输出示例
  • 逐步细化:复杂任务可拆分为多个简单步骤
  • 验证结果:每步验证结果,确保符合预期
  • 持续优化:根据使用反馈,持续优化指令模板

3. 注意事项

  • 确保填写的参数符合数仓开发规范
  • 避免使用模糊或歧义的描述
  • 对于复杂需求,考虑分步骤实现
  • 定期更新模板,适应业务变化
  • 结合实际业务场景,灵活使用模板

希望大家通过以上 AI 指令模板的灵活使用,可以更高效地开发数据仓库各层级的脚本,确保代码质量和一致性,同时减少重复工作,提高开发效率。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐