热门角色不仅是灵感来源,更是你的效率助手。通过精挑细选的角色提示词,你可以快速生成高质量内容、提升创作灵感,并找到最契合你需求的解决方案。让创作更轻松,让价值更直接!
我们根据不同用户需求,持续更新角色库,让你总能找到合适的灵感入口。
根据指定条件提供表格数据分区逻辑,专业性强。
以下为基于 ods_orders 的数据分区与分桶设计及实现逻辑,满足 dt(日分区)与按 user_id 16 桶的要求。
一、分区与分桶规则
二、Hive 表结构与建表语句(示例)
CREATE TABLE IF NOT EXISTS dwd_orders ( order_id string, user_id bigint, item_id string, order_status string, amount decimal(20,4), order_create_time timestamp ) PARTITIONED BY (dt string) CLUSTERED BY (user_id) INTO 16 BUCKETS STORED AS ORC TBLPROPERTIES ( 'orc.compress'='SNAPPY' );
三、数据装载逻辑(动态分区 + 强制分桶)
-- 开启动态分区与分桶 SET hive.exec.dynamic.partition=true; SET hive.exec.dynamic.partition.mode=nonstrict; SET hive.enforce.bucketing=true;
-- 可选:限制动态分区数量 SET hive.exec.max.dynamic.partitions=10000; SET hive.exec.max.dynamic.partitions.pernode=1000;
-- 从 ODS 按 dt 装载(优先使用 ODS 的 dt 分区) INSERT OVERWRITE TABLE dwd_orders PARTITION (dt) SELECT o.order_id, COALESCE(o.user_id, -1) AS user_id, -- 异常值处理 o.item_id, o.order_status, o.amount, o.order_create_time, o.dt -- 直接沿用 ODS 分区字段 FROM ods_orders o WHERE o.dt BETWEEN '2025-09-01' AND '2025-09-30';
-- 若 ODS 不含 dt 字段,改用事件时间生成 dt INSERT OVERWRITE TABLE dwd_orders PARTITION (dt) SELECT o.order_id, COALESCE(o.user_id, -1) AS user_id, o.item_id, o.order_status, o.amount, o.order_create_time, date_format(o.order_create_time, 'yyyy-MM-dd') AS dt FROM ods_orders o WHERE o.order_create_time >= '2025-09-01' AND o.order_create_time < '2025-10-01';
四、分区与分桶行为说明
五、增量与维护建议
六、查询优化要点
上述设计确保以 dt 进行日级分区并按 user_id 进行 16 桶分桶,兼顾加载与查询性能,同时提供清晰可维护的装载与治理流程。
以下为 dwd_clicks 的分区与生命周期管理逻辑设计,满足 dt 月分区、region 二级分区、保留周期 365 天的要求。内容侧重可落地的 DDL、写入与清理策略,以及边界条件与注意事项。
一、分区设计与目录布局
示例 DDL(Hive/Spark SQL 兼容) create database if not exists dwd; create external table if not exists dwd.dwd_clicks ( click_id string, user_id string, event_time timestamp, page_id string, referer string, device_type string, os string, app_version string, ip string, -- 其他业务列... etl_load_time timestamp ) partitioned by (dt string, region string) stored as parquet location 'hdfs:///warehouse/dwd.db/dwd_clicks' tblproperties ( 'parquet.compression'='SNAPPY' );
二、分区派生与写入逻辑
dt 派生规则
region 派生规则
动态分区写入(Hive)
写入策略
三、生命周期(365 天)清理策略 问题:按月分区但生命周期按天计。需定义精确而可执行的删除规则,避免误删或超保留。
四、生命周期清理作业示例 A. Spark SQL 生成 dt 列表并批量删除(推荐做法,避免全表扫描)
计算 droppable_dt_max with t as (select date_sub(current_date(), 365) as T) select date_format(add_months(trunc(T, 'MM'), -1), 'yyyyMM') as droppable_dt_max from t;
获取待删 dt 列表(仅元数据扫描,不读取数据文件) select dt from (select distinct dt from dwd.dwd_clicks) p where dt <= '${droppable_dt_max}';
对每个 dt 执行删除 -- Hive 支持对多级分区使用部分规范删除(按 dt 级联删除所有 region) alter table dwd.dwd_clicks drop if exists partition (dt='YYYYMM');
注:
B. Hive CLI 简化方案(通过 shell 组装)
五、自动化与频率
六、边界与一致性处理
七、查询与分区裁剪示例
通过以上设计:
以下为基于 bi_sales 的周分区 dt 与二级分区 biz_line 的数据分区逻辑设计与实现方案。目标是确保分区可准确映射业务周、便于分区裁剪与增量加载,并兼容 Hive/Spark/Trino 等主流引擎。
一、分区字段与命名规范
二、周分区计算规则
三、字段标准化与容错
四、分区表 DDL 示例(Hive/Spark)
若 bi_sales 为明细事实表: CREATE TABLE bi_sales ( order_id string, event_ts timestamp, product_id string, amount decimal(18,2), ...其他业务字段... ) PARTITIONED BY (dt string, biz_line string) STORED AS PARQUET TBLPROPERTIES ('parquet.compression'='snappy');
注意:
五、动态分区写入(增量装载)
Hive/Spark SQL: set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict;
INSERT OVERWRITE TABLE bi_sales PARTITION (dt, biz_line) SELECT s.order_id, s.event_ts, s.product_id, s.amount, date_format(date_sub(next_day(s.event_ts, 'MO'), 7), 'yyyyMMdd') as dt, nvl(nullif(regexp_replace(lower(trim(coalesce(d.biz_line, s.biz_line))), '[^a-z0-9_]', '_'), ''), 'unknown') as biz_line FROM src_sales s LEFT JOIN dim_product d ON s.product_id = d.product_id WHERE s.event_ts IS NOT NULL;
Spark DataFrame(等价逻辑):
df = spark.table("src_sales")
.join(spark.table("dim_product"), "product_id", "left")
.withColumn("dt", date_format(date_sub(next_day(col("event_ts"), "MO"), 7), "yyyyMMdd"))
.withColumn("biz_line", expr("nvl(nullif(regexp_replace(lower(trim(coalesce(dim_product.biz_line, src_sales.biz_line))), '[^a-z0-9_]', '_'), ''), 'unknown')"))
df.write.mode("overwrite").format("parquet").insertInto("bi_sales")
Trino/Presto: INSERT INTO bi_sales SELECT order_id, event_ts, product_id, amount, format_datetime(date_trunc('week', event_ts), 'yyyyMMdd') AS dt, coalesce(nullif(regexp_replace(lower(trim(coalesce(d.biz_line, s.biz_line))), '[^a-z0-9_]', '_'), ''), 'unknown') AS biz_line FROM src_sales s LEFT JOIN dim_product d ON s.product_id = d.product_id WHERE s.event_ts IS NOT NULL;
六、迟到/修正数据处理策略
七、查询与分区裁剪示例
按周范围与业务线检索: SELECT ... FROM bi_sales WHERE dt BETWEEN '20250915' AND '20250929' AND biz_line IN ('retail', 'online');
周定位示例:
八、分区管理与监控
九、注意事项
以上逻辑可直接用于构建 bi_sales 的周分区 dt 与 biz_line 二级分区的 ETL/查询方案,确保分区裁剪有效、迟到数据可回补、查询性能稳定。
快速为新表与存量表生成分区与分桶方案,产出可执行建表语句和校验清单,减少试错与返工。
统一团队分区规范,评估不同维度方案的成本与性能,制定生命周期与归档策略,推动平台标准落地。
为报表与自助分析优化查询路径,按时间与业务维度切分数据,显著缩短汇总与看板的出数时间。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
免费获取高级提示词-优惠即将到期