数据治理(四):数据仓库数据质量管理

数仓项目之数据采集实战及ODS层数据初步导入和flume日志采集过程中问题监控及解决方案 在实际生产开发当中,适当的设计agent的数量和模式,并很好的将数据采集过来,是我们分析数据的第一步,即先要有数据 业务系统那边进行埋点,记录日志,到服务器本地磁盘当中 考虑使用高可用模式,并使用级联模式,上游一个agent,下游两个agent,因为要对数据进行简单的清洗 、处理,所以需要一个自定义拦截器 上游agent 高可用模式 1个source taildir类型 1个channel file类型 高可用:2个sink 获得的数据一样 但同时只有一个sink在运转 当主sin... 阅读详情

数据仓库数据质量管理

下面我们针对音乐数据中心数仓项目第四个业务:“统计地区营收情况业务”来说明数据质量如何进行管理。此业务数据质量管理重点放在 ODS 层,EDS 层(DWD 层、DWS 层)、DM 层几个方面,每层数据校验的内容不一样,我们可以通过自己编写通用 shell+Hive 脚本或者使用质量监控工具 Griffin 来进行数据质量监控。

一、“商户营收统计”业务

1、商户营收统计数据分层信息

以上业务涉及到的数仓所有表:

数据仓库分层设计:源业务系统:		ycak 	- 	user_location					- 用户上报经纬度信息表		ycak 	- 	user_machine_consume_detail 	- 机器消费订单明细表		ODS:user_location				-- TO_YCAK_USR_LOC_D		:用户位置记录日增量表	【增量导入】				user_machine_consume_detail	-- TO_YCAK_CNSM_D			:机器消费订单明细增量表	【增量导入】				machine_baseinfo 			-- TO_YCAK_MAC_D 			:机器基本信息日全量表	【全量导入】		machine_local_info 			-- TO_YCAK_MAC_LOC_D 		:机器位置信息日全量表	【全量导入】		machine_admin_map			-- TO_YCBK_MAC_ADMIN_MAP_D	:机器客户映射关系资料日全量表	【全量导入】		machine_store_map			-- TO_YCBK_MAC_STORE_MAP_D	:机器门店映射关系日全量表		【全量导入】		machine_store_info			-- TO_YCBK_STORE_D			:门店信息日全量表		【全量导入】		province_info				-- TO_YCBK_PRVC_D			:机器省份日全量表		【全量导入】		city_info					-- TO_YCBK_CITY_D			:机器城市日全量表		【全量导入】				area_info					-- TO_YCBK_AREA_D			:机器区县日全量表		【全量导入】				user_alipay_baseinfo		--	TO_YCAK_USR_ALI_D		:支付宝用户全量表 		【全量导入】		user_wechat_baseinfo		--	TO_YCAK_USR_D			:微信用户全量表			【全量导入】		user_qq_baseinfo			--	TO_YCAK_USR_QQ_D		:QQ用户日全量表			【全量导入】		user_app_baseinfo			--  TO_YCAK_USR_APP_D		:APP用户信息日全量表	【全量导入】			user_login_info				-- 	TO_YCAK_USR_LOGIN_D		:用户登录数据表日增量	【增量导入】 			EDS:		TW_MAC_LOC_D		- 机器位置信息日统计表				TW_CNSM_BRIEF_D 	- 消费退款订单流水日增量表				TW_MAC_BASEINFO_D 	- 机器基础信息日全量表 【第二个业务】				TW_USR_BASEINFO_D 	- 活跃用户基础信息日增量表 【第三个业务】				TW_MAC_STAT_D - 机器日营收情况统计表			DM: 		TM_USR_MRCHNT_STAT_D	-	商户日营收统计表【mysql中也有对应的表

复制代码

ODS层:TO_YCAK_USR_LOC_D		:用户位置记录日增量表	【增量导入】
TO_YCAK_CNSM_D			:机器消费订单明细增量表	【增量导入】
TO_YCAK_MAC_D 			:机器基本信息日全量表	【全量导入】TO_YCAK_MAC_LOC_D 		:机器位置信息日全量表	【全量导入】TO_YCBK_MAC_ADMIN_MAP_D	:机器客户映射关系资料日全量表	【全量导入】TO_YCBK_MAC_STORE_MAP_D	:机器门店映射关系日全量表		【全量导入】TO_YCBK_STORE_D			:门店信息日全量表		【全量导入】TO_YCBK_PRVC_D			:机器省份日全量表		【全量导入】TO_YCBK_CITY_D			:机器城市日全量表		【全量导入】		TO_YCBK_AREA_D			:机器区县日全量表		【全量导入】
TO_YCAK_USR_ALI_D		:支付宝用户全量表 		【全量导入】TO_YCAK_USR_D			:微信用户全量表			【全量导入】TO_YCAK_USR_QQ_D		:QQ用户日全量表			【全量导入】TO_YCAK_USR_APP_D		:APP用户信息日全量表	【全量导入】	TO_YCAK_USR_LOGIN_D		:用户登录数据表日增量	【增量导入】
EDS层:TW_MAC_LOC_D		- 机器位置信息日统计表TW_CNSM_BRIEF_D 	- 消费退款订单流水日增量表TW_MAC_BASEINFO_D 	- 机器基础信息日全量表 【第二个业务】TW_USR_BASEINFO_D 	- 活跃用户基础信息日增量表 【第三个业务】TW_MAC_STAT_D - 机器日营收情况统计表
DM层:TM_USR_MRCHNT_STAT_D	-	商户日营收统计表

复制代码

2、清空之前业务执行的数据

#删除Mysql中ycak与ycbk库即可
#删除所有Hive表脚本
drop table TO_YCAK_MAC_D;drop table TO_YCAK_MAC_LOC_D;drop table TO_YCBK_AREA_D;drop table TO_YCBK_CITY_D;drop table TO_YCBK_MAC_ADMIN_MAP_D;drop table TO_YCBK_MAC_STORE_MAP_D;drop table TO_YCBK_PRVC_D;drop table TO_YCBK_STORE_D;drop table TW_MAC_BASEINFO_D;
drop table TO_YCAK_USR_D;		drop table TO_YCAK_USR_ALI_D;drop table TO_YCAK_USR_QQ_D;drop table TO_YCAK_USR_APP_D;drop table TO_YCAK_USR_LOGIN_D;drop table TW_USR_BASEINFO_D;
drop table TO_YCAK_USR_LOC_D;drop table TW_MAC_LOC_D;drop table TO_YCAK_CNSM_D;drop table TW_CNSM_BRIEF_D;drop table TW_MAC_STAT_D;drop table TM_USR_MRCHNT_STAT_D;drop table TM_MAC_REGION_STAT_D;

#执行以下命令,清空HDFS 目录即可hdfs dfs -rm -r /user/hive/warehouse/data/

复制代码

3、重新创建 Hive 各层数据表:

#执行如下脚本,直接创建,所有Hive中需要的表
CREATE EXTERNAL TABLE `TO_YCAK_MAC_D`( `MID` int,  `SRL_ID` string,  `HARD_ID` string,  `SONG_WHSE_VER` string,  `EXEC_VER` string,  `UI_VER` string,  `IS_ONLINE` string,  `STS` int,  `CUR_LOGIN_TM` string,  `PAY_SW` string,  `LANG` int,  `SONG_WHSE_TYPE` int,  `SCR_TYPE` int)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/machine/TO_YCAK_MAC_D';
CREATE EXTERNAL TABLE `TO_YCAK_MAC_LOC_D`( `MID` int,  `PRVC_ID` int,  `CTY_ID` int,  `PRVC` string,  `CTY` string,  `MAP_CLSS` string,  `LON` string,  `LAT` string,  `ADDR` string,  `ADDR_FMT` string,  `REV_TM` string,  `SALE_TM` string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/machine/TO_YCAK_MAC_LOC_D';
CREATE EXTERNAL TABLE `TO_YCBK_MAC_ADMIN_MAP_D`( `MID` int,  `MAC_NM` string,  `PKG_NUM` int,  `PKG_NM` string,  `INV_RATE` double,  `AGE_RATE` double,  `COM_RATE` double,  `PAR_RATE` double,  `DEPOSIT` double,  `SCENE_PRVC_ID` string,  `SCENE_CTY_ID` string,  `SCENE_AREA_ID` string,  `SCENE_ADDR` string,  `PRDCT_TYPE` string,  `SERIAL_NUM` string,  `HAD_MPAY_FUNC` int,  `IS_ACTV` int,  `ACTV_TM` string, `ORDER_TM` string, `GROUND_NM` string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/machine/TO_YCBK_MAC_ADMIN_MAP_D';
CREATE EXTERNAL TABLE `TO_YCBK_MAC_STORE_MAP_D`( `STORE_ID` int,  `MID` int,  `PRDCT_TYPE` int,  `ADMINID` int,  `CREAT_TM` string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/machine/TO_YCBK_MAC_STORE_MAP_D';

CREATE EXTERNAL TABLE `TO_YCBK_STORE_D`( `ID` int,  `STORE_NM` string,  `TAG_ID` string,  `TAG_NM` string,  `SUB_TAG_ID` string, `SUB_TAG_NM` string, `PRVC_ID` string, `CTY_ID` string, `AREA_ID` string, `ADDR` string, `GROUND_NM` string, `BUS_TM` string, `CLOS_TM` string, `SUB_SCENE_CATGY_ID` string, `SUB_SCENE_CATGY_NM` string, `SUB_SCENE_ID` string, `SUB_SCENE_NM` string, `BRND_ID` string, `BRND_NM` string, `SUB_BRND_ID` string, `SUB_BRND_NM` string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/machine/TO_YCBK_STORE_D';
CREATE EXTERNAL TABLE `TO_YCBK_PRVC_D`( `PRVC_ID` int,  `PRVC` string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/machine/TO_YCBK_PRVC_D';
CREATE EXTERNAL TABLE `TO_YCBK_CITY_D`( `PRVC_ID` int,  `CTY_ID` int, `CTY` string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/machine/TO_YCBK_CITY_D';
CREATE EXTERNAL TABLE `TO_YCBK_AREA_D`( `CTY_ID` int,  `AREA_ID` int, `AREA` string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/machine/TO_YCBK_AREA_D';
CREATE EXTERNAL TABLE `TW_MAC_BASEINFO_D`( `MID` int,  `MAC_NM` string, `SONG_WHSE_VER` string,  `EXEC_VER` string,  `UI_VER` string,  `HARD_ID` string,  `SALE_TM` string,  `REV_TM` string,  `OPER_NM` string,  `PRVC` string,  `CTY` string,  `AREA` string,  `ADDR` string, `STORE_NM` string, `SCENCE_CATGY` string,  `SUB_SCENCE_CATGY` string,  `SCENE` string,  `SUB_SCENE` string,  `BRND` string,  `SUB_BRND` string,  `PRDCT_NM` string,  `PRDCT_TYP` int,  `BUS_MODE` string,  `INV_RATE` double,  `AGE_RATE` double,  `COM_RATE` double,  `PAR_RATE` double,  `IS_ACTV` int,  `ACTV_TM` string, `PAY_SW` int, `PRTN_NM` string, `CUR_LOGIN_TM` string )PARTITIONED BY (data_dt string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/machine/TW_MAC_BASEINFO_D';
CREATE EXTERNAL TABLE `TO_YCAK_USR_D`( `UID` int,  `REG_MID` int,  `GDR` string,  `BIRTHDAY` string, `MSISDN` string, `LOC_ID` int, `LOG_MDE` int, `REG_TM` string, `USR_EXP` string, `SCORE` int, `LEVEL` int, `WX_ID` string )ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/user/TO_YCAK_USR_D';
CREATE EXTERNAL TABLE `TO_YCAK_USR_ALI_D`( `UID` int,  `REG_MID` int,  `GDR` string,  `BIRTHDAY` string, `MSISDN` string, `LOC_ID` int, `LOG_MDE` int, `REG_TM` string, `USR_EXP` string, `SCORE` int, `LEVEL` int, `USR_TYPE` string, `IS_CERT` string, `IS_STDNT` string, `ALY_ID` string  )ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/user/TO_YCAK_USR_ALI_D';
CREATE EXTERNAL TABLE `TO_YCAK_USR_QQ_D`( `UID` int,  `REG_MID` int,  `GDR` string,  `BIRTHDAY` string, `MSISDN` string, `LOC_ID` int, `LOG_MDE` int, `REG_TM` string, `USR_EXP` string, `SCORE` int, `LEVEL` int, `QQID` string  )ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/user/TO_YCAK_USR_QQ_D';
CREATE EXTERNAL TABLE `TO_YCAK_USR_APP_D`( `UID` int,  `REG_MID` int,  `GDR` string,  `BIRTHDAY` string, `MSISDN` string, `LOC_ID` int, `REG_TM` string, `USR_EXP` string, `LEVEL` int, `APP_ID` string  )ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/user/TO_YCAK_USR_APP_D';
CREATE EXTERNAL TABLE `TO_YCAK_USR_LOGIN_D`( `ID` int,  `UID` int,  `MID` int,  `LOGIN_TM` string, `LOGOUT_TM` string, `MODE_TYPE` int )PARTITIONED BY (`data_dt` string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/user/TO_YCAK_USR_LOGIN_D';
CREATE EXTERNAL TABLE `TW_USR_BASEINFO_D`( `UID` int,  `REG_MID` int,  `REG_CHNL` string,  `REF_UID` string, `GDR` string, `BIRTHDAY` string, `MSISDN` string, `LOC_ID` int, `LOG_MDE` string, `REG_DT` string, `REG_TM` string, `USR_EXP` string, `SCORE` int, `LEVEL` int, `USR_TYPE` string, `IS_CERT` string, `IS_STDNT` string )PARTITIONED BY (`data_dt` string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/user/TW_USR_BASEINFO_D';
CREATE EXTERNAL TABLE `TO_YCAK_USR_LOC_D`( `ID` int,  `UID` int,  `LAT` string,  `LNG` string, `DATETIME` string, `MID` string )PARTITIONED BY (data_dt string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/user/TO_YCAK_USR_LOC_D';
CREATE EXTERNAL TABLE `TW_MAC_LOC_D`( `MID` int,  `X` string,  `Y` string,  `CNT` int, `ADDER` string, `PRVC` string, `CTY` string, `CTY_CD` string, `DISTRICT` string, `AD_CD` string, `TOWN_SHIP` string, `TOWN_CD` string, `NB_NM` string, `NB_TP` string, `BD_NM` string, `BD_TP` string, `STREET` string, `STREET_NB` string, `STREET_LOC` string, `STREET_DRCTION` string, `STREET_DSTANCE` string, `BUS_INFO` string )PARTITIONED BY (data_dt string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/machine/TW_MAC_LOC_D';

CREATE EXTERNAL TABLE `TO_YCAK_CNSM_D`( `ID` int,  `MID` int,  `PRDCD_TYPE` int,  `PAY_TYPE` int, `PKG_ID` int, `PKG_NM` string, `AMT` int, `CNSM_ID` string, `ORDR_ID` string, `TRD_ID` string, `ACT_TM` string, `UID` int, `NICK_NM` string, `ACTV_ID` int, `ACTV_NM` string, `CPN_TYPE` int, `CPN_TYPE_NM` string, `PKG_PRC` int, `PKG_DSCNT` int, `ORDR_TYPE` int, `BILL_DT` int )PARTITIONED BY (data_dt string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/user/TO_YCAK_CNSM_D';
CREATE EXTERNAL TABLE `TW_CNSM_BRIEF_D`( `ID` int,  `TRD_ID` string,  `UID` string,  `MID` int, `PRDCD_TYPE` int, `PAY_TYPE` int, `ACT_TM` string, `PKG_ID` int, `COIN_PRC` int, `COIN_CNT` int, `UPDATE_TM` string, `ORDR_ID` string, `ACTV_NM` string, `PKG_PRC` int, `PKG_DSCNT` int, `CPN_TYPE` int, `ABN_TYP` int )PARTITIONED BY (data_dt string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/user/TW_CNSM_BRIEF_D';
CREATE EXTERNAL TABLE `TW_MAC_STAT_D`( `MID` int,  `MAC_NM` string,  `PRDCT_TYPE` string,  `STORE_NM` int, `BUS_MODE` string, `PAY_SW` string, `SCENCE_CATGY` string, `SUB_SCENCE_CATGY` string, `SCENE` string, `SUB_SCENE` string, `BRND` string, `SUB_BRND` string, `PRVC` string, `CTY` string, `AREA` string, `AGE_ID` string, `INV_RATE` string, `AGE_RATE` string, `COM_RATE` string, `PAR_RATE` string, `PKG_ID` string, `PAY_TYPE` string, `CNSM_USR_CNT` string, `REF_USR_CNT` string, `NEW_USR_CNT` string, `REV_ORDR_CNT` string, `REF_ORDR_CNT` string, `TOT_REV` string, `TOT_REF` string )PARTITIONED BY (data_dt string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/machine/TW_MAC_STAT_D';
CREATE EXTERNAL TABLE `TM_USR_MRCHNT_STAT_D`( `ADMIN_ID` string,  `PAY_TYPE` int,  `REV_ORDR_CNT` int,  `REF_ORDR_CNT` int, `TOT_REV` double, `TOT_REF` double, `TOT_INV_REV` DECIMAL(10,2), `TOT_AGE_REV` DECIMAL(10,2), `TOT_COM_REV` DECIMAL(10,2), `TOT_PAR_REV` DECIMAL(10,2) )PARTITIONED BY (DATA_DT string)ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t' LOCATION 'hdfs://mycluster/user/hive/warehouse/data/user/TM_USR_MRCHNT_STAT_D';

复制代码

4、向 MySQL 中导入对应库的数据

向 MySQL 中导入 ycak 与 ycbk 两个库数据。

5、准备 ODS 层导入数据脚本:

#在安装SQOOP的node3节点/root/test下,上传导入数据脚本ods_mysqltohive_to_ycak_cnsm_d.shods_mysqltohive_to_ycak_mac_d.shods_mysqltohive_to_ycak_mac_loc_d.shods_mysqltohive_to_ycak_usr_ali_d.shods_mysqltohive_to_ycak_usr_app_d.shods_mysqltohive_to_ycak_usr_d.shods_mysqltohive_to_ycak_usr_loc_d.shods_mysqltohive_to_ycak_usr_login_d.shods_mysqltohive_to_ycak_usr_qq_d.shods_mysqltohive_to_ycbk_area_d.shods_mysqltohive_to_ycbk_city_d.shods_mysqltohive_to_ycbk_mac_admin_map_d.shods_mysqltohive_to_ycbk_mac_store_map_d.shods_mysqltohive_to_ycbk_prvc_d.shods_mysqltohive_to_ycbk_store_d.sh

复制代码

6、将项目代码打包上传

将项目代码中本地执行改成集群执行,打包上传到 node4 节点/root/test 下

7、准备执行的任务脚本

#在node5节点/root/test下上传执行任务脚本produce1.shproduce2.shproduce3.shproduce4.shproduce5.shproduce6.sh

复制代码

8、启动 Azkaban

#启动Azkaban-Executor/software/azkaban/azkaban-exec-server/bin/start-exec.sh
#激活Azkaban Executorhttp://node5:12321/executor?action=activate
#启动Azkaban-Server/software/azkaban/azkaban-web-server/bin/start-web.sh
#访问Azkaban  user:azkaban pwd:azkabanhttp://node5:8081/

复制代码

9、编写 Azkaban job 并打包,提交到 Azkaban 执行:

二、ODS 层数据质量监控

由于 ODS 层数据是贴源层,是数仓开始的地方,所以这里检验时一般不需要验证与原始数据条目是否相同,在 ODS 层数据质量监控中一般验证当日导入数据的记录数、当日导入表中关注字段为空的记录数、当日导入数据关注字段重复记录数、全表总记录数指标即可。

1、在 Hive 中创建存储数据质量监控数据库“data_quality”

hive> create database data_quality;

复制代码

2、创建存储 ODS 层数据质量监控数据表“check_ods_info”

create table data_quality.check_ods_info(  dt String comment '执行日期',  db String comment '数据库名称',  tbl String comment '校验表名',  tbl_type string comment '增量导入/全量导入',  check_col String comment '校验为空的列名',  current_dt_rowcnt bigint comment '当日导入数据记录数',  check_null_rowcnt bigint comment '当日检查列为空的记录数',  duplication_rowcnt bigint comment '重复记录数',  total_rowcnt bigint comment '表总记录数') row format delimited fields terminated by '\t';

复制代码

注意以上中文注释在 Hive 中不支持,可以在 Hive 的 mysql 元数据对应的库中执行如下 SQL 支持中文显示:

alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;alter table PARTITION_PARAMS  modify column PARAM_VALUE varchar(4000) character set utf8;alter table PARTITION_KEYS  modify column PKEY_COMMENT varchar(4000) character set utf8;alter table  INDEX_PARAMS  modify column PARAM_VALUE  varchar(4000) character set utf8;

复制代码

3、编写数据校验脚本

ods 数据质量校验脚本名称为:“ods_data_check.sh”编写的脚本需要传入 5 个参数:校验数据日期、Hive 库名、校验表名、是否增量(1 代表增量,2 代表全量)、校验为空的字段。脚本内容如下

#!/bin/bash# 数据检查执行的日期current_dt=$1
# 校验数据的库名db_name=$2
# 校验数据的表名table_name=$3
# 表增量导入/全量导入 1-增量 2-全量is_increment=$4
# 需要校验为空的列名,以逗号隔开check_col=$5
# 切割列,获取数组array=(${check_col//,/ })
#where sql where_sql=""
#动态拼接SQL where 条件for((i=0;i<${#array[@]};i++))do if [ $i -eq 0 ]; then    where_sql=" where ${array[i]} is null" else    where_sql="${where_sql} or ${array[i]} is null" fidone
#判断全量或增量来区分处理SQLif [ ${is_increment} -eq 1 ];then  is_increment='increment'  #HQL获取当日增量导入数据的记录数据  current_dt_rowcnt=`hive -e "select count(*) from ${table_name} where data_dt = '${current_dt}'"`  check_null_rowcnt=`hive -e "select count(*) from ${table_name} ${where_sql} and data_dt = '${current_dt}'"`  duplication_rowcnt=`hive -e "select nvl(sum(tmp.cnt),0) from (select count(*) as cnt from ${table_name} where data_dt = '${current_dt}' group by ${check_col} having count(*) >1) tmp"`else  is_increment='all'  #HQL获取当日增量导入数据的记录数据  current_dt_rowcnt=`hive -e "select count(*) from ${table_name}"`  check_null_rowcnt=`hive -e "select count(*) from ${table_name} ${where_sql}"`  duplication_rowcnt=`hive -e "select nvl(sum(tmp.cnt),0) from (select count(*) as cnt from ${table_name} group by ${check_col} having count(*) >1) tmp"`fi
# HQL获取全表总记录数total_cnt=`hive -e "select count(*) from ${table_name}"`
echo "日期:$current_dt ,库名:${db_name},表名:${table_name},是否增量:${is_increment}, 需要校验的列:${check_col}"echo "当日导入数据记录数:${current_dt_rowcnt},当日检查列为空的记录数:${check_null_rowcnt},当日导入数据重复数:${duplication_rowcnt} ,表总记录数:${total_cnt}"
#将数据结果插入到 data_quality.check_ods_info 表中`hive -e "insert into data_quality.check_ods_info values ('${current_dt}','${db_name}','${table_name}','${is_increment}','${check_col}',${current_dt_rowcnt},${check_null_rowcnt},${duplication_rowcnt},${total_cnt})"`
echo "------ finish ------"

复制代码

4、使用以上脚本对 ODS 部分表数据进行校验

#这里对ODS层部分增量表和全量表进行校验,部分表如下#TO_YCAK_USR_LOC_D		:用户位置记录日增量表	【增量导入】#TO_YCAK_CNSM_D			:机器消费订单明细增量表	【增量导入】#TO_YCAK_MAC_D 			:机器基本信息日全量表	【全量导入】#TO_YCAK_MAC_LOC_D 		:机器位置信息日全量表	【全量导入】# 命令如下:sh /root/test/ods_data_check.sh 20210315 default TO_YCAK_USR_LOC_D 1  UID,MIDsh /root/test/ods_data_check.sh 20210315 default TO_YCAK_CNSM_D 1  MID,PRDCD_TYPE,PAY_TYPE,ORDR_ID,UIDsh /root/test/ods_data_check.sh 20210315 default TO_YCAK_MAC_D 2  MID,SRL_IDsh /root/test/ods_data_check.sh 20210315 default TO_YCAK_MAC_LOC_D 2  MID,PRVC,CTY

复制代码

5、查看 ODS 层校验结果

#登录Hive ,切换data_quality库,查询数据select * from check_ods_info;

复制代码

三、EDS 层数据质量监控

EDS 层相当于数据仓库中的 DW 层,DW 层详细划分又分为 DWD、DWS 层,此业务中也有 DWD 和 DWS 层数据,只是在 EDS 层中没有详细区分,在 EDS 层中具体哪些是 DWD 层与 DWS 层数据可以参照数据分层图。

EDS 层质量校验分为对 DWD 层数据质量进行校验,对 DWS 层数据质量进行校验两个方面。对 DWD 层数据质量校验关注点在于是否与 ODS 层对应的数据来源表数据记录数是否一致、导入到 DWD 层的数据有效比例等,针对不同的 DWD 层的数据表也可以根据具体业务来决定质量检验的内容。

由于 DWS 层数据基于 DWD 层数据进行了聚合,所以对于 DWS 层数据质量校验关注点可以放在数据条目是否和上一层一致(需要分清主题重要字段),更重要的是这里检验 DWS 层表中数据总条数,某些重要字段为空的记录数,关注的聚合字段值异常条数等。针对不同的 DWS 层的数据表也可以根据具体业务来决定质量检验的内容。

以上 EDS 层中各层数据质量校验具体校验的内容一般根据业务不同是不同的,不能抛开业务来谈数据质量,可以使用具体脚本个性化校验。

1、DWD 层数据质量校验

这里 DWD 层数据质量校验以“机器详细信息统计”业务为例,来说明 DWD 层数据质量如何校验。“机器详细信息统计”分层信息如下:

以上 ODS 层机器数据到 EDS 层机器数据,是由 ODS 层多张表数据“TO_YACK_MAC_D”、“TO_YCBK_MAC_ADMIN_MAP_D”合并统计得到 EDS 层“TW_MAC_BASEINFO_D”表数据,基于以上我们可以校验以下几个方面来确定数据质量:

  • ODS 层源表记录总数

  • EDS 层目标表记录总数

  • 数据记录有效比例(由于 EDS 层数据一定来自于 ODS 层,可能中间会有清洗数据,导致 EDS 层数据缺少一部分,所以这里记录有效比例就是使用“目标表数据总记录/源表数据总记录”来反应质量情况)

  • 目标表重复记录数(可能会由于 ODS 转到 EDS 层过程中,业务上关联其他表查询导致目标表数据会有重复)

基于以上方面,进行 EDS-DWD 层数据质量监控,步骤如下:

1)创建 DWD 数据质量结果存储表

create table data_quality.check_dwd_info(  dt String comment '执行日期',  db String comment '数据库名称',  check_cols String comment '校验字段',  source_tbl String comment 'ODS层源表表名',  source_tbl_rowcnt bigint comment '源表数据总记录数',  target_tbl String comment 'DWD层目标表表名',  target_tbl_rowcnt bigint comment '目标表数据总记录数',  rt Decimal(5,2) comment '数据有效比例',  target_duplication_rowcnt bigint comment '目标表数据重复记录数') row format delimited fields terminated by '\t';

复制代码

2)编写 DWD 层数据校验脚本

DWD 层数据质量校验脚本名称为:“dwd_data_check.sh”编写的脚本需要传入 5 个参数:校验数据日期、Hive 库名、校验字段、ODS 层数据源表(可能多张)、EDS 层目标表。脚本内容如下:

#!/bin/bash# 数据检查执行的日期current_dt=$1
# 校验数据的库名db_name=$2
# 校验字段,多个字段使用逗号隔开check_cols=$3
# ODS层源表表名,多表用逗号隔开ods_tbls=$4
# DWD层目标表表名target_tbl=$5
# 切割多个源表,查询源表关注字段的总条数tbl_arr=(${ods_tbls//,/ })
# 查询源表数据SQL source_sql=""
# 动态拼接SQL union 各个源表数据for((i=0;i<${#tbl_arr[@]};i++))do if [ $i -eq 0 ]; then    source_sql="select ${check_cols} from ${tbl_arr[i]} " else    source_sql="${source_sql} union all select ${check_cols} from ${tbl_arr[i]} " fidone
# 查询SQL 获取源表关注字段总条数source_tbl_rowcnt=`hive -e "select count(*) from ( ${source_sql} ) t1"`
# 查询SQL 获取目标表关注字段总条数target_tbl_rowcnt=`hive -e "select count(*) from (select ${check_cols} from ${target_tbl}) t2"`
# 统计目标表与源表数据比例rt=`awk 'BEGIN{printf "%0.2f",'${target_tbl_rowcnt}'/'${source_tbl_rowcnt}'}'`
# 查询SQL 统计目标表数据重复记录数target_duplication_rowcnt=`hive -e "select nvl(sum(tmp.cnt),0) from (select count(*) as cnt from ${target_tbl} where data_dt = '${current_dt}' group by ${check_cols} having count(*) >1) tmp"`
echo "日期:$current_dt ,库名:${db_name},ODS源表表名:${ods_tbls},目标表表名:${target_tbl}, 需要校验的列:${check_cols}"echo "源表数据记录总数:${source_tbl_rowcnt},目标表记录数:${target_tbl_rowcnt},目标表与源表数据比例:${rt} ,目标表重复记录数:${target_duplication_rowcnt}"
#将数据结果插入到 data_quality.check_dwd_info 表中`hive -e "insert into data_quality.check_dwd_info values ('${current_dt}','${db_name}','${check_cols}','${ods_tbls}',${source_tbl_rowcnt},'${target_tbl}',${target_tbl_rowcnt},${rt},${target_duplication_rowcnt})"`
echo "------ finish ------"

复制代码

3)使用以上脚本对 EDS-DWD 层数据部分表进行校验

#这里针对“机器详情统计”业务对应的ODS-EDS层的表进行校验,命令如下:sh dwd_data_check.sh 20210315 default mid TO_YCAK_MAC_D,TO_YCBK_MAC_ADMIN_MAP_D TW_MAC_BASEINFO_D
#此外,针对“消费退款统计”业务可执行校验,命令如下:sh dwd_data_check.sh 20210315 default MID,PRDCD_TYPE TO_YCAK_CNSM_D TW_CNSM_BRIEF_D

复制代码

4)查看结果

#登录Hive ,切换data_quality库,查询数据select * from check_dwd_info;

复制代码

2、DWS 层数据质量校验

DWS 层数据质量校验,这里校验“机器详情信息”业务中,EDS-DWS 层表“TW_MAC_STAT_D”表的质量,这里由于 DWS 层数据由 EDS 层聚合而来组成的宽表,所以,这里校验时可以校验主题数据是否和上层一致,更重要的是校验 DWS 层表中数据总条数,某些重要字段为空的记录数,关注的聚合字段值异常条数等。

这里针对“TW_MAC_STAT_D”表我们校验表中以下内容:

  • 表中数据总记录数

  • 省份、城市字段为空的记录数

  • 总营收不合理记录数

校验步骤如下:

1)创建 DWS 层校验结果存放表

create table data_quality.check_dws_info(  dt String comment '执行日期',  db String comment '数据库名称',  target_tbl string comment '校验表名',  check_null_cols String comment '校验空值字段',  null_row_cnt bigint comment '当日空值字段记录数',  check_value_cols String comment '校验值字段',  maxValue Decimal(10,2) comment '合理值最大值',  abnormal_rowcnt bigint comment '当日异常值记录数',  total_rowcnt bigint comment '当日表中总记录数') row format delimited fields terminated by '\t';

复制代码

2)编写校验脚本

DWS 层数据质量校验脚本名称为:“dws_data_check.sh”编写的脚本需要传入 5 个参数:校验数据日期、Hive 库名、校验表名、校验 Null 值字段(可多列)、校验值字段(单列),标准值最大值。脚本内容如下:

#!/bin/bash# 数据检查执行的日期current_dt=$1
# 校验数据的库名db_name=$2
# 校验表名dws_tbl_name=$3
# 校验null值字段,多个字段使用逗号隔开check_null_cols=$4echo "${check_null_cols}"# 校验值字段check_value_col=$5
# 标准值的最大值max_value=$6
# 切割校验null值字段array=(${check_null_cols//,/ })
# 查询DWS表数据SQL check_sql=""
# 动态拼接SQL 检查null值条数for((i=0;i<${#array[@]};i++))do if [ $i -eq 0 ]; then    check_sql="select count(*) from ${db_name}.${dws_tbl_name} where data_dt=${current_dt} and ${array[i]} is null " else    check_sql="${check_sql} and ${array[i]} is null " fidone
# 查询SQL 获取DWS表中空值数据记录数null_row_cnt=`hive -e "${check_sql}"`
# 查询SQL 获取校验值异常记录数abnormal_rowcnt=`hive -e "select sum(if(${check_value_col}>${max_value},1,0)) from ${db_name}.${dws_tbl_name} where data_dt = ${current_dt}"`
# 统计当前日期下表中统计总记录数total_rowcnt=`hive -e "select count(*) from ${db_name}.${dws_tbl_name} where data_dt = ${current_dt}"`
echo "日期:$current_dt ,库名:${db_name},DWS校验表名:${dws_tbl_name},需要校验为null的列:${check_null_cols},检验值是否合理的列:${check_value_col},合理值最大值:${max_value}"echo "当日空值字段记录数:${null_row_cnt},当日异常值记录数:${abnormal_rowcnt},当日表数据总记录数:${total_rowcnt}"
#将数据结果插入到 data_quality.check_dws_info 表中`hive -e "insert into data_quality.check_dws_info values ('${current_dt}','${db_name}','${dws_tbl_name}','${check_null_cols}',${null_row_cnt},'${check_value_col}',${max_value},${abnormal_rowcnt},${total_rowcnt})"`
echo "------ finish ------"

3)使用以上脚本对 EDS-DWS 数据进行校验

#对 EDS-DWS层数据表“TW_MAC_STAT_D”进行校验sh dws_data_check.sh 20210315 default TW_MAC_STAT_D PRVC,CTY TOT_REV 10000

4)查看结果数据

#登录Hive ,切换data_quality库,查询数据select * from check_dws_info;

四、DM 层数据质量监控

DM 层存放数仓中对宽表进行聚合统计得到的结果值数据,所以这里对 DM 层数据进行质量校验时,无法使用通用的脚本处理,而是每个报表数据都要不同的校验指标,DM 层主要校验数据值是否在合理范围内,与 DWS 层校验类似,这里不再校验“商户营收统计”业务中 DM 层表“TM_USR_MRCHNT_STAT_D”。

大数据相关职位介绍之二(数据治理,数据库管理员, 数据资产管理师,数据质量专员) 数据治理与管理相关职位各有侧重:数据治理工程师 负责数据治理体系的构建;元数据管理师 关注数据定义、血缘与标准化;主数据管理师 负责企业核心主数据的一致性;数据库管理员(DBA) 保障数据库的稳定性和性能;数据资产管理师 负责数据的存储、访问和价值挖掘;数据质量专员 关注数据质量监控与优化。 阅读详情

相关推荐

数据质量和数据治理的关系 | 京东云技术团队

很多时候,数据质量是数据治理的驱动因素之一,这是数据治理计划的最初重点,因此两者之间可能会混淆。但它们并不相同,它们是同一枚硬币的两面,而不是两枚硬币。作者:京东科技 李然辉来源:京东云开发者社区 转载请注明来源。

JDDTechTalk的博客 1317

如何保证hive中数据的质量?

首先,数据出现质量问题有哪些原因或者情况? 其次,针对这些原因,制定清洗策略。 一般的数据质量出现问题的有:无效,重复,缺失,不一致,错误值,格式出错,业务逻辑规则有问题,抽取数据程序有错等,另外还有就是统计口径不一致,也会导致看到的数据不是想要的。 根据这些情况,如何清洗?人工,还是编写程序?这个依据数据量大小及挖掘系统要求看吧。如果出现这类型的错误很多,一定要写程序自动清洗,如果只是小量的不影响的,可以忽略不计。 问题扩展 企业不同的时期业务系统处理方式上逐步优化产生的数据差异: 产.

东城庞太师 1649

数据库领域数据仓库的数据质量提升方法

数据质量是数据仓库项目的生命线,直接影响决策支持和业务分析的准确性。本文旨在系统性地介绍数据仓库环境中数据质量提升的技术和方法,涵盖从数据采集、ETL处理到最终应用的全流程质量控制。本文首先介绍数据质量的核心概念,然后深入技术实现细节,包括算法原理和实际案例,最后探讨行业最佳实践和未来发展趋势。数据质量(Data Quality):数据满足特定使用要求的程度数据清洗(Data Cleansing):识别和纠正数据中错误和不一致的过程数据治理(Data Governance)

2502_91592937的博客 1157

Sqoop从MySQL导数据至hive数据表异常(数据量不对,数据值不对)

通过数据比对,发现sqoop导入hive的数据与MySQL原始数据对应不上,表现为两点: ①查数据总数不对,MySQL的count(1) = 108120条数据,但是导入至hive发现只有108112条数据,数据发生了丢失。 ②应查数据值不对,查询到某个字段,MySQL值中仅有1,2两种值,但是hive表中包含1,2,以及一串看不懂的数字。 经反复核对数据,发现问题症结,所以就将它记录下来了。 ...

argue10的博客 4199

数据库领域数据仓库的数据治理框架搭建

在当今数字化时代,企业积累了大量的数据。数据仓库作为企业数据的集中存储和管理平台,承载着海量的业务数据。然而,随着数据量的不断增长,数据的质量、安全性、一致性等问题逐渐凸显。数据治理的目的就是要解决这些问题,确保数据仓库中的数据能够被有效地管理和利用。本文的范围涵盖了数据治理框架的各个方面,包括核心概念、算法原理、实际应用等,旨在帮助读者全面了解如何搭建一个有效的数据治理框架。本文将首先介绍数据治理的相关术语和概念,然后详细解释数据治理框架中的核心概念及其关系。

AI天才研究院 937

ETL 与数据治理:数据质量、血缘分析、数据标准化

(1) ETL 的概念Extract(提取):从数据源获取数据(如数据库、API、日志等)。Transform(转换):清洗、规范化数据,使其符合业务需求。Load(加载):将转换后的数据存入目标存储(如数据仓库、数据湖)。示例:假设某电商平台需要分析用户购买行为,从 MySQL 订单表提取数据,将金额转换为统一货币(如美元),去除重复订单,并存入数据仓库,供 BI 分析使用。(2) ETL 的常见工具开源工具:Apache NiFi、Airflow、Flink、Spark(基于批处理或流处理)。

晴天彩虹雨的博客 1744

DolphinScheduler3.0.1(数据质量)

一开始我在数据质量的模块里找了半天如何创建监控任务,直到我在工作类型中看到DATA_QUALITY,我……核心配置项如下,不同的监控规则可以在数据质量的规则管理界面查看。

无语梦醒的博客 4314

一文详解数据治理之数据质量管理

俗话说:大数据时代数据的核心不是“大”,而在于“有价值”,而有价值的关键在于“质量”。今天,我们从什么是数据质量管理,数据质量管理的现状,影响数据质量的因素等几个点为大家详细解答数据质量管理的整个流程。 什么是数据质量管理? 数据质量管理(Data Quality Management),是指对数据从计划、获取、存储、共享、维护、应用、消亡生命周期的每个阶段里可能引发的各类数据质量问题,进行识别、度量、监控、预警等一系列管理活动,并通过改善和提高组织的管理水平使得数据质量获得进一步提高。 数据质量管理

amsonga的博客 1540

万字详解数据质量那些事儿

万字讲解数仓质量体系构建

1103

数据治理系列(四):数据质量管理

数据质量管理是通过系统性方法提升数据质量的全生命周期管理活动。其核心在于保障数据的准确性、完整性、一致性等关键属性,为企业决策提供可靠依据。常见问题包括数据延迟、失真、冗余和缺失等,根源可归结为技术缺陷、业务不规范和管理缺失三大维度。有效的数据质量管理需建立PDCA循环的DMAIC模型,实施事前预防、事中监控、事后整改的全流程管控。实践中可选用开源工具(如Qualitis、Griffin)或企业级解决方案,通过数据标准化、元数据管理、质量监控规则等手段持续优化数据质量。最终目标是构建数据质量文化,实现常态化

. 1万+

数据治理(三):数据质量管理

​​​​​​ 目录 ​​​​​​数据质量管理 一、数据质量概述 二、数据质量问题根源 三、​​​​​​​数据质量保障原则 1、​​​​​​​完整性 2、​​​​​​​准确性 3、​​​​​​​一致性 4、​​​​​​​及时性 数据质量管理 ​​​​​​​一、数据质量概述 在大数据早期,做数据治理最主要的目的,就是为了提升数据质量,让报表、分析、应用更加准确。到今天,虽然数据治理的范畴扩大了很多,我们开始讲数据资产管理、知识图谱、自动化的数据治理等等概念,但是提升数据...

Lansonli(蓝深李)的博客 2200

关于数仓建设及数据治理的超全概括

本文分为两大节介绍,第一节是数仓建设,第二节是数据治理,内容较长,还请耐心阅读!在谈数仓之前,先来看下面几个问题:数仓为什么要分层?用空间换时间,通过大量的预处理来提升应用系统的用户体验(...

大数据星球-浪尖 553

磁盘I/O %util特别高

磁盘I/O %util特别高

eagle89的专栏 3088

电商数仓初期数据治理策略(为AI能力接入做准备)

电商数仓建设初期建立完善的数据治理体系,可为后续AI能力接入奠定基础。治理框架包括组织架构、流程规范、工具平台三方面,重点建设数据标准体系、质量保障体系、元数据管理体系。同时需关注数据安全、生命周期管理及AI专项治理,如数据标准化、特征工程等。实施路径分基础建设、核心实施、深化应用、持续优化四个阶段,关键成功因素在于高层支持、跨团队协作、工具支持和人才培养。通过系统化的数据治理,可提升数据质量与一致性,降低后续治理成本,为AI应用提供可靠的数据基础。

数据老兵老徐的博客 1668

Android 集成 Google 与 Facebook 第三方登录实战详解(2024版)

本文详细介绍了2024年Android应用集成Google与Facebook第三方登录的完整实战指南。通过分步教程和代码示例,帮助开发者快速实现一键登录功能,提升用户体验和注册转化率,同时涵盖隐私合规和常见错误处理的最佳实践。

blue的专栏 822

YOLOV8多模态(可见光+红外光目标检测任务,基于Ultralytics官方代码实现)

torch 2.3.1 torchvision 0.18.1 Python 3.8.19 tensorrt 8.5.3.1DroneVehicle数据集下载地址DroneVehicle 数据集由无人机采集的 56,878 张图像组成,其中一半是 RGB 图像,其余是红外图像。我们为这 5 个类别制作了丰富的注释,其中包含定向边界框。其中,汽车在 RGB 图像中有 389,779 个注释,在

Mjy的博客 7584

一篇文章搞懂数据仓库:数据治理(目的、方法、流程)

发现数据质量问题 > 定义数据质量规则 > 质量控制 > 质量评估 > 质量优化。 数据治理包含“理”“采”“存”“管”“用”这五个步骤,即业务和数据资源梳理、数据采集清洗、数据库设计和存储、数据管理、数据使用。

独木不成林,单弦不成音。 3万+

深入AOSP构建系统:从BUILD_FINGERPRINT的生成逻辑,看如何定制你的Android设备标识

本文深入解析AOSP构建系统中的设备指纹生成机制,详细介绍了BUILD_FINGERPRINT的生成逻辑及其在Android设备中的关键作用。通过分析多个指纹属性的区别与联系,以及如何定制设备标识,帮助开发者更好地理解和掌握Android系统构建过程。

weixin_27017211的博客 217

Chat2DB数据治理:元数据管理与数据质量监控

在当今数据驱动的时代,企业面临着海量数据管理的挑战。Chat2DB作为一款智能的通用SQL客户端和数据报表工具,不仅提供了强大的数据库操作能力,更在数据治理方面展现了卓越的价值。本文将深入探讨Chat2DB在元数据管理和数据质量监控方面的核心功能与实践方案。 ## 元数据管理架构 ### 核心元数据模型 Chat2DB通过标准化的SPI(Service Provider Interface)...

gitblog_00329的博客 1019

[Dify实战] 项目复盘助手:自动拉数据、生成复盘报告

本文介绍如何利用Dify平台构建自动化项目复盘助手,解决传统人工复盘效率低、易遗漏等问题。系统通过自动拉取Git/Jira等数据源,计算关键指标后,由LLM生成结构化复盘报告。文章详细讲解了数据采集、指标计算、Prompt设计等核心模块的实现,并分享了完整Workflow搭建步骤。实践表明,该系统能将复盘耗时从4小时缩短至10分钟,显著提升数据准确率和执行频率。最后总结了数据一致性、输出质量等常见问题的解决方案,强调Dify+LLM组合可实现复盘流程的自动化流水线。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 118

海洋浮游生物识海洋浮游生物识别系统:基于YOLOv10的显微图像自动检测与UI别系统:基于海洋浮游生物识别系统:基于YOLOv10的显微图像自动检测与UI展示YOLOv10的显微图像自动检测与UI展示

本文介绍了如何利用YOLOv10模型进行海洋浮游生物的自动识别,旨在提高传统显微镜观测的效率与准确性。研究背景强调了浮游生物在海洋生态系统中的重要性,并指出传统方法的局限性。数据集选用WHOI-Plankton,包含70多种浮游生物的20000多张带标签图像。文章详细描述了YOLOv10模型的安装、数据集配置、训练与测试步骤,并提供了基于PyQt5的图形化检测界面代码。结果显示,模型在精度、召回率和mAP@0.5等指标上表现优异,推理速度达到约30 FPS。最后,文章提出了部署建议和未来优化方向,如集成摄像

YOLO 375

数据治理:银行如何确保数据质量与安全

银行数据治理是一种对银行数据进行全面管理的过程,包括数据的收集、存储、处理、分析、使用和销毁等各个环节。它涉及到数据的质量管理、安全管理、隐私保护、合规性等多个方面,旨在确保数据的完整性、准确性、一致性和安全性,从而提高数据的可用性和价值。

qq_44005305的博客 2134

基于XDMA 的PCIE读写DDR

基于XDMA 的PCIE读写DDR 概述:   想实现基于FPGA的PCIe通信,查阅互联网各种转载…基本都是对PCIe的描述,所以想写一下基于XDMA的PCIe通信的实现(PCIe结构仅做简单的描述(笔记),了解详细结构移至互联网)。 实现功能:PC通过PCIE读写DDR,同时用户通过逻辑代码可以读取被写入DDR内的数据(我是通过VIO实现DDR任意地址,任意数据大小的读取。)。 实践实践!!! 说明: 参考文档: PCI Express Base Specification Revision 3.0 P

Crazzy_M的博客 1万+

Chat2DB数据治理:数据质量、元数据与主数据管理

在数字化转型的浪潮中,企业面临着前所未有的数据管理挑战。数据孤岛、数据质量问题、元数据管理混乱以及主数据不一致等问题,已经成为制约企业数据价值释放的关键瓶颈。Chat2DB作为一款智能的通用SQL客户端和数据报表工具,通过集成AI能力,为企业数据治理提供了全新的解决方案。 读完本文,您将获得: - Chat2DB在数据治理领域的核心能力解析 - 数据质量管理的自动化实现方案 - 元数据管理的智能...

gitblog_00474的博客 640

【专栏必读】王道考研408计算机网络+湖科大教书匠计算机网络+网络编程万字笔记使用说明及章节导航

本文档汇总了王道考研408计算机网络和湖科大教书匠计算机网络课程的重点内容,包括计算机网络体系结构、物理层、数据链路层、网络层、传输层和应用层的详细讲解。通过ISO/OSI和TCP/IP模型,深入探讨了通信基础、介质访问控制、IP地址、TCP/UDP协议、流量控制和网络编程等关键概念。此外,还提供了Linux网络编程实践,帮助读者巩固理论知识

快乐江湖的博客 2万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 数据治理(五):元数据管理
下一篇: 数据治理(六):编译 Atlas 安装包
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值