暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

小白篇(二十二):关系型数据库常用元数据(Mysql\Postgresql)

数据在此 2021-03-25
3017
简短介绍

大家好,今天我们一起来了解下元数据。不知道大家在实际工作中是否有运用它。如果你真的懂得运用它,我相信你一定用它轻松的解决过很多问题。包括我们现在用它也做了很多智能的东西,例如:一键将业务系统表采集到集群。其中就有着元数据的影子。


前提了解,mysql创建语句


小白篇(三):Mysql数据库学习-Sql语句之DDL语法学习


01

什么是元数据


元数据,其实就是管理数据的数据。用来描述数据和记录数据的数据。例如:我们有很多本书。书是什么时候创作的,作者是谁,书的页数是多少。这就是我们对书的元数据记录。但是如果说书中的目录,书中的具体内容。书中的信息,元数据就不会管理了。
我们实际在数据库中创建的表,就好比是一本书。底层元数据就会在表创建的时候记录表名称、表创建时间、表字段、创建人、创建的位置、表空间大小等等一些信息。后续表中添加的数据,我们称之为“主数据”(简单理解为:表中主要的数据)。元数据不会对表的“主数据做记录。


02


关系型数据库Mysql、Postgresql

元数据简单介绍


下面主要针对Mysql 和 Postgresql两种关系型数据库进行一些元数据的介绍。那么为什么是这两种关系型数据库呢?因为目前它们是开源的,并且目前互联网的主流就是用它们。所以先介绍这两种数据库的元数据。

这里我们将介绍如何通过元数据获取所有数据库、表、表字段 等等一些信息。



  • 1、Mysql元数据

通常Mysql元数据都存在 information_schema 库下面。

    -- mysql下常用元数据表
    SCHEMATA -- 数据库信息表
    TABLES -- 表记录表
    COLUMNS -- 表字段记录表
    复制
      -- 查询mysql实例下,有哪些db
      select SCHEMA_NAME from information_schema.SCHEMATA;


      -- 查询表所属db\表名称\表创建时间\表更新时间\表描述
      select
      TABLE_SCHEMA,TABLE_NAME,CREATE_TIME,UPDATE_TIME,TABLE_COMMENT
      from information_schema.TABLES;
      -- 说明:里面还包含表很多信息,例如:表占磁盘大小,表数据量多少


      -- 查询表所属db\表名称\字段名称\字段顺序\字段类型\字段描述
      select
      table_schema,table_name,column_name,ordinal_position,data_type,column_comment
      from information_schema.columns;
      复制

      • 2、Postgresql元数据(补充postgresql简称:pg库)

      postgresql元数据比较特别,它针对每个db下有一个单独的pg_catalog(这里可以理解为隐藏的db或schema)。
      postgresql下可以有多个数据库,每个数据库下又可以有多个命名空间。好吧,看看我们需要的数据怎么取吧。
        -- 在postgresql一个db下,常用的元数据表
        select * from pg_catalog.pg_database;-- 记录所有db信息
        select * from pg_catalog.pg_tables; -- 记录当前db下表信息
        select * from pg_catalog.pg_namespace;-- 记录当前db下命名空间
        select * from pg_catalog.pg_attribute;-- 记录当前db下字段信息
        select * from pg_catalog.pg_class; -- 记录当前db下,命名空间、表、字段关系
        -- 也可以写成 数据库.pg_catalog.pg_database 三层结构
        -- 如: my_test_db.pg_catalog.pg_database;
        -- 理解为: 数据库.命名空间.表
        复制

          -- 查询所有数据库
          select * from pg_catalog.pg_database;
          -- 说明:只要查询所有db时,不会受到每个db限制。
          -- 其它查询都是限制在某个db下的
          复制


            -- 查询表信息,只能查询到当前连接的db下的所有表
            select * from pg_catalog.pg_tables;
            复制


              -- 查询命名空间名称\表名称\表描述
              select
              n.nspname,
              c.relname,
              cast(obj_description(c.relfilenode,'pg_class') as varchar) as comment
              from
              pg_catalog.pg_namespace n
              inner join
              pg_class c on n.oid = c.relnamespace
              where c.relkind = 'r' and c.relname not like 'pg_%' and c.relname not like 'sql_%' ;
              复制


                -- 查询命名空间'stg'下,表'test_2020'的字段\描述\类型\顺序
                SELECT
                n.nspname,
                c.relname,
                a.attname,
                col_description(a.attrelid,a.attnum) as comment,
                format_type(a.atttypid,a.atttypmod) as type,
                a.attnum
                FROM
                pg_namespace n
                inner join pg_class c on n.nspname ='stg' and n.oid = c.relnamespace
                inner join pg_attribute a on c.relname = 'test_2020' and a.attrelid = c.oid and a.attnum>0;
                复制

                说明:如上均是创建了db、表后。可以通过元数据再次获取相关信息的sql。



                03


                小结

                关于mysql和pg库的一些简单元数据介绍,大家了解了么?如果我们在采集数据之间通过关系型库元数据,提前自动在数仓中创建接收表,是不是轻而易举了呢?好吧,更多的运用需要大家去挖掘了。好的产品必然是智能的,必然离不开元数据的运用。“傻瓜式操作”才是用户们喜欢的。^_^ 注重用户体验的你,可以引入下元数据!



                如果大家喜欢可关注公众号,感谢!



                文章转载自数据在此,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论