助力工业物联网,工业大数据之ODS层构建:代码结构及修改【九】

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 助力工业物联网,工业大数据之ODS层构建:代码结构及修改【九】

01:ODS层构建:代码结构及修改

  • 目标:了解整个自动化代码的项目结构及实现配置修改
  • 路径
  • step1:工程代码结构
  • step2:代码模块功能
  • step3:代码配置修改
  • 实施
  • 工程代码结构

  • 代码模块功能
  • auto_create_hive_table:用于实现ODS层与DWD层的建库建表的代码
  • cn.itcast
  • datatohive
  • CHiveTableFromOracleTable.py:用于创建Hive数据库、以及获取Oracle表的信息创建Hive表等
    - CreateMetaCommon.py:定义了建表时固定的一些字符串数据,数据库名称、分层名称、文件类型属性等
    - CreateHiveTablePartition.py:用于手动申明ODS层表的分区元数据
    - LoadData2DWD.py:用于实现将ODS层的数据insert到DWD层表中
    - fileformat
    - AvroTableProperties.py:Avro文件格式对象,用于封装Avro建表时的字符串
    - OrcTableProperties.py:Orc文件格式对象,用于封装Orc建表时的字符串
    - OrcSnappyTableProperties.py:Orc文件格式加Snappy压缩的对象
    - TableProperties.py:用于获取表的属性的类
  • entity
  • TableMeta.py:Oracle表的信息对象:用于将表的名称、列的信息、表的注释进行封装
  • ColumnMeta.py:Oracle列的信息对象:用于将列的名称、类型、注释进行封装
  • utils
- OracleHiveUtil.py:用于获取Oracle连接、Hive连接
  • FileUtil.py:用于读写文件,获取所有Oracle表的名称
  • TableNameUtil.py:用于将全量表和增量表的名称放入不同的列表中
  • ConfigLoader.py:用于加载配置文件,获取配置文件信息
  • OracleMetaUtil.py:用于获取Oracle中表的信息:表名、字段名、类型、注释等
  • EntranceApp.py:程序运行入口,核心调度运行的程序
# todo:1-获取Oracle、Hive连接,获取所有表名
    # todo:2-创建ODS层数据库
    # todo:3-创建ODS层数据表
    # todo:4-手动申明ODS层分区数据
    # todo:5-创建DWD层数据库以及数据表
    # todo:6-加载ODS层数据到DWD层

todo:7-关闭连接,释放资源

  • resource
  • config.txt:Oracle、Hive、SparkSQL的地址、端口、用户名、密码配置文件
  • config
  • common.py:用于获取日志的类
  • settings.py:用于配置日志记录方式的类
  • log
  • itcast.log:日志文件
  • dw:用于存储每一层构建的核心配置文件等
  • 重点关注:dw.ods.meta_data.tablenames.txt:存储了整个ODS层的表的名称
  • 代码配置修改
  • 修改1:auto_create_hive_table.cn.itcast.EntranceApp.py
# 51行:修改为你实际的项目路径对应的表名文件
tableList = FileUtil.readFileContent("D:\\PythonProject\\OneMake_Spark\\dw\\ods\\meta_data\\tablenames.txt")
  • 修改2:auto_create_hive_table.cn.itcast.utils.ConfigLoader
# 10行:修改为实际的连接属性配置文件的地址
config.read('D:\\PythonProject\\OneMake_Spark\\auto_create_hive_table\\resources\\config.txt')
  • 小结
  • 了解整个自动化代码的项目结构及实现配置修改

02:ODS层构建:连接代码及测试

  • 目标:阅读连接代码及实现连接代码测试
  • 路径
  • step1:连接代码讲解
  • step2:连接代码测试
  • 实施
  • 为什么要获取连接?
  • Python连接Oracle:获取表的元数据
  • 表的信息:TableMeta
  • 表名
  • 表的注释
  • list:[列的信息]
  • 列的信息:ColumnMeta
  • 列名
  • 列的注释
  • 列的类型
  • 类型长度
  • 类型精度
  • Python连接HiveServer或者Spark的ThriftServer:提交SQL语句
  • 连接代码讲解
  • step1:怎么获取连接?
cx_Oracle.connect(ORACLE_USER, ORACLE_PASSWORD, dsn)
  • Hive/SparkSQL:安装Python操作Hive库包:PyHive
```
hive.Connection(host=SPARK_HIVE_HOST, port=SPARK_HIVE_PORT, username=SPARK_HIVE_UNAME, auth='CUSTOM', password=SPARK_HIVE_PASSWORD)
```
  • step2:连接时需要哪些参数?
  • Oracle:主机名、端口、用户名、密码、SID
  • Hive:主机名、端口、用户名、密码
  • step3:如果有100个代码都需要构建Hive连接,怎么解决呢?
  • 将所有连接参数写入一个配置文件:resource/config.txt
  • 通过配置文件的工具类获取配置:ConfigLoader
  • step4:在ODS层建101张表,表名怎么动态获取呢?
  • 读取表名文件:将每张表的名称都存储在一个列表中
  • step5:ODS层的表分为全量表与增量表,怎么区分呢?
  • 通过对@符号的分割,将全量表和增量表的表名存储在不同的列表中
  • 连接代码测试
  • 启动虚拟运行环境

  • 运行测试代码
  • 注释掉第2 ~ 第6阶段的内容
  • 取消测试代码的注释
  • 执行代码观察结果

  • 小结
  • 阅读连接代码及实现连接代码测试

03:ODS层构建:建库代码及测试

  • 目标:阅读ODS建库代码及实现测试
  • 路径
  • step1:代码讲解
  • step2:代码测试
  • 实施
  • 代码讲解
  • step1:ODS层的数据库名称叫什么?
one_make_ods
  • step2:如何使用PyHive创建数据库?
  • 第一步:先获取连接
  • 第二步:拼接SQL语句,从连接对象中获取一个游标
  • 第三步:使用游标执行SQL语句
  • 第四步:释放资源
  • 代码测试
  • 注释掉第3 ~ 第6阶段的内容
  • 运行代码,查看结果

  • 小结
  • 阅读ODS建库代码及实现测试

04:ODS层构建:建表代码及测试

  • 目标:阅读ODS建表代码及实现测试
  • 路径
  • step1:代码讲解
  • step2:代码测试
  • 实施
  • 代码讲解
  • step1:表名怎么获取?
tableNameList【full_list,incr_list】
full_list:全量表名的列表
incr_list:增量表名的列表
  • step2:建表的语句是什么,哪些是动态变化的?
create external table 数据库名称.表名
comment '表的注释'
partitioned by
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
location '这张表在HDFS上的路径'
TBLPROPERTIES ('这张表的Schema文件在HDFS上的路径')
  • 表名
  • 表的注释
  • 表的HDFS地址
  • Schema文件的HDFS地址
  • step3:怎么获取表的注释?
  • 从Oracle中获取:从系统表中获取某张表的信息和列的信息
select
       columnName, dataType, dataScale, dataPercision, columnComment, tableComment
from
(
    select
           column_name columnName,
           data_type dataType,
           DATA_SCALE dataScale,
           DATA_PRECISION dataPercision,
           TABLE_NAME
    from all_tab_cols where 'CISS_CSP_WORKORDER' = table_name) t1
    left join (
        select
               comments tableComment,TABLE_NAME
        from all_tab_comments WHERE 'CISS_CSP_WORKORDER' = TABLE_NAME) t2
        on t1.TABLE_NAME = t2.TABLE_NAME
    left join (
        select comments columnComment, COLUMN_NAME
        from all_col_comments WHERE TABLE_NAME='CISS_CSP_WORKORDER') t3
        on t1.columnName = t3.COLUMN_NAME;
  • step4:全量表与增量表有什么区别?
  • 区别1:表名不一样
  • full_table_list
  • incr_table_list
  • 区别2:路径不一样
  • /data /dw /ods /one_make /full /Oracle库名.表名
  • /data /dw /ods /one_make /incr /Oracle库名.表名
  • step5:如何实现自动化建表?
  • 自动化创建全量表
  • 获取全量表名
  • 调用建表方法:数据库名称、表名、全量标记
  • 通过Oracle工具类获取表的信息【表的名称、表的注释、字段信息等】
  • 拼接建表语句
  • 执行SQL语句
  • 自动化创建增量表
  • 获取增量表名
  • 调用建表方法:数据库名称、表名、增量标记
  • 通过Oracle工具类获取表的信息【表的名称、表的注释、字段信息等】
  • 拼接建表语句
  • 执行SQL语句
  • 代码测试
  • 注释掉第4~ 第6阶段的内容
  • 运行代码,查看结果

  • 小结
  • 阅读ODS建表代码及实现测试


相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
12天前
|
机器学习/深度学习 供应链 大数据
【2023Mathorcup大数据】B题 电商零售商家需求预测及库存优化问题 python代码解析
本文提供了2023年MathorCup大数据竞赛B题的电商零售商家需求预测及库存优化问题的Python代码解析,涉及数据预处理、特征工程、时间序列预测、聚类分析以及模型预测性能评价等步骤。
48 0
|
9天前
|
SQL 监控 大数据
"解锁实时大数据处理新境界:Google Dataflow——构建高效、可扩展的实时数据管道实践"
【8月更文挑战第10天】随着大数据时代的发展,企业急需高效处理数据以实现即时响应。Google Dataflow作为Google Cloud Platform的强大服务,提供了一个完全托管的流处理与批处理方案。它采用Apache Beam编程模型,支持自动扩展、高可用性,并能与GCP服务无缝集成。例如,电商平台可通过Dataflow实时分析用户行为日志:首先利用Pub/Sub收集数据;接着构建管道处理并分析这些日志;最后将结果输出至BigQuery。Dataflow因此成为构建实时数据处理系统的理想选择,助力企业快速响应业务需求。
33 6
|
7天前
|
存储 分布式计算 数据处理
面向业务增长的数据平台构建策略
【8月更文第13天】为了构建一个能够支持企业业务增长的数据平台,我们需要考虑几个关键的方面:数据的收集与整合(数据集成)、存储、处理和分析。本文将详细介绍这些步骤,并提供具体的代码示例来帮助理解。
17 1
|
13天前
|
机器学习/深度学习 数据采集 大数据
2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题二建模方案及代码实现详解
本文详细介绍了2022年第三届MathorCup高校数学建模挑战赛大数据竞赛赛道B的问题二的建模方案和Python代码实现,包括数据预处理、特征工程、模型训练以及预测结果的输出,旨在通过数据分析与建模方法帮助中国移动北京公司提升客户满意度。
30 2
|
12天前
|
机器学习/深度学习 算法 大数据
【2023年MathorCup高校数学建模挑战赛-大数据竞赛】赛道A:基于计算机视觉的坑洼道路检测和识别 python 代码解析
本文提供了2023年MathorCup高校数学建模挑战赛大数据竞赛赛道A的解决方案,涉及基于计算机视觉的坑洼道路检测和识别任务,包括数据预处理、特征提取、模型建立、训练与评估等步骤的Python代码解析。
22 0
【2023年MathorCup高校数学建模挑战赛-大数据竞赛】赛道A:基于计算机视觉的坑洼道路检测和识别 python 代码解析
|
13天前
|
机器学习/深度学习 数据采集 大数据
2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题一建模方案及代码实现详解
本文详细介绍了2022年第三届MathorCup高校数学建模挑战赛大数据竞赛赛道B的题目——北京移动用户体验影响因素研究,提供了问题一的建模方案、代码实现以及相关性分析,并对问题二的建模方案进行了阐述。
29 0
2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题一建模方案及代码实现详解
|
15天前
|
机器学习/深度学习 数据采集 算法
【 2021 MathorCup杯大数据挑战赛 A题 二手车估价】初赛复赛总结、方案代码及论文
总结了2021 MathorCup杯大数据挑战赛A题“二手车估价”的初赛和复赛经验,包括题目要求、解题思路、所用方法和结果,提供了详细的数据分析、模型构建、论文撰写和工具使用技巧,并展示了初赛和复赛的论文。
25 2
|
22天前
|
存储 传感器 安全
云上智能物联网平台:构建未来智联世界的基石
四、未来发展趋势 4.1 边缘计算的融合 随着物联网设备数量的不断增加和数据量的快速增长,边缘计算将成为云上智能物联网平台的重要组成部分。通过将计算能力和数据存储能力下沉到边缘侧,可以减少数据传输延迟和带宽消耗,提高系统的响应速度和稳定性。
75 7
|
22天前
|
存储 搜索推荐 数据建模
阿里巴巴大数据实践之数据建模:构建企业级数据湖
阿里巴巴通过构建高效的数据湖和实施先进的数据建模策略,实现了数据驱动的业务增长。这些实践不仅提升了内部运营效率,也为客户提供了更好的服务体验。随着数据量的不断增长和技术的不断创新,阿里巴巴将持续优化其数据建模方法,以适应未来的变化和发展。
|
14天前
|
数据采集 人工智能 数据挖掘
【钉钉杯大学生大数据挑战赛】初赛B 航班数据分析与预测 Python代码实现Baseline
本文提供了参加"钉钉杯大学生大数据挑战赛"初赛B的航班数据分析与预测项目的Python代码实现Baseline。内容包括题目背景、思路分析、训练集和测试集的预处理、模型训练与预测、特征重要性分析,以及代码下载链接。预处理步骤涉及读取数据、时间信息处理、前序航班延误时间计算、天气信息匹配等。模型训练使用了Gradient Boosting Classifier,并对模型的准确率和特征重要性进行了评估。
53 0

热门文章

最新文章