最近在一些元数据整理时,需要对数据库进行澄清,奈何数据库没有专门的运维工程师,得自行取相关信息,故最终整理了相关统计语句。
Clickhouse 元数据明细
SELECT
t1.database AS `库名`
,t1.name AS `表名`
,replaceRegexpAll(toString(t1.comment),'\n|\\|','') AS `表注释`
,t2.name AS `字段名`
,replaceRegexpAll(toString(t2.comment),'') 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 元数据明细
SELECT
tab.owner 库名
,tab.table_name 表名
,REGEXP_REPLACE(REGEXP_REPLACE(tab.comments,chr(10),';'),'\|',';') 表注释
,col.column_name 字段名
,REGEXP_REPLACE(REGEXP_REPLACE(colc.comments,';') 字段注释
,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 元数据明细
SELECT
tab.table_schema 库名
,tab.table_name 表名
,CONVERT(REGEXP_REPLACE(tab.table_comment,';')USING utf8) 表注释
,col.column_name 字段名
,CONVERT(REGEXP_REPLACE(col.column_comment,';')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
,col.ordinal_position
其中REGEXP_REPLACE正则替换函数mysql5.7及以下需要自定义,5.8及以后数据库自带
#创建前删除已经创建的自定义函数
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;
原文地址:https://blog.csdn.net/qq_39886984/article/details/134493096
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。