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

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

知识点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阶段的内容
  • 运行代码,查看结果

  • 小结
  • 阅读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阶段的内容
  • 运行代码,查看结果

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


相关实践学习
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
11月前
|
敏捷开发 测试技术 API
测试金字塔:构建高效自动化测试策略的基石
测试金字塔:构建高效自动化测试策略的基石
762 116
|
11月前
|
设计模式 前端开发 测试技术
告别脆弱:构建稳定UI自动化测试的3个核心策略
告别脆弱:构建稳定UI自动化测试的3个核心策略
940 113
|
11月前
|
测试技术 持续交付 API
测试的艺术:掌握测试金字塔,构建高效测试策略
测试的艺术:掌握测试金字塔,构建高效测试策略
580 77
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
691 1
|
11月前
|
测试技术 API 数据库
测试金字塔:构建高效自动化测试策略的基石
测试金字塔:构建高效自动化测试策略的基石
767 114
|
11月前
|
安全 Java 测试技术
《深入理解Spring》单元测试——高质量代码的守护神
Spring测试框架提供全面的单元与集成测试支持,通过`@SpringBootTest`、`@WebMvcTest`等注解实现分层测试,结合Mockito、Testcontainers和Jacoco,保障代码质量,提升开发效率与系统稳定性。
|
11月前
|
人工智能 自然语言处理 JavaScript
Playwright MCP在UI回归测试中的实战:构建AI自主测试智能体
Playwright MCP结合AI智能体,革新UI回归测试:通过自然语言驱动浏览器操作,降低脚本编写门槛,提升测试效率与覆盖范围。借助快照解析、智能定位与Jira等工具集成,实现从需求描述到自动化执行的闭环,推动测试迈向智能化、民主化新阶段。
|
11月前
|
人工智能 Java 物联网
Java与边缘AI:构建离线智能的物联网与移动应用
随着边缘计算和终端设备算力的飞速发展,AI推理正从云端向边缘端迁移。本文深入探讨如何在资源受限的边缘设备上使用Java构建离线智能应用,涵盖从模型优化、推理加速到资源管理的全流程。我们将完整展示在Android设备、嵌入式系统和IoT网关中部署轻量级AI模型的技术方案,为构建真正实时、隐私安全的边缘智能应用提供完整实践指南。
701 3
|
人工智能 边缘计算 搜索推荐
AI产品测试学习路径全解析:从业务场景到代码实践
本文深入解析AI测试的核心技能与学习路径,涵盖业务理解、模型指标计算与性能测试三大阶段,助力掌握分类、推荐系统、计算机视觉等多场景测试方法,提升AI产品质量保障能力。