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

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

			* 每个人都是一个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:数仓分层回顾

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

image-20210821102418366

+ 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层对应的表中
  • 小结

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

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
      
      
      

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

外链图片转存中…(img-oCKcS7yb-1715404985523)]
[外链图片转存中…(img-VuiShG3x-1715404985523)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 21
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值