首页 > 其他分享 >数仓开发之ODS层

数仓开发之ODS层

时间:2024-03-15 14:46:03浏览次数:30  
标签:COMMENT 数仓 ods INT car ODS 开发 fuel data

优秀可靠的数仓体系,需要良好的数据分层结构。合理的分层,能够使数据体系更加清晰,使复杂问题得以简化。以下是该项目的分层规划。

1 设计要点

(1)ODS层的表结构设计依托于从业务系统同步过来的数据结构

(2)ODS层要保存全部历史数据,故其压缩格式应选择压缩比较高的,此处选择gzip

(3)ODS层表名的命名规范为:ods_表名_单分区增量全量标识(inc/full)。

2 相关表

2.1 整车日志表(增量日志表)

CREATE EXTERNAL TABLE ods_car_data_inc
(
  `vin`                                      STRING  COMMENT '汽车唯一ID',
  `car_status`                               INT     COMMENT '车辆状态',
  `charge_status`                            INT     COMMENT '充电状态',
  `execution_mode`                           INT     COMMENT '运行模式',
  `velocity`                                 INT     COMMENT '车速',
  `mileage`                                  INT     COMMENT '里程',
  `voltage`                                  INT     COMMENT '总电压',
  `electric_current`                         INT     COMMENT '总电流',
  `soc`                                      INT     COMMENT 'SOC',
  `dc_status`                                INT     COMMENT 'DC-DC状态',
  `gear`                                     INT     COMMENT '挡位',
  `insulation_resistance`                    INT     COMMENT '绝缘电阻',
  `motor_count`                              INT     COMMENT '驱动电机个数',
  `motor_list`                              ARRAY<STRUCT<
                                               `id`: INT,
                                               `status`: INT,
                                               `rev`: INT,
                                               `torque`: INT,
                                               `controller_temperature`: INT,
                                               `temperature`: INT,
                                               `voltage`: INT,
                                               `electric_current`: INT
                                             >>      COMMENT '驱动电机列表',
  `fuel_cell_voltage`                        INT     COMMENT '燃料电池电压',
  `fuel_cell_current`                        INT     COMMENT '燃料电池电流',
  `fuel_cell_consume_rate`                   INT     COMMENT '燃料消耗率',
  `fuel_cell_temperature_probe_count`         INT     COMMENT '燃料电池温度探针总数',
  `fuel_cell_temperature`                     INT     COMMENT '燃料电池温度值',
  `fuel_cell_max_temperature`                 INT     COMMENT '氢系统中最高温度',
  `fuel_cell_max_temperature_probe_id`        INT     COMMENT '氢系统中最高温度探针号',
  `fuel_cell_max_hydrogen_consistency`        INT     COMMENT '氢气最高浓度',
  `fuel_cell_max_hydrogen_consistency_probe_id`  INT COMMENT '氢气最高浓度传感器代号',
  `fuel_cell_max_hydrogen_pressure`           INT     COMMENT '氢气最高压力',
  `fuel_cell_max_hydrogen_pressure_probe_id`   INT    COMMENT '氢气最高压力传感器代号',
  `fuel_cell_dc_status`                       INT     COMMENT '高压DC-DC状态',
  `engine_status`                             INT     COMMENT '发动机状态',
  `crankshaft_speed`                          INT     COMMENT '曲轴转速',
  `fuel_consume_rate`                         INT     COMMENT '燃料消耗率',
  `max_voltage_battery_pack_id`               INT     COMMENT '最高电压电池子系统号',
  `max_voltage_battery_id`                    INT     COMMENT '最高电压电池单体代号',
  `max_voltage`                              INT     COMMENT '电池单体电压最高值',
  `min_temperature_subsystem_id`              INT     COMMENT '最低电压电池子系统号',
  `min_voltage_battery_id`                    INT     COMMENT '最低电压电池单体代号',
  `min_voltage`                              INT     COMMENT '电池单体电压最低值',
  `max_temperature_subsystem_id`              INT     COMMENT '最高温度子系统号',
  `max_temperature_probe_id`                  INT     COMMENT '最高温度探针号',
  `max_temperature`                           INT     COMMENT '最高温度值',
  `min_voltage_battery_pack_id`               INT     COMMENT '最低温度子系统号',
  `min_temperature_probe_id`                  INT     COMMENT '最低温度探针号',
  `min_temperature`                           INT     COMMENT '最低温度值',
  `alarm_level`                              INT     COMMENT '报警级别',
  `alarm_sign`                               INT     COMMENT '通用报警标志',
  `custom_battery_alarm_count`                INT     COMMENT '可充电储能装置故障总数N1',
  `custom_battery_alarm_list`                 ARRAY<INT> COMMENT '可充电储能装置故障代码列表',
  `custom_motor_alarm_count`                  INT     COMMENT '驱动电机故障总数N2',
  `custom_motor_alarm_list`                   ARRAY<INT> COMMENT '驱动电机故障代码列表',
  `custom_engine_alarm_count`                 INT     COMMENT '发动机故障总数N3',
  `custom_engine_alarm_list`                  ARRAY<INT> COMMENT '发动机故障代码列表',
  `other_alarm_count`                         INT     COMMENT '其他故障总数N4',
  `other_alarm_list`                          ARRAY<INT> COMMENT '其他故障代码列表',
  `battery_count`                             INT     COMMENT '单体电池总数',
  `battery_pack_count`                        INT     COMMENT '单体电池包总数',
  `battery_voltages`                          ARRAY<INT> COMMENT '单体电池电压值列表',
  `battery_temperature_probe_count`            INT     COMMENT '单体电池温度探针总数',
  `battery_pack_temperature_count`             INT     COMMENT '单体电池包总数',
  `battery_temperatures`                      ARRAY<INT> COMMENT '单体电池温度值列表',
  `timestamp`                                 BIGINT  COMMENT '日志采集时间'
)
COMMENT '整车日志表'
PARTITIONED BY (`dt` STRING COMMENT '统计日期')
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.JsonSerDe'
LOCATION '/warehouse/car_data/ods/ods_car_data_inc';

2.2 汽车信息表(全量表)

drop table if exists ods_car_info_full;
CREATE EXTERNAL TABLE IF NOT EXISTS ods_car_info_full (
  `id` string COMMENT '车辆唯一编码',
  `type_id` string COMMENT '车型ID',
  `type` string COMMENT '车型',
  `sale_type` string COMMENT '销售车型',
  `trademark` string COMMENT '品牌',
  `company` string COMMENT '厂商',
  `seating_capacity` int COMMENT '准载人数',
  `power_type` string COMMENT '车辆动力类型',
  `charge_type` string COMMENT '车辆支持充电类型',
  `category` string COMMENT '车辆分类',
  `weight_kg` int COMMENT '总质量(kg)',
  `warranty` string COMMENT '整车质保期(年/万公里)'
)
COMMENT '整车信息表'
PARTITIONED BY (dt string COMMENT '统计日期')
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/warehouse/car_data/ods/ods_car_info_full';

3 数据装载

#!/bin/bash

APP='car_data'

# 判断第二个参数是否填写 如果填写使用作为日期 如果没有填写 默认使用昨天作为日期
if [ -n "$2" ]; then
	# statements
	do_date=$2
else
	do_date=`date -d '-1 day' +%F`
fi

case "$1" in
  "ods_car_data_inc")
    hive -e "LOAD DATA INPATH '/origin_data/car_data_ful1/$do_date' INTO TABLE $APP.ods_car_data_inc PARTITION (dt='$do_date');"
    ;;
  "ods_car_info_full")
    hive -e "LOAD DATA INPATH '/origin_data/car_info_full/$do_date' INTO TABLE $APP.ods_car_info_full PARTITION (dt='$do_date');"
    ;;
  "all")
    hive -e "LOAD DATA INPATH '/origin_data/car_data_ful1/$do_date' INTO TABLE $APP.ods_car_data_inc PARTITION (dt='$do_date');"
    hive -e "LOAD DATA INPATH '/origin_data/car_info_full/$do_date' INTO TABLE $APP.ods_car_info_full PARTITION (dt='$do_date');"
    ;;
  *)
    echo "Usage: $0 {ods_car_data_inc|ods_car_info_full|all}"
    ;;
esac

确保在Hive加载数据之前,数据文件已经存在于对应的HDFS路径中,且表的分区字段名是正确的。在运行脚本之前,授予其执行权限,使用以下命令。然后根据你的需求执行脚本:

./your_script_name.sh ods_car_data_inc
./your_script_name.sh ods_car_info_full

./your_script_name.sh all 2024-03-11

写好脚本,以后放入 dophinschedule 调度器每天跑就行。实现将 HDFS 数据载入 ods表 中。

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都技术专家兼架构,多家大厂后端一线研发经验,各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化
  • 活动&优惠券等营销中台建设
  • 交易平台及数据中台等架构和开发设计

目前主攻降低软件复杂性设计、构建高可用系统方向。

参考:

本文由博客一文多发平台 OpenWrite 发布!

标签:COMMENT,数仓,ods,INT,car,ODS,开发,fuel,data
From: https://www.cnblogs.com/JavaEdge/p/18075354

相关文章

  • java毕业设计-基于springboot开发的会员制医疗预约服务管理信息系统-毕业论文+答辩PPT
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构三、系统实现展示1、系统功能模块2、管理员功能模块3、医生功能模块3、会员功能模块四、毕设内容和源代码获取总结java毕业设计-基于springboot开发的会员制医疗预......
  • golang 开发经验
    介绍本篇章将简述,使用golang开发的时候遇到的一些坑,随时更新中~go语法gin框架ctx.Json()细节gin配置路由函数的时候,调用的回调函数,如getBook,在调用c.JSON(200,msg{"hxdyjx",18,})时,单线程情况,必须要执行完,return之前的所有代码才会返回packagemainimport( "g......
  • Java毕业设计-基于springboot开发的4S店车辆管理系统-毕业论文+答辩PPT(附源代码+演示
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构三、系统实现展示1、系统登录2、管理员功能模块3、销售员功能模块4、维修员功能模块四、毕设内容和源代码获取总结Java毕业设计-基于springboot开发的4S店车辆管理系......
  • 【嵌入式开发】288
    【嵌入式开发】PSC预分频器函数的深入理解在嵌入式系统的定时器(TIM)功能中,PSC(预分频器)是一个关键组件,它负责调整输入时钟信号的频率,以便为定时器提供一个适合的计数速率。对PSC预分频器函数的深入理解,是优化定时器使用、确保精确计时和避免潜在问题的关键。PSC预分频器的......
  • 常用Shell脚本 - 开发环境安装
    功能描述在AmazonLinux上快速安装开发环境,包括Python3.11.8,Nodejs,npm,yarn,GO工具。#!/bin/bash#@Author:LanShiyun#@CreateTime:2024/3/15#@FileName:install_development_env.sh#@Version:1.0#@Software:VSCode#@UpdateTime:2024/3/15#......
  • 大模型应用开发-大模型token等基本概念及参数和内存的关系
    大模型相关目录大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容从0起步,扬帆起航。大模型应用向开发路径及一点个人思考大模型应用开发实用开源项目汇总大模型问答项目问答性能评估方法大模型......
  • 大模型应用开发-华为大模型生态规划
    大模型相关目录大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容从0起步,扬帆起航。大模型应用向开发路径及一点个人思考大模型应用开发实用开源项目汇总大模型问答项目问答性能评估方法大模型......
  • 短剧市场规模不断扩大,短剧APP开发助力其获得收益
    近几年,短剧迅速发展了起来,短剧剧情轻松有趣、节奏快、剧情紧凑,非常符合当下生活节奏快的大众。当下短剧不仅获得了大众的关注,还吸引了不少人入市。短剧的成本低,回报率高,能够带来丰富的收益。随着互联网技术的发展,短剧app系统开发成为了当下短剧的新领域。在短剧app上,观众可以......
  • 关于mcu不适用ide,使用交叉编译工具开发的问题
    背景本文以ti的msp430系列单片机为例首先去官网下载交叉编译链https://www.ti.com.cn/tool/cn/MSP430-GCC-OPENSOURCE我们这里用windows做测试,下载windwos的就可以安装以后参照这个https://zhuanlan.zhihu.com/p/356963477......
  • 使用Python开发桌面应用程序
    前言在本教程中,我们将使用Python编写一个功能强大的桌面应用程序,用于数据清洗、压缩、合并excel文件。该程序基于PySide6库和其他辅助库进行开发,提供了直观的用户界面和易于使用的功能。下面我们将对代码进行分块介绍。(底部附项目完整代码)导入所需库和模块在程序的开头,我们......