【数据库表及字段统计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;
相关推荐
Oueii1 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
未来龙皇小蓝2 小时前
【MySQL-索引调优】11:Group by相关概念
数据库·mysql·性能优化
2401_831824962 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python
njidf2 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
twc8292 小时前
大模型生成 QA Pairs 提升 RAG 应用测试效率的实践
服务器·数据库·人工智能·windows·rag·大模型测试
@我漫长的孤独流浪2 小时前
Python编程核心知识点速览
开发语言·数据库·python
2401_851272992 小时前
实战:用Python分析某电商销售数据
jvm·数据库·python
枕布响丸辣2 小时前
MySQL 从入门到精通:完整操作手册与实战指南
数据库·mysql
电商API&Tina2 小时前
【电商API接口】开发者一站式电商API接入说明
大数据·数据库·人工智能·云计算·json
2401_857918292 小时前
用Python和Twilio构建短信通知系统
jvm·数据库·python