【数据库表及字段统计SQL】【mysql】【clickhouse】【oracle】

最近在一些元数据整理时,需要对数据库进行澄清,奈何数据库没有专门的运维工程师,得自行取相关信息,故最终整理了相关统计语句。


Clickhouse 元数据明细


sql 复制代码
SELECT
     t1.database  AS `库名`
    ,t1.name      AS `表名`
    ,replaceRegexpAll(toString(t1.comment),'\n|\\|','') AS `表注释`
    ,t2.name AS `字段名`
    ,replaceRegexpAll(toString(t2.comment),'\n|\\|','') AS `字段注释`
    ,t2.position  AS `字段序号`
FROM  system.tables t1
LEFT JOIN
system.columns t2
ON t1.database = t2.database AND t1.name = t2.table
WHERE  t1.database IN ('test')
ORDER BY `库名`
    ,`表名`
    ,`字段序号`

replaceRegexpAll和toString由于是clickhouse数据库,严格区分大小写。


Oracle 元数据明细


sql 复制代码
SELECT
     tab.owner                                                              库名
    ,tab.table_name                                                        表名
    ,REGEXP_REPLACE(REGEXP_REPLACE(tab.comments,chr(10),';'),'\|',';')   表注释
    ,col.column_name                                                        字段名
    ,REGEXP_REPLACE(REGEXP_REPLACE(colc.comments,chr(10),';'),'\|',';')  字段注释
    ,col.column_id                                                         字段序号
FROM all_tab_comments tab
LEFT JOIN all_tab_columns col
ON tab.owner=col.owner AND tab.table_name=col.table_name
LEFT JOIN all_col_comments colc
ON tab.owner=colc.owner AND tab.table_name=colc.table_name AND col.column_name =colc.column_name
WHERE tab.owner IN ('test')
ORDER BY tab.owner
	,tab.table_name
	,tab.comments
	,col.column_id

MYSQL 元数据明细


sql 复制代码
SELECT
     tab.table_schema                                                  库名
    ,tab.table_name                                                    表名
    ,CONVERT(REGEXP_REPLACE(tab.table_comment,'\n|\\|',';')USING utf8) 表注释
    ,col.column_name                                                   字段名
    ,CONVERT(REGEXP_REPLACE(col.column_comment,'\n|\\|',';')USING utf8) 字段注释
    ,col.ordinal_position                                              字段序号
FROM information_schema.tables tab
LEFT JOIN information_schema.columns  col
ON tab.table_schema = col.table_schema AND tab.table_name = col.table_name
WHERE 1=1
ORDER BY tab.table_schema
	,tab.table_name
	,col.ordinal_position

其中REGEXP_REPLACE正则替换函数mysql5.7及以下需要自定义,5.8及以后数据库自带

sql 复制代码
#创建前删除已经创建的自定义函数
DROP FUNCTION IF EXISTS test.regexp_replace;
#创建 regexp_replace函数
DELIMITER $$
$$
CREATE FUNCTION  test.`regexp_replace`(string_a VARCHAR(20000),pattern VARCHAR(20000),string_b VARCHAR(20000))  RETURNS VARCHAR(20000)  DETERMINISTIC
BEGIN
    DECLARE string_c VARCHAR(20000);
    DECLARE nub VARCHAR(1);
    DECLARE i INT;
    SET i =1;
    SET string_c ='';
    IF string_a REGEXP pattern
        THEN  loop_label :
            LOOP
                IF i > CHAR_LENGTH(string_a)
                    THEN  LEAVE loop_label;
                END IF;
                SET nub = SUBSTRING(string_a,i,1);
                IF NOT nub REGEXP pattern
                    THEN  SET string_c = CONCAT(string_c,nub);
                    ELSE  SET string_c = CONCAT(string_c,string_b);
                END IF;
                SET i=i+1;
            END LOOP;
        ELSE SET string_c = string_a;
    END IF;
    RETURN string_c;
END$$
DELIMITER;
相关推荐
智海观潮24 分钟前
Flink CDC支持Oracle RAC架构CDB+PDB模式的实时数据同步吗,可以上生产环境吗
大数据·oracle·flink·flink cdc·数据同步
鬼才血脉39 分钟前
Linux(centos)安装 MySQL 8
linux·mysql·centos
float_六七2 小时前
SQL六大核心类别全解析
数据库·sql·oracle
Code季风4 小时前
将 gRPC 服务注册到 Consul:从配置到服务发现的完整实践(上)
数据库·微服务·go·json·服务发现·consul
Boilermaker19924 小时前
【Java EE】SpringIoC
前端·数据库·spring
霸王龙的小胳膊4 小时前
泛微虚拟视图-数据虚拟化集成
数据库
灵犀学长4 小时前
解锁Spring Boot多项目共享Redis:优雅Key命名结构指南
数据库·redis
轩情吖4 小时前
Qt的信号与槽(二)
数据库·c++·qt·信号·connect·信号槽·
ZeroNews内网穿透5 小时前
服装零售企业跨区域运营难题破解方案
java·大数据·运维·服务器·数据库·tcp/ip·零售
可观测性用观测云5 小时前
达梦数据库监控观测最佳实践
数据库