Hive离线数据清洗测试

Hive是基于Hadoop的一个数据仓库工具(离线),可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。主要包括数据开发、数据运维、数据仓库,快速取数

测试前准备工作
1、离线数据平台权限申请:申请离线开发平台,数据仓库,快速取数的权限,以及查看sql脚本的权限
2、从数据开发得到清洗的项目ID,任务ID,最终的HIVE表名,申请对应表的数据权限,数据搬运任务ID,搬运REDIS/HBASE的对应字段文档

离线清洗测试要点
1、清洗逻辑确认,遍历清洗逻辑是否正确,是否和需求一致
2、review sql脚本,遍历是否有明显的语法错误,我们需要熟悉sql语法和用法,各中数据类型的默认精度情况
3、确认数据源准确性,各字段数据源是否正确,一般需要追溯到Base层,Base层是业务库T+1直接同步过来的数据,未做处理。了解下机票数据流转

4、数据类型默认值测试,分析每个字段是否需要设置默认值
5、建表测试,建表语句直接影响后面的数据搬运配置,需要知道HDFS文件存储和读取原理,以及基本建表语法

ROW FORMAT SERDE
‘org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe’ --hive默认的分割方式,即行为\n,列为^A
STORED AS INPUTFORMAT
‘org.apache.hadoop.mapred.TextInputFormat’ --hive默认的存储格式为textfile
OUTPUTFORMAT
‘org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat’
LOCATION --内部表的默认的存储路径
‘hdfs://hadoop102:9000/user/hive/warehouse/fdm_sor.db/mytest_tmp2’
TBLPROPERTIES (
‘transient_lastDdlTime’=‘1526176805’)

row format delimited fields terminated by ‘\001’ --这里可以指定别的分隔符,如‘\t’,’$'等分隔符
> lines terminated by ‘\n’
> stored as textfile;

hive默认的列分割类型为org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe,而这其实就是A分隔符,hive中默认使用A(ctrl+A)作为列分割符,如果用户需要指定的话,等同于row format delimited fields terminated by ‘\001’,因为^A八进制编码体现为’\001’.所以如果使用默认的分隔符,可以什么都不加,也可以按照上面的指定加‘\001’为列分隔符,效果一样。
分区一定要写在row format之前,否则报错。

6、清洗结果表数据验证,核对数据准确性,是否有脏数据等,自己设计sql查询语句
主要验证:
1)数据总量是否符合,评估量大是否需要清洗增量数据
2)表字段特殊值测试(空,null)
3)是否有脏数据测试
4)根据sql过滤条件进行sql设计测试
5)根据业务场景进行sql设计测试
6)主键不允许为空测试

比如业务方是根据memberfk取数的,那清洗出来的memberfk不能有空或者NULL的情况
SELECT * FROM app_table where dt=‘2019-02-25’ and memberfk is NULL OR memberfk =’’ LIMIT 100

7、一般数据清洗都有统一的清洗规范,方便于管理,包括数据对象设计规范、开发规范,建表规范
比如正常情况下app层的表都必须是外部表 ,用于存储最终应用资产数据
tmp层的表只做临时表用,不存储最终应用资产数据

建表案例举例:
数据搬运不成功,建表时设置分隔方式不对

DROP TABLE IF EXISTS tmp_flightdap.test_gn_insurance_moreprice_feature_wyx1050084_20190125_redis;
CREATE TABLE IF NOT EXISTS tmp_flightdap.test_gn_insurance_moreprice_feature_wyx1050084_20190125_redis
ROW FORMAT SERDE ‘org.apache.hadoop.hive.serde2.OpenCSVSerde’ WITH SERDEPROPERTIES (“separatorChar”=",", “quoteChar” = “”")
stored AS TEXTFILE LOCATION ‘/data/flightdap/tmp_flightdap/test_gn_insurance_moreprice_feature_wyx1050084_20190125_redis’ as

去掉"separatorChar"=",", “quoteChar” = “”" ,分割方式不对,导致搬运不成功
改成
DROP TABLE IF EXISTS tmp_flightdap.test_gn_insurance_moreprice_feature_wyx1050084_20190125_redis;
CREATE TABLE IF NOT EXISTS tmp_flightdap.test_gn_insurance_moreprice_feature_wyx1050084_20190125_redis
row format delimited
fields terminated by ‘\054’ stored as inputformat
‘org.apache.hadoop.mapred.TextInputFormat’
OUTPUTFORMAT
‘org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat’
location ‘/data/flightdap/tmp_flightdap/test_gn_insurance_moreprice_feature_wyx1050084_20190125_redis’ as

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值