高效完成元数据导入(通过表格)

高效完成元数据导入

​ 提升工作效率系列。别人还在吭哧吭哧干体力活的时候,你要将重复的工作尽量标准化,流程化,自动化,代码化。腾出更多的时间摸鱼(提升自己打怪升级)

​ 数据治理中,我们经常要将表的字段等信息登记到一个专门维护元数据的平台上,为了提升效率可能会生成 excle 来高效完成。

​ 比如你要导入excle 需要生成,表名称+英文字段名+中文字段名称+字段类型+类型长度+精度长度。

假如是一张 mysql 的建表语句。

ddl 如下:

CREATE TABLE employee_salary (employee_id INT NOT NULL COMMENT '员工ID',name VARCHAR(100) NOT NULL COMMENT '姓名',position VARCHAR(100) NOT NULL COMMENT '职位',base_salary DECIMAL(10, 2) NOT NULL COMMENT '基础工资',bonus DECIMAL(10, 2) NOT NULL COMMENT '奖金',total_salary DECIMAL(10, 2) GENERATED ALWAYS AS (base_salary + bonus) STORED COMMENT '总工资',PRIMARY KEY (employee_id)
) COMMENT='员工工资表';

下方表格是我们要得到excle 格式

表名称英文字段名中文字段名称字段类型喊长度字段类型字段长度字段长度精度
employee_salaryemployee_id员工IDintint100
employee_salaryname姓名varchar(100)varchar
employee_salaryposition职位varchar(100)varchar
employee_salarybase_salary基础工资decimal(10,2)decimal102
employee_salarybonus奖金decimal(10,2)decimal102
employee_salarytotal_salary总工资decimal(10,2)decimal102

我们可以将字段信息复制出来,通过 notpad++、ue 等工具,将字段抠出来,然后将表名列复制出来,字段类型拿到后,长度精度列在分离,若果是一张表几张表,感觉是可以这样实现,但是如果,你被分配了几十张上百张表怎么办?聪明的你是不是要想别的办法?如果我能通说 mysql 的连接工具直接生成上图所示的 excle 多好呀!有吗?还真有,其实我们应该了解到,一张表的 ddl 语句也是存在 mysql 中的数据,只不过这张表比较特殊存放的是表的元数据信息。还废话不多说,开始下一步。发现从 INFORMATION_SCHEMA.COLUMNS 表中获取表和字段的元数据信息,包括字段顺序。

具体步骤如下:

步骤概述

  1. 创建目标表:创建一个表来存储元数据信息。
  2. 获取表和字段信息:从 INFORMATION_SCHEMA 获取表和字段的元数据信息。
  3. 将元数据插入目标表:按照表名分组,并按字段顺序将这些信息批量插入到目标表中。

1. 创建目标表

创建一个目标表 metadata_info 来存储表名、字段名、字段中文名、字段类型等信息。

CREATE TABLE metadata_info (id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键',table_name VARCHAR(255) NOT NULL COMMENT '表名',column_name VARCHAR(255) NOT NULL COMMENT '字段名',column_comment VARCHAR(255) COMMENT '字段中文名',column_type VARCHAR(255) COMMENT '字段类型',ordinal_position INT COMMENT '字段顺序'
) COMMENT='数据库表的元数据信息';

2. 获取表和字段信息

INFORMATION_SCHEMA.COLUMNS 表中获取表和字段的元数据信息,包括字段顺序。

SELECT TABLE_NAME,COLUMN_NAME,COLUMN_COMMENT,COLUMN_TYPE,ORDINAL_POSITION
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name'
ORDER BY TABLE_NAME, ORDINAL_POSITION;
  • ORDINAL_POSITION 是字段在表中的顺序,TABLE_SCHEMA 替换为你的数据库名。

3. 将元数据插入目标表

将上一步获取到的数据插入到 metadata_info 表中。

INSERT INTO metadata_info (table_name, column_name, column_comment, column_type, ordinal_position)
SELECT TABLE_NAME,COLUMN_NAME,COLUMN_COMMENT,COLUMN_TYPE,ORDINAL_POSITION
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name'
ORDER BY TABLE_NAME, ORDINAL_POSITION;

4. 存储过程

为自动化此过程,可以创建一个存储过程。

创建存储过程

DELIMITER $$CREATE PROCEDURE InsertMetadataInfo(IN dbName VARCHAR(255))
BEGINTRUNCATE TABLE metadata_info;INSERT INTO metadata_info (table_name, column_name, column_comment, column_type, ordinal_position)SELECT TABLE_NAME,COLUMN_NAME,COLUMN_COMMENT,COLUMN_TYPE,ORDINAL_POSITIONFROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_SCHEMA = dbNameORDER BY TABLE_NAME, ORDINAL_POSITION;
END $$DELIMITER ;

调用存储过程

CALL InsertMetadataInfo('your_database_name');

5. 完整的 SQL 示例

假设你的数据库名为 my_database,目标表名为 metadata_info,可以按照以下步骤操作:

创建目标表

CREATE TABLE metadata_info (id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键',table_name VARCHAR(255) NOT NULL COMMENT '表名',column_name VARCHAR(255) NOT NULL COMMENT '字段名',column_comment VARCHAR(255) COMMENT '字段中文名',column_type VARCHAR(255) COMMENT '字段类型',ordinal_position INT COMMENT '字段顺序'
) COMMENT='数据库表的元数据信息';

插入数据

INSERT INTO metadata_info (table_name, column_name, column_comment, column_type, ordinal_position)
SELECT TABLE_NAME,COLUMN_NAME,COLUMN_COMMENT,COLUMN_TYPE,ORDINAL_POSITION
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'my_database'
ORDER BY TABLE_NAME, ORDINAL_POSITION;

创建并调用存储过程

sql
复制代码
DELIMITER $$CREATE PROCEDURE InsertMetadataInfo(IN dbName VARCHAR(255))
BEGINTRUNCATE TABLE metadata_info;INSERT INTO metadata_info (table_name, column_name, column_comment, column_type, ordinal_position)SELECT TABLE_NAME,COLUMN_NAME,COLUMN_COMMENT,COLUMN_TYPE,ORDINAL_POSITIONFROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_SCHEMA = dbNameORDER BY TABLE_NAME, ORDINAL_POSITION;
END $$DELIMITER ;-- 调用存储过程
CALL InsertMetadataInfo('my_database');

6. 验证结果

在插入数据后,你可以查询 metadata_info 表来验证结果是否正确。

SELECT * FROM metadata_info ORDER BY table_name, ordinal_position;

总结

以上步骤详细描述了如何将 MySQL 中的表名、字段名、字段中文名、字段类型等信息批量插入到一个新的表中,并按照表名分组和字段顺序插入。通过创建存储过程,可以使这个过程更加自动化和易于维护。

后续我们也可以做一个前端页面实现交互,直接批量或者单独往一个对话框中丢表名称,自动下载对应的表结构字段信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昇思25天学习打卡营第1天|MindSpore快速入门

今天是参加华为MindSpore昇思25天学习打卡营的第一天,通过博客记录一下自己的学习路程 初识MindSpore 昇思MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景统一部署三大目标。 昇思MindSpore总体架构图 通过一套统一的MindSpore开…

Selenium、chromedriver安装配置

Selenium、chromedriver安装配置 一、Selenium简介二、Selenium安装三、ChromeDriver的安装3.1 查看浏览器版本3.2 下载ChromeDriver3.3 环境变量配置一、Selenium简介 Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的点击、下拉等操作。对于一些JS动态渲染…

河南建筑工程乙级设计资质新办对配备的技术人员有什么要求

河南建筑工程乙级设计资质新办对配备的技术人员有什么要求 河南建筑工程乙级设计资质新办时,对配备的技术人员有以下基本要求: 注册人员:需要配备一定数量的注册工程师,具体包括: 一级注册建筑师2名一级注册结构工程师…

OpenCV视觉--视频人脸微笑检测(超详细,附带检测资源)

目录 概述 具体实现 1.加载分类器 2.打开摄像头并识别人脸 3.处理人脸并检测是否微笑 效果 总结 概述 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,广泛应用于图像处理和视频分析等领…

【STM32】GPIO复用和映射

1.什么叫管脚复用 STM32F4有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。 STM32F4系列微控制器IO引脚通过一个…

KUBIKOS - Animated Cube Mini BIRDS(卡通立方体鸟类)

软件包中添加了对通用渲染管线 (URP) 的支持! KUBIKOS - 动画立方体迷你鸟是17种不同的可爱低多边形移动友好鸟的集合!每只都有自己的动画集。 完美收藏你的游戏! +17种不同的动物! + 低多边形(400~900个三角形) + 操纵和动画! + 4096x4096 纹理图集 + Mecanim 准备就绪…

Windows kubectl终端日志聚合(wsl+ubuntu+cmder+kubetail)

Windows kubectl终端日志聚合 一、kubectl终端日志聚合二、windows安装ubuntu子系统1. 启用wsl支持2. 安装所选的 Linux 分发版 三、ubuntu安装kubetail四、配置cmder五、使用 一、kubectl终端日志聚合 k8s在实际部署时,一般都会采用多pod方式,这种情况下…

大数据平台之Ambari

Apache Ambari 是一个用于配置、管理和监控 Hadoop 集群的开源工具。Ambari 提供了一个直观的用户界面和一组全面的 API,使得管理大数据集群变得更加容易和高效。以下是对 Ambari 的详细介绍: 1. Ambari 概述 Ambari 的主要目的是简化 Hadoop 集群的安…

开源笔记omnivore框架简单介绍

从 package.json 文件的内容可以看出,这个项目使用了多个工具和框架。以下是对其主要特性和工具的解释: 项目特性和工具 Monorepo 管理 使用了 Lerna 来管理多个包,这些包位于 packages/* 目录下。Lerna 是一个流行的工具,用于管…

通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息 需求:通过高德api查询所有店铺地址信息需求分析具体实现1、申请高德appkey2、下载types city 字典值3、具体代码调用 需求:通过高德api查询所有店铺地址信息 需求分析 查询现有高德api发现现有接口关键字搜索API服…

Django Aggregation 使用指南

Django Aggregation 使用指南 在构建Django应用时,我们经常需要对数据库中的数据进行汇总或聚合操作。例如,计算某个字段的平均值、最大值或最小值。这篇文章将详细介绍如何在Django中使用聚合查询,并结合实例进行说明。 聚合查询简介 Dja…

数据库精选题(五)(事务、并行控制与恢复系统)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀数据库 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 前言 概论 事务 并发控制 恢复系统 三…

游戏AI的创造思路-技术基础-机器学习(2)

本篇存在大量的公式,数学不好的孩子们要开始恶补数学了,尤其是统计学和回归方程类的内容。 小伙伴们量力而行~~~~~ 游戏呢,其实最早就是数学家、元祖程序员编写的数学游戏,一脉相承传承至今,囊括了更多的设计师、美术…

QT拖放事件之五:自定义拖放操作-拖动中的修饰符操作

1、效果 2、代码 #include "SelfButton.h" #include <QApplication>SelfButton::SelfButton(QString str ,QWidget* parent):Q

按揭和抵押的区别和联系

按揭和抵押在法律上是有所区别的&#xff1a; 抵押&#xff1a;指的是债务人&#xff08;或第三人&#xff09;将自己的动产或不动产不移交给债权人&#xff0c;作为债权的担保。债务人不履行债务时&#xff0c;债权人有权优先受偿。抵押物不转移占有&#xff0c;仍由债务人或…

JAVA系列---HttpServletRequest

Servlet 处理 HTTP 请求的流程 一般情况下&#xff0c;浏览器&#xff08;客户端&#xff09;通过 HTTP 协议来访问服务器的资源&#xff0c;Servlet 主要用来处理 HTTP 请求。核心对象有三个 Servlet&#xff1a;提供service()方法处理请求ServletRequest&#xff1a;请求信…

leetcode 560.和为k的子数组 | 叱诧风云 !前缀和 + 哈希表优化!

. - 力扣&#xff08;LeetCode&#xff09; 这道题目的解法我个人认为是非常的巧妙的&#xff0c;因为一开始我是没有想到用前缀和和哈希表来解决&#xff0c;所以今天在这里写一篇题解&#xff0c;来回顾也算是巩固一下我对于这道题目的理解。 首先我先来解释一下&#xff0…

linux中的调试工具gdb

目录 1.背景知识补充 2.使用 知识补充 1.背景知识补充 1.gcc下编译默认是release方式发布的&#xff0c;无法直接进行调试 如果要以debug方式发布&#xff0c;需要携带-g 可以使用grep查询 因为携带debug信息&#xff0c;其文件体积要大一些 2.使用 1.gdb 可执行程序 …

hibernate:hibernate初始化加载类

目录 一、SessionFactory 接口 1、初始化hibernate 2、获取SessionFactory实例 3、创建获取Session 4、关闭Session和SessionFactory 最终配置 二、Session 接口 1、get()方法和load()方法&#xff1a; 2、查询 3、保存 4、删除 5、更新 6、一个完整的DAO接口实现类 …

北邮《计算机网络》网络层笔记

文章目录 单词复习网络层前言路由算法&#xff08;构造路由表的算法&#xff09;静态路由算法自适应算法 拥塞控制QoS 服务质量&#xff08;小小的一节&#xff09;网络互联&#xff08;还是小小的一节&#xff09;Internet 单词复习 estimates boot off-line in advance refl…