助力工业物联网,工业大数据之ODS层构建:申明分区代码及测试【十】

文章目录

    • 知识点13:ODS层构建:申明分区代码及测试
    • 知识点14:ODS层与DWD层区别
    • 知识点15:DWD层构建:需求分析
    • 知识点16:DWD层构建:建库实现测试
    • 知识点17:DWD层构建:建表实现测试

知识点13:ODS层构建:申明分区代码及测试

  • 目标:阅读ODS申明分区的代码及实现测试

  • 路径

    • step1:代码讲解
    • step2:代码测试
  • 实施

    • 代码讲解

      • step1:为什么要申明分区?

        • 表的分区数据由Sqoop采集到HDFS生成AVRO文件

          /data/dw/ods/one_make/full_imp/ciss4.ciss_base_areas/20210101/part-m-00000.avro
          
        • HiveSQL基于表的目录实现了分区表的创建

          create external table if not exists one_make_ods.ciss_base_areas 
          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'
          tblproperties ('avro.schema.url'='hdfs:///data/dw/ods/one_make/avsc/CISS4_CISS_BASE_AREAS.avsc')
          location '/data/dw/ods/one_make/full_imp/ciss4.ciss_base_areas'
          
        • 但是Hive中没有对应分区的元数据,无法查询到数据

      • step2:怎么申明分区?

        • Alter Table

          alter table 表名 add if not exists partition (dt='值')
          location 'HDFS上的分区路径'
          
        • 例如

          alter table one_make_ods.ciss_base_areas add if not exists partition (dt='20210101')
          location '/data/dw/ods/one_make/full_imp/ciss4.ciss_base_areas/20210101'
          
      • step3:如何自动化实现每个表的分区的申明?

        • 获取分区工具类实例
        • 调用申明分区的方法
          • 对所有全量表调用申明分区的方法:数据库名称、表名、全量标记、分区值
          • 对所有增量表调用申明分区的方法:数据库名称、表名、增量标记、分区值
        • 拼接SQL
        • 执行SQL
    • 代码测试

      • 注释掉第5 ~ 第6阶段的内容
    • 运行代码,查看结果

  • 小结

    • 阅读ODS申明分区的代码及实现测试

知识点14:ODS层与DWD层区别

  • 目标:理解ODS层与DWD层的区别

  • 路径

    • step1:内容区别
    • step2:设计区别
    • step3:实现区别
  • 实施

    • 内容区别

      • ODS:原始数据
      • DWD:对ODS层ETL以后的数据
      • 本次数据来源于Oracle数据库,没有具体的ETL的需求,可以直接将ODS层的数据写入DWD层
    • 设计区别

      • ODS层:Avro格式分区数据表
      • DWD层:Orc格式分区数据表
    • 实现区别

      • ODS层建表:基于avsc文件指定Schema建表

        create external table if not exists one_make_ods.ciss_base_areas 
        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'
        tblproperties ('avro.schema.url'='hdfs:///data/dw/ods/one_make/avsc/CISS4_CISS_BASE_AREAS.avsc')
        location '/data/dw/ods/one_make/full_imp/ciss4.ciss_base_areas'
        
      • DWD层建表:自己指定每个字段的Schema建表

        create external table if not exists one_make_dwd.ciss_base_areas(
        	ID string,
        	AREANAME string,
        	PARENTID string,
        	SHORTNAME string,
        	LNG string,
        	LAT string,
        	RANK bigint,
        	POSITION string,
        	SORT bigint
        ) partitioned by (dt string) 
        stored as orc
        location '/data/dw/dwd/one_make/ciss_base_areas';
        
  • 小结

    • 理解ODS层与DWD层的区别

知识点15:DWD层构建:需求分析

  • 目标掌握DWD层的构建需求

  • 路径

    • step1:整体需求
    • step2:建库需求
    • step3:建表需求
  • 实施

    • 整体需求:将ODS层的数据表直接加载到DWD层

      insert into  dwd partition (dt = '20210101')
      select
      	*
      from ods
      where dt=20210101
      
    • 建库需求:创建DWD层数据库one_make_dwd

    • 建表需求:将ODS层中的每一张表创建一张对应的DWD层的表

      • 问题1:建表的语法是什么?

        create external table dwd.tbname(
        	字段名 字段类型 字段注释
        )
        partitioned by (dt string)
        location '/data/dw/dwd/one_make/ciss_base_areas';
        
      • 问题2:表的名称名是什么,怎么获取?

        • 不分全量和增量
        • 所有表的名称都在列表中
      • 问题3:表的注释怎么来?

        • Oracle元数据中有
      • 问题4:表的字段怎么获取?

        • Oracle元数据中有
      • 问题5:Oracle中的字段类型如果与Hive中的类型不一致怎么办?

        • 将Oracle中Hive没有类型转换为Hive的类型
  • 小结

    • 掌握DWD层的构建需求

知识点16:DWD层构建:建库实现测试

  • 目标阅读DWD建库代码及实现测试

  • 路径

    • step1:代码讲解
    • step2:代码测试
  • 实施

    • 代码讲解

      • step1:DWD层的数据库名称是什么,建库的语法是什么?

        create database if not exists one_make_dwd;
        
      • step2:如何实现DWD层数据库的构建?

        cHiveTableFromOracleTable.executeCreateDbHQL(CreateMetaCommon.DWD_NAME)
        
    • 代码测试

      • 注释掉第5.2 ~ 第6阶段的内容

      • 运行代码,查看结果

        image-20211009165536267

  • 小结

    • 阅读DWD建库代码及实现测试

知识点17:DWD层构建:建表实现测试

  • 目标阅读DWD建表代码及实现测试

  • 路径

    • step1:代码讲解
    • step2:代码测试
  • 实施

    • 代码讲解

      • step1:如何获取所有表名?

        allTableName = [i for j in tableNameList for i in j]
        
        • 列表推导式
      • step2:建表的语句是什么,哪些是动态变化的?

        create external table if not exists one_make_dwd.ciss_base_areas(
        	ID string comment '字段的注释',
        	AREANAME string comment '字段的注释',
        	PARENTID string comment '字段的注释',
        	SHORTNAME string comment '字段的注释',
        	LNG string comment '字段的注释',
        	LAT string comment '字段的注释',
        	RANK bigint comment '字段的注释',
        	POSITION string comment '字段的注释',
        	SORT bigint comment '字段的注释'
        ) 
        comment '表的注释'
        partitioned by (dt string) stored as orc
        location '/data/dw/dwd/one_make/ciss_base_areas';
        
        • 动态变化的信息如下:
          • 表名,表的注释
          • 字段
          • 路径
      • step3:怎么获取字段信息?

      • step4:Oracle字段类型与Hive/SparkSQL字段类型不一致怎么办?

        • timestamp => long
        • number => bigint | dicimal
        • other => String
      • step4:HDFS上的路径是什么?

        /data/dw/dwd/one_make/tableName
        
      • step5:如何实现自动化

        • 遍历表名,对每张表调用自动化建表的方法:数据库名称、表的名称、None【不分全量或者增量】
        • 从Oracle中获取字段名,并实现类型转换
        • 添加表的注释、分区信息
        • 添加表的存储格式
        • 指定表的存储路径
        • 执行SQL语句
    • 代码测试

      • 注释掉 第6阶段的内容

      • 运行代码,查看结果

        image-20211009171202408

  • 小结

    • 阅读DWD建表代码及实现测试

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【NLP开发】Python实现聊天机器人(ChatterBot,集成web服务)

🍺NLP开发系列相关文章编写如下🍺: 🎈【NLP开发】Python实现词云图🎈🎈【NLP开发】Python实现图片文字识别🎈🎈【NLP开发】Python实现中文、英文分词🎈🎈【N…

Ubuntu搭建VPN服务

PPTD协议 此协议据说安全级别不高,苹果系统已经不支持,但windows依然支持 1.安装,root账号登录服务器 apt-get update apt-get install pptpd 2.配置主机ip及连接主机的设备所分配ip池,客户端分配的内网ip段。 vim /etc/pptpd.conf 将以下两行注释去…

【计算机视觉】最强 Zero-Shot 视觉应用:Grounding DINO + Segment Anything + Stable Diffusion

文章目录 一、前言二、功能介绍2.1 功能一2.2 功能二2.3 其他有趣的功能 三、总结 一、前言 用 Midjourney 花一个小时做的项目 logo 图: 解释一下 logo 的含义:一只坐在地上的马赛克风格的熊。 坐在地面上是因为 ground 有地面的含义,然后分…

redi缓存使用

1、缓存的特征 第一个特征:在一个层次化的系统中,缓存一定是一个快速子系统,数据存在缓存中时,能避免每次从慢速子系统中存取数据。 第二个特征:缓存系统的容量大小总是小于后端慢速系统的,不可能把所有数…

R实践——paleobioDB详解(paleobiology database)

paleobioDB详解(paleobiology database) PBDB初步认识paleobioDB一个简单的例子 所有函数详解1. pbdb_collection描述用法参数细节值例子 2. pbdb_collections描述用法参数值例子 3. pbdb_collections_geo描述用法参数值例子 4. pbdb_interval描述用法参…

Oracle 体系结构

文章目录 Oracle体系结构Oracle的内存结构Oracle的进程结构服务器进程后台进程可选后台进程 物理存储结构逻辑存储结构 概念: Oracle server由Oracle instance和Oracle database组成,Oracle instance由后台进程和共享内存组成,Oracle的实例包…

层次分析法及找工作问题实战

学习知识要实时简单回顾,我把学习的层次分析法简单梳理一下,方便入门与复习。 AHP 层次分析法(Analytic Hierarchy Process,简称 AHP)是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那…

认识监听器(Listener)

监听器是什么? 监听器(Listener)是一种运行在后台的程序,它主要用于监控某些事件在系统中的发生,并且根据这些事件做一些特定的处理。在Web应用程序中,监听器可以观察ServletContext、HttpSession以及Serv…

vue项目为例解决element ui 时间选择器 picker使用样式穿透不起作用问题

今天在开发中 需要修改时间选择器弹出的这个组件的样式 但这个东西比较坑爹 首先 不能影响其他组件 就是其他组件用了时间选择器 不能受到我们写的样式的影响 那么 就只好穿透了 但你会发现 这东西是作用与body下的 就很坑 穿透我试了挺久的 不起作用 但官方文档有提供给我们一…

体验 gpt4free

体验 gpt4free 什么是 gpt4free效果演示安装 ffmpeg启动 gpt4free访问 gpt4free gui其他 什么是 gpt4free GPT4Free 是一个由 xtekky 创建的基于 OpenAI GPT-4 和 GPT-3.5 的 API。它可以向用户提供类似于 OpenAI GPT-3 的功能,如文本生成、问答、翻译等。 GPT4Fre…

UE5.1.1 C++ 从0开始 (1.人物移动)

开个天坑,UE5.1.1的移动代码做了一个大更新,对于我这种万年蓝图然后正在转C的人来说可以说是个挑战也可以说是个更方便我去工作的一个点。同时斯坦福大学的那个教程的开头几个章节就不适用了,对于学习UE5.1.1的同学来说。所以我这里会尽量每天…

c# 数据保存为PDF(二) (Aspose pdf篇)

文章目录 前言关于Aspose PDF使用Aspose.Pdf常用的命名空间和类库1 创建简单的PDF文档2 美化PDF样式2.1 创建测试数据2.2 项目头部样式2.3 全部代码 小结附录参考 前言 项目中需要将数据导出存为PDF格式,试了一下Aspose组件,仅以此记录一下使用感受。 …

为什么半导体FAB生产线需要EAP系统?

在半导体制造中,设备自动化系统EAP(Equipment Automation Program)是不可或缺的重要软件,它是连接MES、RMS、APC、FDC等上层系统和设备层的桥梁,用于管控生产线上的所有机台,并实现设备运行的自动化。 作为…

团队密码管理器Passbolt的安装

老苏下载了吴恩达联手 OpenAI 推出的 Prompt for developer 课程,总长度大概在一个半小时左右,可以让我们学习正确的 ChatGPT Prompt 工程 虽然课程对话是英文,但有中文字幕,课程地址:https://www.aliyundrive.com/s/…

Redux 学习系列(一) —— 基础概念入门篇

简介 Redux 是一个可预测的 JavaScript 应用状态管理容器,也可以说是一个应用数据流框架。 作用 Redux 主要是用作应用状态的管理。它抽离所有组件的状态,构造一个中心化的单独常量状态树(对象)来保存这一整个应用的状态。这棵…

java 学习日记

今天先搞题目 给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] [xi, yi] 。 连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 :|xi - xj| |yi - yj| ,其中 |val| 表示 val 的绝对值。 请你返回将所…

TikTok选品要怎样才能选到爆品?!

对于做TikTok的商家而言,选品是非常重要的,因为一个产品爆了之后能带动其他产品的销量,那我们要如何有效的选品呢? 一、多平台选品逻辑 首先要知道一个点,在独立站爆的品也会在亚马逊爆,而TikTok已经成为一…

4D成像雷达风口,谁在快速崛起?

4D成像雷达正进入规模量产落地的关键窗口期。 高工智能汽车注意到,毫米波雷达的发展某种程度上可以分为两个阶段:第一个阶段,传统毫米波雷达时代,市场基本被博世、大陆、安波福等国际Tier1巨头把持,市场格局长期稳固&…

PyTorch数据加载工具:高效处理常见数据集的利器

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

SpringBoot中策略模式+工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else

场景 设计模式-策略模式在Java中的使用示例: 设计模式-策略模式在Java中的使用示例_java 策略模式示例_霸道流氓气质的博客-CSDN博客 上面讲了策略模式在Java中的使用示例。 下面看一个在SpringBoot中的实际使用示例。 业务场景: 有多个煤矿,信号灯…