【SQL】Hive/Spark SQL 环比/同比日期/周期汇总

当天

'${
   
   zdt.format("yyyy-MM-dd")}'

昨天

'${
   
   zdt.addDay(-1).format('yyyy-MM-dd')}'

前30天

'${
   
   zdt.addDay(-30).format('yyyy-MM-dd')}'

本周-上周四至本周三 “u”-星期几

between
date_sub('${
   
   zdt.format("yyyy-MM-dd")}','${
   
   zdt.format("u")}'+3)
and
date_sub('${
   
   zdt.format("yyyy-MM-dd")}','${
   
   zdt.format("u")}'-3)

上周-上上周四至上周三

between 
date_sub('${
   
   zdt.format("yyyy-MM-dd")}','${
   
   zdt.format("u")}'+10)
and 
date_sub('${
   
   zdt.format("yyyy-MM-dd")}','${
   
   zdt.format("u")}'+4)

去年同期-同期周四至同期周三

between 
date_sub('${
   
   zdt.format("yyyy-MM-dd"
<think>我们正在讨论实时数仓中如何应用ODS、DWD、DWS、ADS分层模型。实时数仓要求低延迟的数据处理,因此传统批处理的分层架构需要调整。以下是实时数仓中分层模型的应用方法: 1. **ODS层(实时数据接入层)**:- **应用方式**:使用实时数据采集工具(如FlinkCDC、Kafka Connect)直接捕获业务系统的增量数据变更。数据以流的形式进入ODS层,存储在消息队列(如Kafka)或低延迟存储(如HBase)中。-**场景示例**:电商订单系统实时推送订单创建、支付事件到Kafka的`ods_order_topic`[^1]。 2. **DWD层(实时明细层)**:-**应用方式**:通过流处理引擎(如Flink、Spark Streaming)对ODS层数据进行实时清洗、转换和关联。输出结构化的明细数据流。-**关键操作**:-数据清洗:过滤无效字段(如缺失`user_id`的记录)-数据标准化:统一时间格式为`yyyy-MM-ddHH:mm:ss`-维度关联:实时关联用户维度表(存储在Redis或HBase)-**场景示例**:将订单流与用户信息流实时JOIN,生成包含用户等级的订单明细流`dwd_order_detail`[^3]。 3. **DWS层(实时汇总层)**:-**应用方式**:基于时间窗口(如1分钟/1小时)进行流式聚合计算,生成轻度汇总结果。使用状态存储(如RocksDB)维护中间状态。- **优化策略**:-增量计算:仅处理新到达的数据,避免全量重算-维表预关联:将常用维度提前关联到指标中-**场景示例**:实时计算每5分钟各商品类目的成交金额,输出到`dws_sales_5min`流[^2]。4.**ADS层(实时应用层)**:-**应用方式**:将DWS层的结果写入低延迟数据库(如ClickHouse、Redis),直接支撑前端应用。支持亚秒级查询响应。- **典型场景**:-实时大屏:从ClickHouse读取最新聚合指标-实时告警:基于Flink CEP检测异常流量- **数据模型**:采用宽表结构存储最终结果,例如`ads_realtime_dashboard`包含分钟级GMV、用户数等[^3]。 ###关键技术选型对比|分层|批处理方案|实时方案| |--------|---------------------|------------------------| |ODS|Sqoop+Hive| Kafka+Flink CDC|| DWD| Hive ETL| Flink StreamingSQL| |DWS|Hive聚合+调度|FlinkWindow Agg| |ADS| MySQL/Greenplum|ClickHouse/Redis|###实时数仓分层架构示例```mermaidgraphLRA[业务系统] -->|CDC| B[Kafka ODS]B -->|Flink SQL| C[Kafka DWD]C -->|Flink Window| D[RedisDWS] D-->|API|E[实时大屏 ADS] ```###挑战与解决方案- **挑战1:维表变更****方案**:使用广播流实时同步维度表变更(如FlinkBroadcast State) -**挑战2:精确一次处理****方案**:Flink Checkpoint +事务性写入(如Kafka事务) -**挑战3:历史数据回溯****方案**:Lambda架构(批流结合)或Kappa+(持久化事件日志)> **实时数仓的核心变革**:将传统T+1的分层ETL升级为持续流动的数据管道,通过流处理实现"分层不落地"的数据加工[^1][^3]。 §§相关问题§§1.实时数仓中如何解决维度表变化的缓慢变更维(SCD)问题?2.Flink在实时数仓分层处理中有哪些最佳实践?3.实时数仓的DWS层是否应该使用OLAP数据库替代流处理?</think>### 实时数仓中分层模型(ODS/DWD/DWS/ADS)的应用方法 在实时数仓场景下,传统分层模型需结合流式计算和低延迟存储技术进行重构。以下是各层在实时场景的应用方式和关键技术: #### 1. **ODS层:实时数据接入层** - **应用方式**: - 直接对接业务系统变更日志(如MySQL Binlog、Kafka日志流),**取消HBase存储**[^1],改用低延迟消息队列(如Kafka/Pulsar) - 采用**CDC工具**(Flink CDC、Debezium)实时捕获增量数据,实现秒级延迟 - **技术实现**: ```sql -- Flink SQL实现MySQL Binlog实时接入 CREATE TABLE ods_order ( id BIGINT, amount DECIMAL, event_time TIMESTAMP ) WITH ( 'connector' = 'mysql-cdc', 'hostname' = 'localhost', 'database-name' = 'mydb', 'table-name' = 'orders' ); ``` #### 2. **DWD层:实时明细层** - **应用方式**: - **流式ETL**:在数据流中进行实时清洗(如过滤无效数据)、格式标准化(时间戳统一为`yyyy-MM-dd HH:mm:ss`)[^1] - **动态维度关联**:通过Flink State或Redis实现流数据与维度表的实时JOIN - **关键操作**: - **会话切割**:对APP日志流按用户活跃状态切分Session(如Flink CEP) - **数据打平**:将嵌套JSON转为宽表结构,适配实时OLAP引擎[^1] - **异常处理**:通过旁路输出流隔离脏数据 #### 3. **DWS层:实时汇总层** - **应用方式**: - **窗口聚合**:基于滚动/滑动窗口(如1分钟/5分钟)计算实时指标 - **多维度预聚合**:通过RoaringBitmap等压缩技术存储用户行为画像[^3] - **技术实现**: ```sql -- Flink SQL实现5分钟交易聚合 CREATE VIEW dws_sales_5min AS SELECT item_id, HOP_END(event_time, INTERVAL '1' MINUTE, INTERVAL '5' MINUTE) AS window_end, SUM(amount) AS total_sales FROM dwd_order_detail GROUP BY item_id, HOP(event_time, INTERVAL '1' MINUTE, INTERVAL '5' MINUTE); ``` - **优化策略**: - **增量计算**:仅处理新到达数据,避免全量重算[^2] - **维表预关联**:将商品类目等维度提前关联到指标 #### 4. **ADS层:实时应用层** - **应用方式**: - **低延迟查询**:将聚合结果写入ClickHouse/Druid等OLAP库,响应延迟<1- **动态指标计算**:在流上直接计算复杂指标(如同比环比- **典型场景**: - 实时大屏:从DWS层直接读取分钟级GMV、UV等指标 - 实时风控:基于Flink CEP检测异常交易模式 ### 实时数仓分层架构特点 | 分层 | 存储方案 | 计算延迟 | 关键技术 | |-------|-----------------------|------------|--------------------------| | ODS | Kafka/Pulsar | 毫秒级 | CDC, 日志订阅 | | DWD | Kafka + 状态存储 | 秒级 | 流式ETL, 动态维度关联 | | DWS | RedisState/ClickHouse | 亚秒级 | 窗口聚合, 增量计算[^2] | | ADS | ClickHouse/Druid | 毫秒级查询 | 预聚合, 列式存储 | ### 核心挑战与解决方案 1. **维度表实时更新** - 方案:使用**广播状态流**(Broadcast State)同步维度变更 2. **精确一次语义** - 方案:Flink Checkpoint + Kafka事务写入 3. **流批一体** - 方案:Lambda/Kappa+架构,通过**持久化事件日志**支持回溯 > **实时分层核心价值**:将传统T+1的分层ETL升级为**持续流动的数据管道**,实现从原始数据到业务指标的秒级转化[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值