助力工业物联网,工业大数据之ODS层构建:需求分析【八】

news2024/11/28 14:41:37

文章目录

    • 01:ODS层构建:需求分析
    • 02:ODS层构建:创建项目环境
    • 03:ODS层构建:代码导入

01:ODS层构建:需求分析

  • 目标:掌握ODS层构建的实现需求

  • 路径

    • step1:目标
    • step2:问题
    • step3:需求
    • step4:分析
  • 实施

    • 目标:将已经采集同步成功的101张表的数据加载到Hive的ODS层数据表中

    • 问题

      • 难点1:表太多,如何构建每张表?

        • 101张表的数据已经存储在HDFS上

        • 建表

          • 方法1:手动开发每一张表建表语句,手动运行

          • 方法2:通过程序自动化建表

            • 拼接建表的SQL语句

              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上的路径
            • 将SQL语句提交给Hive或者Spark来执行

        • 申明分区

          alter table 表名 add partition if not exists partition(key=value)
          
      • 难点2:如果使用自动建表,如何获取每张表的字段信息?

        • Schema文件:每个Avro格式的数据表都对应一个Schema文件

        • 统一存储在HDFS上

  • 需求:加载Sqoop生成的Avro的Schema文件,实现自动化建表

  • 分析

    • step1:代码中构建一个Hive/SparkSQL的连接

    • step2:创建ODS层数据库

      create database if not exists one_make_ods;
      
    • step3:创建ODS层全量表:44张表

      create external table one_make_ods_test.ciss_base_areas
      
      comment '行政地理区域表'
      
      PARTITIONED BY (dt string)
      
      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 '/data/dw/ods/one_make/full_imp/ciss4.ciss_base_areas'
      
      TBLPROPERTIES ('avro.schema.url'='hdfs://bigdata.maynor.cn:9000/data/dw/ods/one_make/avsc/CISS4_CISS_BASE_AREAS.avsc');
      
      • 读取全量表表名

        • 动态获取表名:循环读取文件
      • 获取表的信息:表的注释

        • Oracle:表的信息
        • 从Oracle中获取表的注释
      • 获取表的文件:HDFS上AVRO文件的地址

        /data/dw/ods/one_make/full_imp
        
      • 获取表的Schema:HDFS上的Avro文件的Schema文件地址

        /data/dw/ods/one_make/avsc
        
      • 拼接建表字符串

        • 方式一:直接相加:简单

          str1 = "I "
          str2 = "like China"
          str3 = str1 + str2
          
        • 方式二:通过列表拼接:复杂

      • 执行建表SQL语句

    • step4:创建ODS层增量表:57张表

      • 读取增量表表名

        • 动态获取表名:循环读取文件
      • 获取表的信息:表的注释

        • Oracle:表的信息
        • 从Oracle中获取表的注释
      • 获取表的文件:HDFS上AVRO文件的地址

        /data/dw/ods/one_make/incr_imp
        
      • 获取表的Schema:HDFS上的Avro文件的Schema文件地址

        /data/dw/ods/one_make/avsc
        
      • 拼接建表字符串

      • 执行建表SQL语句

  • 小结

    • 掌握ODS层构建的实现需求

02:ODS层构建:创建项目环境

  • 目标实现Pycharm中工程结构的构建

  • 实施

    • 安装Python3.7环境

      image-20210930150020688

      • 项目使用的Python3.7的环境代码,所以需要在Windows中安装Python3.7,与原先的Python高版本不冲突,正常安装即可
    • 创建Python工程

      image-20210930150438112
    • 安装PyHive、Oracle库

      • step1:在Windows的用户家目录下创建pip.ini文件

        • 例如:C:\Users\Frank\pip\pip.ini

        • 内容:指定pip安装从阿里云下载

          [global]
          
          index-url=http://mirrors.aliyun.com/pypi/simple/
          
          [install]
          
          trusted-host=mirrors.aliyun.com
          
      • step2:将文件添加到Windows的Path环境变量

        image-20210930150905946

      • step3:进入项目环境目录

        • 例如我的项目路径是:D:\PythonProject\OneMake_Spark\venv\Scripts

          image-20210930151306714

        • 将提供的sasl-0.2.1-cp37-cp37m-win_amd64.whl文件放入Scripts目录下

          image-20210930151549478

        • 在CMD中执行以下命令,切换到Scripts目录下

          #切换到D盘
          D:
          #切换到项目环境的Scripts目录下
          cd D:\PythonProject\OneMake_Spark\venv\Scripts
          

          image-20210930151448348

      • step4:CMD中依次执行以下安装命令

        # 安装sasl包 -> 使用pycharm安装,会存在下载失败情况,因此提前下载好,对应python3.7版本
        pip install sasl-0.2.1-cp37-cp37m-win_amd64.whl
        # 安装thrift包
        pip install thrift
        # 安装thrift sasl包One
        pip install thrift-sasl
        # 安装python操作oracle包
        pip install cx-Oracle
        # 安装python操作hive包,也可以操作sparksql
        pip install pyhive
        

        image-20210930152134126

      • step5:验证安装结果

        image-20210930152732079
      • 温馨提示:其实工作中你也可以通过Pycharm直接安装

  • 小结

    • 实现Pycharm中工程结构的构建

03:ODS层构建:代码导入

  • 目标实现Python项目代码的导入及配置

  • 实施

    • Oracle本地驱动目录:将提供的instantclient_12_2目录放入D盘的根目录下

      image-20210930153737086

      • PyHive本地连接配置:将提供的CMU目录放入C盘的根目录下

    image-20210930153652800

    • auto_create_hive_table包

      • 创建路径包

        image-20210930153142799

        auto_create_hive_table.cn.maynor.datatohive
        

        image-20210930154056029

        • 在datatohive的init文件中放入如下代码

          from auto_create_hive_table.cn.maynor.datatohive import LoadData2DWD
          from auto_create_hive_table.cn.maynor.datatohive.CHiveTableFromOracleTable import CHiveTableFromOracleTable
          from auto_create_hive_table.cn.maynor.datatohive.CreateHiveTablePartition import CreateHiveTablePartition
          
        • 其他包的init都放入如下内容

          #!/usr/bin/env python
          # @desc :
          __coding__ = "utf-8"
          __author__ = "maynor"
          
          • 将对应的代码文件放入对应的包或者目录中
  • step1:从提供的代码中复制config、log、resource这三个目录直接粘贴到auto_create_hive_table包下 image-20210930155013278

  • step2:从提供的代码中复制entity、utils、EntranceApp.py这三个直接粘贴到maynor包下 image-20210930155111676

  • step3:从提供的代码中复制fileformat等文件直接粘贴到datatohive包下 image-20210930155239773

    • DW归档目录**:将提供的代码中的dw目录直接粘贴到项目中

      image-20210930155529688

  • 小结

    • 实现Python项目代码的导入及配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/423223.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二甲医院云his系统源码,已在多家医院全面实际使用,系统稳定可靠

云his系统源码,基于云计算技术的B/S架构的HIS系统源码 文末获取联系! 基于云计算技术的B/S架构的HIS系统,为基层医疗机构提供标准化的、信息化的、可共享的医疗信息管理系统,实现医患事务管理和临床诊疗管理等标准医疗管理信息系统…

HTML中的图片标签,真的如你认为的那么简单吗?

今天讨论一个很有意思的话题&#xff1a; HTML 中的图片真的那么简单吗&#xff1f; HTML 中的图片 <img>&#xff1a;图像嵌入元素 MDN Web Docs 地址&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/img 在一开始时&#xff0c;Web 仅有文…

摄影知识整理

目录 焦距 焦距分类 对焦 相机的MF与AF 自动对焦操作 自动对焦方式 镜头防抖 防抖模式 景深 景深的作用 影响景深的因素 景深预览 摄影三大元素 光圈 光圈的作用 光圈与景深的关系 感光度&#xff08;ISO) 注意 感光度的作用 快门 B门与T门 快门速度 闪…

软件工程环境(Maven)—javaEE

文章目录1.如何使用Maven1.1创建一个Maven项目&#xff08;项目使用Maven来进行构建&#xff09;1.2设置项目的信息1.3配置Maven项目&#xff08;在项目路径下pom.xml&#xff0c;Maven配置文件&#xff09;1.4验证配置成功2.Maven的使用2.1观察开发项目结构2.2xml文件2.3Maven…

既然Linux是基于UNIX的操作系统,那为什么UNIX收费而Linux免费?

首先说是不是?再说为什么? 一. Linux是基于UNIX吗? Linux是类UNIX系统&#xff0c;那什么是类UNIX系统呢&#xff1f; 类UNIX系统是指继承UNIX的设计风格演变出来的系统。 类UNIX系统就是长得像UNIX、但实际不是UNIX的系统&#xff1b; 其实本质上就是借鉴了UNIX系统的界…

激光和相机的标定---手动标定的方法

一、手动标定 代码工程&#xff1a;GitHub - Livox-SDK/livox_camera_lidar_calibration: Calibrate the extrinsic parameters between Livox LiDAR and camera 这是Livox提供的手动校准Livox雷达和相机之间外参的方法&#xff0c;并在Mid-40&#xff0c;Horizon和Tele-15上进…

C51 - SPI读写ADC

TSC20461> 项目概述2> 硬件设计3> TSC20463.1> TSC2046功能3.2> TSC2046控制命令3.3> 控制命令总结3.4> SPI协议3.5> 数据转换4> 软件编程4.1> 实现功能4.2> 编程思路4.3> SPI驱动4.4> TSC2046驱动5> 联调测试5.1> VBAT的1/4分压…

【论文简述】DELS-MVS: Deep Epipolar Line Search for Multi-View Stereo(WACV 2023)

一、论文简述 1. 第一作者&#xff1a;Mattia Rossi 2. 发表年份&#xff1a;2023 3. 发表期刊&#xff1a;WACV 4. 关键词&#xff1a;MVS、3D重建、极线搜素 5. 探索动机&#xff1a;目前的方法无论是深度值还是逆深度值&#xff0c;都需要提前确定深度值范围&#xff0…

java反序列化 URLDNS链分析

前言 终于可算是来到java反序列化&#xff0c;在菠萝师傅的一番提醒&#xff0c;我认识到自己不能继续在简单的游荡了&#xff0c;要来到难的地方了。 也庆祝自己终于拥有了勇气。 分析 基础 我相对喜欢先代码在讲原理&#xff0c;这里不怎么了解序列化可以去复习一下javase 可…

黑盒测试用例设计

目录 前言&#xff1a; 一、黑盒测试 二、实验目的 三、实验内容 四、实验步骤 五、实验过程 题目一 1、等价类划分表 2、设计测试用例 3、缺陷 4、代码实现 5、测试结果 题目二 设计测试用例 题目一示例代码&#xff08;java编写&#xff09; 总结 前言&#x…

苹果pencil和平替笔有哪些区别?性价比平替电容笔排行榜

而对于那些把ipad当做学习工具的学生党而言&#xff0c;电容笔就成了日常的必备品。但因为苹果Pencil的售价太贵了&#xff0c;学生们都买不起。因此&#xff0c;最好的选择还是平替电容笔。作为一个ipad的忠实用户&#xff0c;同时也是一个数码产品的热衷者&#xff0c;这两年…

1797F Li Hua and Path(Min-rt树,Max-rt树)

题目链接 题意 &#xff1a; 给你一个大小为nnn的树&#xff0c;我们想求解一个问题&#xff0c;问题的定义是找有多少条路径满足恰好满足路径的端点是路径的最小值ororor最大值条件之一&#xff0c;【注】不能同时满足路径的两个端点是最小值又是最大值 现在增加mmm个操作&am…

【Unity】基于AVFoundation开发MacOS摄像头(二)

【Unity】基于AVFoundation开发MacOS摄像头&#xff08;一&#xff09;_GrimRaider的博客-CSDN博客实现一个Camera设备驱动&#xff0c;代替unity自带WebCamTexturehttps://blog.csdn.net/GrimRaider/article/details/130127229 目标1&#xff1a;实现bridge&#xff0c;创建一…

【Java数据结构——环形链表】判断链表成环与寻找链表成环的入口节点(经典)

判断链表是否成环https://leetcode.cn/problems/linked-list-cycle/description/ 解题核心思路&#xff1a; 定义快慢指针初始引用指向链表的头节点&#xff0c;快指针每向后走两步&#xff0c;慢指针走一步。如果链表中存在环&#xff0c;则快慢指针一定会在某次移动后相遇。 …

一文看懂“低代码、零代码”是什么?有什么区别?

低代码和零代码近几年热度一直居高不下&#xff0c;乍一看&#xff0c;很容易混淆低代码和零代码开发平台—— 因为它们都是传统开发的替代方案&#xff0c;旨在通过类似于可视化编程的功能加速软件开发过程。 但二者根本不是一回事。从开发人员经验 、目标角色到使用场景&…

C++ 学习4

C设计原则 高内聚低耦合 内聚就是一个模块内各个元素彼此结合的紧密程度&#xff0c;高内聚就是一个模块内各个元素彼此结合的紧密程度高。 所谓高内聚是指一个软件模块是由相关性很强的代码组成&#xff0c;只负责一项任务&#xff0c;也就是常说的单一责任原则。 耦合&am…

计算机网络 - TCP的效率与特性

前言 本篇是介绍部分TCP的特性&#xff0c;了解TCP提高传输速率的机制&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录前言1. 滑动窗口2. 流量控制3.拥塞控制4.延时应答5. 捎带应答6. 面向字节流7. 异常…

spring bean

图灵课堂学习笔记 1. BeanFactory与ApplicationContext的关系 p56 ApplicationContext在BeanFactory基础上对功能进行了扩展&#xff0c;例如&#xff1a;监听功能、国际化功能等。BeanFactory的API更偏向底层&#xff0c;ApplicationContext的API大多数是对这些底层API的封…

python带你制作可以随机的自答题程序

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 目录前言环境使用:模块使用:程序实现思路: <模板> 获取题库一. 获取题库 --> 问题答案二. 进行自动答题操作代码展示题库采集自动答题尾语 &#x1f49d;环境使用: 解释器版本 >>> python 3.8 代码编辑器…

数学基础|线性代数回顾

因为学机器学习的时候发现自己线性代数忘光光了&#xff08;悲&#x1f613;&#xff0c;本篇捞一捞当年学线性代数看哔哩哔哩宋浩老师补充记的潦草笔记。 目录 &#x1f4da;线性代数知识点 &#x1f407;向量 &#x1f955;向量的线性组合 &#x1f955;线性相关无关的性…