【数据库表及字段统计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;
相关推荐
得物技术14 分钟前
指标平台:从语义底座到智能消费的实践路径|得物技术
数据库·人工智能·ai编程
StarRocks_labs22 分钟前
当大模型调用进入执行引擎:StarRocks AI Function 全新能力解析
数据库·starrocks·sql·ai·pipeline·数据处理·join
开心麻瓜22 分钟前
一条 SQL 跑了 8 秒,优化到 200ms 的全过程
mysql
TDengine (老段)29 分钟前
TDengine 常见问题 TOP4
数据库·物联网·时序数据库·tdengine·涛思数据·升级·tdengine 问题
小蒜学长41 分钟前
基于RFID技术的仓储管理系统设计(代码+数据库+LW)
java·数据库·spring boot·后端·rfid技术·仓储管理
梦影_1 小时前
Langchain简单快速上手教程(五)——聊天模型之流式传输
java·数据库·人工智能·python·langchain
润乾软件1 小时前
SQLazy:找出含 5 个以上连续字母表顺序字母的字符串
sql·sqlazy
数据狐(Datafox)1 小时前
1688商品列表API接口解析(附 JSON 样例)
java·开发语言·数据库·爬虫·json
FYKJ_20101 小时前
【毕设分享】基于Web的校园兼职信息发布与申请系统07059
前端·vue.js·spring boot·mysql·typescript·spark·课程设计
adinnet20262 小时前
客服与工单:响应时长与满意度问数
数据库·人工智能