网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
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阶段的内容
- 运行代码,查看结果
-
-
小结
- 阅读DWD建库代码及实现测试
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!