前言
最近接到个任务是抽取mysql和oracle的元数据,大致就是在库里把库、schema、表、字段、分区、索引、主键等信息抽取出来,然后导成excel。
因为刚开始接触元数据,对这个并不了解,就想借助一下万能的百度,结果百度了一圈全是告诉我sql,直接cv就行了。虽然得到了部分数据,但是查的哪个库,哪个表我是完全不清楚的,得到的数据也不是我想要的,只有自己去官网看文档来完成自己的任务。
授人以鱼不如授人以渔,把经验写出来,给跟我一样疑惑的小伙伴一个参考。
什么是元数据
百度百科:元数据(metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。元数据算是一种电子式目录,为了达到编制目录的目的,必须在描述并收藏数据的内容或特色,进而达成协助数据检索的目的。都柏林核心集(dublin core metadata initiative,dcmi)是元数据的一种应用,是1995年2月由国际图书馆电脑中心(oclc)和美国国家超级计算应用中心(national center for supercomputing applications,ncsa)所联合赞助的研讨会,在邀请52位来自图书馆员、电脑专家,共同制定规格,创建一套描述网络上电子文件之特征。
元数据是关于数据的组织、数据域及其关系的信息,简言之,元数据就是关于数据的数据。
参考文档地址
mysql:https://docs.oracle.com/cd/e17952_01/index.html
oracle:https://docs.oracle.com/en/database/oracle/oracle-database/index.html
先说mysql
mysql的元数据都在information_schema
库中以视图的形式存在,只能看,不能修改。
进入文档后直接看information_schema
的介绍,里面详细介绍了每一个表和字段。
常用的查询mysql元数据sql
-- 数据库 select `schema_name` 库名,`default_character_set_name` 默认字符集 from `schemata` -- 表 select `table_name` 表名,`table_comment` 描述,`table_type` 表类型 from`tables` -- 字段 select `table_schema` 库名,`table_name` 表名,`column_name` 字段名,`column_comment` 字段描述,`data_type` 字段类型,`character_maximum_length` 长度,`is_nullable` 是否为空 from `columns` -- 分区 select `table_schema` 库名,`table_name` 表名,`partition_name` 分区名,`partition_ordinal_position` 分区编号,`partition_expression` 分区函数表达式 from `partitions` where partition_name is not null -- 视图 select * from `views` -- 索引 select * from statistics -- 主键 select * from `columns` where column_key = 'pri'
再说oracle
oracle里的元数据在静态数据字典视图。
我们是不能直接访问数据字典表的,但可以通过数据字典视图访问其中的信息。要列出可用的数据字典视图,查询视图dictionary就可以。
在静态数据字典视图里有三大类开头的视图:all_、dba_、user_
- all_视图显示所有的信息,当前用户,包括从其他架构中对象的当前用户的模式以及信息访问,如果当前用户拥有的权限或角色授权的方式访问这些对象。
- dba_视图显示整个数据库中的所有相关信息。dba_视图仅供管理员使用。只有拥有select any dictionary权限的用户才能访问它们。此权限dba在系统最初安装时分配给角色。
- user_视图显示从当前用户的模式中的所有的信息。查询这些视图不需要特殊权限。
all_,dba_以及user_对应于单个数据字典表视图通常是几乎相同的。
官网:
然后就可以通过文档说明找到对应的视图。
查询常用的oracle元数据sql:
-- 模式 select * from dba_tablespaces; -- 表 select * from user_tables ut left join user_tab_comments utc on ut.table_name = utc.table_name; -- 字段 select t.table_name 表名,t.column_name 描述,t.data_type 类型,t.data_length 长度,t.nullable 是否为空,t.data_default 默认值,s.comments 描述 from user_tab_columns t left join user_col_comments s on t.column_name = s.column_name where t.table_name ='asset_base_table'; -- 分区 select * from user_part_key_columns; -- 索引 select * from user_indexes; -- 视图 select * from user_views; -- 主键 select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'p';
总结
到此这篇关于mysql和oracle元数据抽取的文章就介绍到这了,更多相关mysql oracle元数据抽取内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!