元数据是什么,为什么要用元数据?
什么是元数据
按照传统的定义,元数据(Metadata)是关于数据的数据,任何文件系统中的数据都分数据与元数据,数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode...)等等。在集群文件系统中,分布信息包括文件在磁盘上的位置以及磁盘在集群中的位置。用户需要操作一个文件必须首先得到它的元数据,才能定位到文件的位置并且得到文件的内容或相关属性。
比如:我们要访问linux上一个文件,我们是不是要知道这个文件的路径,文件名?如下图:
[hadoop@hadoop-data.cn test]$ ll /home/hadoop/test
total 12
-rw-rw-r-- 1 hadoop hadoop 246 Sep 12 2018 da.log
-rw-rw-r-- 1 hadoop hadoop 190 Sep 12 2018 deal.py
-rw-rw-r-- 1 hadoop hadoop 785 Sep 12 2018 run.sh
从上面图可以看到,我们我们访问一个路径 /home/hadoop/test
那么这个路径就是这个目录的一个元数据信息,当然目录下面有三个文件,每个文件对应的权限rw,属于哪个用户,组,每个文件大小,创建时间,文件名这些都是这个目录的元数据,而我们真实的数据就是在da.log,deal.py里的数据如下图:
[hadoop@hadoop-data.cn test]$ cat da.log
aa;2;4;abc;go;A;16
ad;2;4;abc;go;D;19
as;2;4;abc;go;F;13
- 我们看下面另一张mysql表:
CREATE TABLE `tb_ky` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`stat_date` int(10) DEFAULT NULL,
`get_gift` int(5) DEFAULT NULL,
`get_book` int(5) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果我们想知道上面这些表里要查询数据,是不是需要写sql:
select * from tb_ky
那么这样查出来的数据就是保存在此表的真实数据
这张表的元数据也显然可见,那就是
表名,表所在的库,表中的字段名,字段类型,长度,是否为空,用的什么引挚,编码等。
为什么要用元数据
其实说为什么要用元数据,就是元数据能给我们带来哪些作用,这样的问题网上答案太多了,不同的行业有不同的观点,就我们从大数据数据仓库来说吧,一般的公司做数仓时,都会多层架构的搭建,比如普遍的 ODS,DWD DWE DM等这样三四层的结构,那么上一层的数据要依赖与下层,这就可以看到我们的数据从最低层到最高层的有向流动。那么我们元数据就可以做下面的事了:
- 血缘分析:向上追溯元数据对象的数据来源。
- 影响分析:向下追溯元数据对象对下游的影响。
- 同步检查:检查源表到目标表的数据结构是否发生变更。
- 指标一致性分析:定期分析指标定义是否和实际情况一致。
- 实体关联查询:事实表与维度表的代理键自动关联
其实元数据能带来的作用还有很多,比如我们定义多类的元数据,定义规则元数据,那么我们是不是可以通过规则元数据可以对数据的质量问题进行校验。
网友评论