助力工业物联网,工业大数据之ODS层及DWD层建表语法【七】

这篇具有很好参考价值的文章主要介绍了助力工业物联网,工业大数据之ODS层及DWD层建表语法【七】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ODS层及DWD层构建

01:课程回顾

  1. 一站制造项目的数仓设计为几层以及每一层的功能是什么?

    • ODS:原始数据层:存放从Oracle中同步采集的所有原始数据
    • DW:数据仓库层
      • DWD:明细数据层:存储ODS层进行ETL以后的数据
      • DWB:轻度汇总层:对DWD层的数据进行轻度聚合:关联和聚合
        • 基于每个主题构建主题事务事实表
      • DWS:维度数据层:对DWD层的数据进行维度抽取
        • 基于每个主题的维度需求抽取所有维度表
    • ST:数据应用层
      • 基于DWB和DWS的结果进行维度的聚合
    • DM:数据集市层
      • 用于归档存储公司所有部门需要的shuju
  2. 一站制造项目的数据来源是什么,核心的数据表有哪些?

    • 数据来源:业务系统
    • ERP:公司资产管理系统、财务数据
      • 工程师信息、零部件仓储信息
    • CISS:客户服务管理系统
      • 工单信息、站点信息、客户信息
    • 呼叫中心系统
      • 来电受理信息、回访信息
  3. 一站制造项目中在数据采集时遇到了什么问题,以及如何解决这个问题?

    • 技术选型:Sqoop
    • 问题:发现采集以后生成在HDFS上文件的行数与实际Oracle表中的数据行数不一样,多了
    • 原因:Sqoop默认将数据写入HDFS以普通文本格式存储,一旦遇到数据中如果包含了特殊字符\n,将一行的数据解析为多行
    • 解决
      • 方案一:Sqoop删除特殊字段、替换特殊字符【一般不用】
      • 方案二:更换其他数据文件存储类型:AVRO
        • 数据存储:Hive
        • 数据计算:SparkSQL
  4. 什么是Avro格式,有什么特点?

    • 二进制文本:读写性能更快
    • 独立的Schema:生成文件每一行所有列的信息
      • 对列的扩展非常友好
    • Spark与Hive都支持的类型
  5. 如何实现对多张表自动采集到HDFS?

    • 需求

      • 读取表名
      • 执行Sqoop命令
    • 效果:将所有增量和全量表的数据采集到HDFS上

      • 全量表路径:维度表:数据量、很少发生变化

        /data/dw/ods/one_make/   full_imp   /表名/分区/数据
        
      • 增量表路径:事实表:数据量不断新增,整体相对较大

        /data/dw/ods/one_make/    incr_imp  /表名/分区/数据
        
      • Schema文件的存储目录

        /data/dw/ods/one_make/avsc
        
    • Shell:业务简单,Linux命令支持

    • Python:业务复杂,是否Python开发接口

      • 调用了LinuxShell来运行
  6. Python面向对象的基本应用

    • 语法

      • 定义类

        class 类名:
        	# 属性:变量
        	# 方法:函数
        
      • 定义变量

        key = value
        
      • 定义方法

        def funName(参数):
        	方法逻辑
        	return
        
    • 面向对象:将所有事物以对象的形式进行编程,万物皆对象

      • 对象:是类的实例
    • 对象类:专门用于构造对象的,一般称为Bean,代表某一种实体Entity

      • 类的组成

        class 类名:
        	# 属性:变量
        	# 方法:函数
        
      • 业务:实现人购买商品

        • class Person:
          	# 属性
          	id = 1
          	name = zhangsan
          	age = 18
          	gender = 1
          	……
          	
          	# 方法
          	def eat(self,something):
          		print(f"{self.name} eating {something}")
                  
              def buy(self,something)
              	print(f"{self.name} buy {something}")
          
          • 每个人都是一个Person类的对象
        • 商品

          class Product:
          	# 属性
          	id = 001
          	price = 1000.00
          	size = middle
          	color = blue
          	……
          	
          	# 方法
          	def changePrice(self,newPrice):
          		self.price = newPirce
          
    • 工具类:专门用于封装一些工具方法的,utils,代表某种操作的集合

      • 类的组成:一般只有方法

        class 类名:
        	# 方法:函数
        
      • 字符串处理工具类:拼接、裁剪、反转、长度、转大写、转小写、替换、查找

        class StringUtils:
            
        	def concat(split,args*):
        		split.join(args)
                
        	def reverse(sourceString)
            	return reverse(sourceString)
            
        	……
        
      • 日期处理工具类:计算、转换

        class TimeUitls:
        		
        	def computeTime(time1,time2):
        		return time1-time2
        		
        	def transTimestamp(timestamp):
        		return newDateyyyy-MM-dd HH:mm:ss)
        		
        	def tranfData(date)
        		return timestamp
        
    • 常量类:专门用于定义一些不会发生改变的变量的类

      • 类的组成:一般只有属性

        class 类名:
        	# 属性:不发生变化的属性
        
      • 定义一个常量类

        class Common:
        	ODS_DB_NAME = "one_make_ods"
        	……
        
        • file1.py:创建数据库

          create database if not exists Common.ODS_DB_NAME;
          
          • file2.py:创建表

            ```
            create table if not exists Common.ODS_DB_NAME.tbname
            ```
            
            • file3.py:插入数据到表中

              insert into table  Common.ODS_DB_NAME.tbname
              
            • 问题1:容易写错

            • 问题2:不好修改

02:课程目标

  • 目标:自动化的ODS层与DWD层构建
  • 实现
    • 掌握Hive以及Spark中建表的语法规则
    • 实现项目开发环境的构建
    • 自己要实现所有代码注释
    • ODS层与DWD层整体运行测试成功

03:数仓分层回顾

  • 目标:回顾一站制造项目分层设计

  • 实施

    助力工业物联网,工业大数据之ODS层及DWD层建表语法【七】

    • ODS层 :原始数据层

      • 来自于Oracle中数据的采集

      • 数据存储格式:AVRO

      • ODS区分全量和增量

      • 实现

        • 数据已经采集完成

          /data/dw/ods/one_make/full_imp
          /data/dw/ods/one_make/incr_imp
          
        • step1:创建ODS层数据库:one_make_ods

        • step2:根据表在HDFS上的数据目录来创建分区表

        • step3:申明分区

    • DWD层

      • 来自于ODS层数据
      • 数据存储格式:ORC
      • 不区分全量和增量的
      • 实现
        • step1:创建DWD层数据库:one_make_dwd
        • step2:创建DWD层的每一张表
        • step3:从ODS层抽取每一张表的数据写入DWD层对应的表中
  • 小结文章来源地址https://www.toymoban.com/news/detail-426280.html

    • 回顾一站制造项目分层设计

04:Hive建表语法

  • 目标:掌握Hive建表语法

  • 实施

    CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
    (
        col1Name col1Type [COMMENT col_comment],
        co21Name col2Type [COMMENT col_comment],
        co31Name col3Type [COMMENT col_comment],
        co41Name col4Type [COMMENT col_comment],
        co51Name col5Type [COMMENT col_comment],
        ……
        coN1Name colNType [COMMENT col_comment]
    
    )
    [PARTITIONED BY (col_name data_type ...)]
    [CLUSTERED BY (col_name...) [SORTED BY (col_name ...)] INTO N BUCKETS]
    [ROW FORMAT row_format]
    	row format delimited fields terminated by 
    	lines terminated by
    [STORED AS file_format]
    [LOCATION hdfs_path]
    TBLPROPERTIES
    
    • EXTERNAL:外部表类型(删除表的时候,不会删除hdfs中数据)
      • 内部表、外部表、临时表
    • PARTITIONED BY:分区表结构
      • 普通表、分区表、分桶表
    • CLUSTERED BY:分桶表结构
    • ROW FORMAT:指定分隔符
      • 列的分隔符:\001
      • 行的分隔符:\n
    • STORED AS:指定文件存储类型
      • ODS:avro
      • DWD:orc
    • LOCATION:指定表对应的HDFS上的地址
      • 默认:/user/hive/warehouse/dbdir/tbdir
    • TBLPROPERTIES:指定一些表的额外的一些特殊配置属性
  • 小结

    • 掌握Hive建表语法

05:Avro建表语法

  • 目标:掌握Hive中Avro建表方式及语法

  • 路径

    • step1:指定文件类型
    • step2:指定Schema
    • step3:建表方式
  • 实施

    • Hive官网:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTable

    • DataBrics官网:https://docs.databricks.com/spark/2.x/spark-sql/language-manual/create-table.html

    • Avro用法:https://cwiki.apache.org/confluence/display/Hive/AvroSerDe

    • 指定文件类型

      • 方式一:指定类型

        stored as avro
        
      • 方式二:指定解析类

        --解析表的文件的时候,用哪个类来解析
        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'
        
    • 指定Schema

      • 方式一:手动定义Schema

        CREATE TABLE embedded
        COMMENT "这是表的注释"
        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.literal'='{
            "namespace": "com.howdy",
            "name": "some_schema",
            "type": "record",
            "fields": [ { "name":"string1","type":"string"}]
          }'
        );      	
        
      • 方式二:加载Schema文件

        CREATE TABLE embedded
        COMMENT "这是表的注释"
        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'='file:///path/to/the/schema/embedded.avsc'
        );
        
    • 建表语法

      • 方式一:指定类型和加载Schema文件

        create external table one_make_ods_test.ciss_base_areas
        comment '行政地理区域表'
        PARTITIONED BY (dt string)
        stored as avro
        location '/data/dw/ods/one_make/full_imp/ciss4.ciss_base_areas'
        TBLPROPERTIES ('avro.schema.url'='/data/dw/ods/one_make/avsc/CISS4_CISS_BASE_AREAS.avsc');
        
      • 方式二:指定解析类和加载Schema文件

        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'='/data/dw/ods/one_make/avsc/CISS4_CISS_BASE_AREAS.avsc');
        
        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上的路径')
        

  • 小结

    • 掌握Hive中Avro建表方式及语法

到了这里,关于助力工业物联网,工业大数据之ODS层及DWD层建表语法【七】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 助力工业物联网,工业大数据之工业大数据之油站维度设计【十四】

    目标 :掌握油站维度的需求与设计 路径 step1:需求 step2:设计 实施 需求 :构建油站维度表,得到油站id、油站名称、油站所属的地理区域、所属公司、油站状态等 设计 数据来源 ciss_base_oilstation:油站信息表 eos_dict_type:字典状态类别表,记录所有需要使用字典标记的表

    2024年02月07日
    浏览(77)
  • 助力工业物联网,工业大数据之其他维度:组织机构【十五】

    目标 : 实现组织机构维度的设计及构建 路径 step1:需求 step2:设计 step3:实现 实施 需求 :实现组织机构维度表的构建,得到每个工程师对应的组织机构信息 统计不同服务人员的工单数、核销数等 设计 org_employee:员工信息表【员工id、员工编码、员工名称、用户系统id】

    2024年02月08日
    浏览(52)
  • 助力工业物联网,工业大数据之一站制造业务主题划分【十三】

    目标 : 掌握一站制造的主题域及主题的划分 实施 来源 主题域划分:业务或者部门划分 业务:客户域、广告域、运营域…… 部门:运维域、财务域、销售域…… 数据需求来划分主题 运营域:访问分析报表、转化分析报表、用户属性分析报表、订单分析报表 服务域 安装主

    2024年02月10日
    浏览(43)
  • 助力工业物联网,工业大数据之数仓维度层DWS层构建【十二】

    ODS层与DWD层的功能与区别是什么? ODS:原始数据层 存储格式:AVRO 数据内容:基本与原始数据是一致的 DWD:明细数据层 存储格式:Orc 数据内容:基于与ODS层是一致的 ODS层的需求是什么? 自动化建库建表 建表 表名 表的注释 表对应的HDFS地址 Schema文件的地址 DWD层的需求是什

    2024年02月08日
    浏览(37)
  • 大数据之使用Flink消费Kafka中topic为ods_mall_data的数据,根据数据中不同的表将数据分别分发至kafka的DWD层

    前言 题目: 一、读题分析 二、处理过程 三、重难点分析 总结  本题来源于全国职业技能大赛之大数据技术赛项赛题 - 电商数据处理 - 实时数据处理 注:由于设备问题,代码执行结果以及数据的展示无法给出,可参照我以往的博客其中有相同数据源展示     提示:以下是本

    2024年02月04日
    浏览(49)
  • 数仓及其维度(分层)建模(ODS DWD DWS DWT ADS)

    1. 什么是数仓?         数据仓库,简称数仓,( Data Warehouse ) 。 从逻辑上理解,数据库和数仓没有区别,都是通过数据库软件实现存放数据的地方,只不过从数据量来说,数据仓库要比数据库更庞大。 数仓主要是 为企业制定决策,提供数据支持的。当业务简单,可以

    2023年04月08日
    浏览(37)
  • 一百八十七、大数据离线数仓完整流程——步骤六、在ClickHouse的ADS层建表并用Kettle同步Hive中DWS层的结果数据

    经过6个月的奋斗,项目的离线数仓部分终于可以上线了,因此整理一下离线数仓的整个流程,既是大家提供一个案例经验,也是对自己近半年的工作进行一个总结。 1、ClickHouse的ADS层建库建表语句 --如果不存在则创建hurys_dc_ads数据库 create database if not exists hurys_dc_ads; --使用

    2024年02月07日
    浏览(50)
  • 助力工业物联网,工业大数据之服务域:node_exporter插件【三十七】_node_expoter 电源(1)

    小结 实现node_exporter插件的安装监控Linux指标 07:mysqld_exportor插件 目标 : 实现mysqld_exportor插件的安装监控MySQL指标 实施 上传安装 配置MySQL用户授权 注册服务 启动服务 配置Prometheus 自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入

    2024年04月15日
    浏览(34)
  • 探工业互联网的下一站!腾讯云助力智造升级

    数字化浪潮正深刻影响着传统工业形态。作为第四次工业革命的重要基石,工业互联网凭借其独特的价值快速崛起,引领和推动着产业变革方向。面对数字化时代给产业带来的机遇与挑战,如何推动工业互联网的规模化落地,加速数字经济与实体经济的深度融合,已成为全行

    2024年02月11日
    浏览(42)
  • Ruff物联网数采网关助力工业企业数字化转型,降本增效

    如今,随着工厂数字化转型进程的加速,越来越多的企业对于设备数据感知层及传输层的应用越来越重视,因此工业数采网关也走进了很多人的视野,在工厂数字化转型中扮演着关键角色。 物联网数据采集网关能将各种传感器、执行器等设备连接在一起,通过收集、处理和传

    2024年02月03日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包