数据中台-数据采集

本文介绍了如何通过SQL查询从不同数据库中获取表、字段、外键、索引、触发器、视图、函数和存储过程等元数据信息,为后续的数据清洗和数据管理做准备。提供了详细的SQL脚本示例,并展示了如何组织这些信息以构建数据导图。同时,提到了一个名为`PigSqlQuery`的类,该类用于根据配置文件读取并返回相应的SQL查询语句。
摘要由CSDN通过智能技术生成

数据导图

采集不同数据库库、表、字段、函数、外键、存储过程等,为后续清洗做准备
在这里插入图片描述

数据采集

1. 获取数据库所有表

SELECT TABLE_NAME AS TB_NAME,
		TABLE_NAME AS EN_NAME,
		TABLE_COMMENT COMMENTS,
		CREATE_TIME AS CREATE_TIME
		FROM INFORMATION_SCHEMA.TABLES
		WHERE table_type = 'BASE TABLE' AND TABLE_SCHEMA = (SELECT DATABASE())

在这里插入图片描述

2. 获取数据库所有字段

SELECT ORDINAL_POSITION AS RN,
		TABLE_NAME AS TB_NAME,
		COLUMN_NAME AS EN_NAME,
		DATA_TYPE AS DATA_TYPE,
		CASE WHEN data_type = 'float' OR data_type = 'double' OR data_type = 'decimal' 
		THEN NUMERIC_PRECISION ELSE CHARACTER_MAXIMUM_LENGTH END AS DATA_LENGTH,
		NUMERIC_SCALE AS PRECISION_LENGTH,
		CASE EXTRA WHEN 'auto_increment' THEN 1 ELSE 0 END AS IS_IDENTITY,
		CASE WHEN COLUMN_KEY = 'PRI' THEN 1 ELSE 0 END AS IS_PK,
		CASE WHEN IS_NULLABLE = 'NO' THEN 0 ELSE 1 END AS IS_NULL,
		COLUMN_DEFAULT AS DEFAULT_VALUE,
		COLUMN_COMMENT AS COMMENTS
		FROM information_schema.columns
		WHERE table_schema = (SELECT DATABASE()) ORDER BY TB_NAME,RN

在这里插入图片描述

3. 获取表所有的外键

SELECT
		C.TABLE_SCHEMA,
		C.REFERENCED_TABLE_NAME FK_CONN_TABLE,
		C.REFERENCED_COLUMN_NAME FK_CONN_COLUMNS,
		C.TABLE_NAME TB_NAME,
		C.COLUMN_NAME FK_COLUMN,
		C.CONSTRAINT_NAME FK_NAME,
		T.TABLE_COMMENT REMARK,
		R.UPDATE_RULE UPDATE_ACTION,
		R.DELETE_RULE DELETE_ACTION
		FROM
		INFORMATION_SCHEMA.KEY_COLUMN_USAGE C
		JOIN INFORMATION_SCHEMA.TABLES T ON T.TABLE_NAME = C.TABLE_NAME
		JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS R ON R.TABLE_NAME = C.TABLE_NAME
		AND R.CONSTRAINT_NAME = C.CONSTRAINT_NAME
		AND R.REFERENCED_TABLE_NAME = C.REFERENCED_TABLE_NAME
		WHERE
		C.REFERENCED_TABLE_NAME IS NOT NULL
		AND C.table_schema = (SELECT DATABASE())

在这里插入图片描述

4. 获取表所有的索引

SELECT TABLE_NAME TB_NAME,
		INDEX_NAME,
		GROUP_CONCAT(COLUMN_NAME) AS INDEX_COLUMNS,
		SUBSTRING_INDEX(GROUP_CONCAT(INDEX_COMMENT), ',', 1) AS COMMENTS,
		SUBSTRING_INDEX(GROUP_CONCAT(INDEX_TYPE), ',', 1) AS INDEX_TYPE
		FROM INFORMATION_SCHEMA.STATISTICS
		WHERE TABLE_SCHEMA = (SELECT DATABASE()) AND INDEX_NAME != 'PRIMARY'
		GROUP BY TABLE_NAME, INDEX_NAME

在这里插入图片描述

5. 获取表所有的触发器

SELECT EVENT_OBJECT_TABLE AS TB_NAME,
		TRIGGER_NAME       AS TRI_NAME,
		ACTION_TIMING      AS TRI_TIME,
		EVENT_MANIPULATION AS TRI_ENVENT,
		ACTION_STATEMENT   AS SQL_STR
		FROM information_schema.TRIGGERS
		WHERE trigger_schema = (SELECT DATABASE())

在这里插入图片描述

6. 获取数据库所有的视图信息

SELECT a.TABLE_NAME VIEW_NAME,
		a.TABLE_NAME AS EN_NAME,
		a.TABLE_COMMENT COMMENTS,
		a.CREATE_TIME AS CREATE_TIME,
		b.VIEW_DEFINITION AS SQL_STR
		FROM INFORMATION_SCHEMA.TABLES a LEFT JOIN
		INFORMATION_SCHEMA.VIEWS b ON a.table_NAME = b.TABLE_NAME
		WHERE a.table_type = 'VIEW' AND a.TABLE_SCHEMA = (SELECT DATABASE())

在这里插入图片描述

7. 获取数据库所有的函数信息

SELECT ROUTINE_NAME       AS FUNC_NAME,
		ROUTINE_NAME       AS EN_NAME,
		ROUTINE_DEFINITION AS SQL_STR
		FROM INFORMATION_SCHEMA.ROUTINES
		WHERE ROUTINE_TYPE = 'FUNCTION'
		AND Routine_SCHEMA = (SELECT DATABASE())

在这里插入图片描述

8. 获取数据库所有的存储过程

SELECT ROUTINE_NAME       AS PROC_NAME,
		ROUTINE_NAME       AS EN_NAME,
		ROUTINE_DEFINITION AS SQL_STR
		FROM INFORMATION_SCHEMA.ROUTINES
		WHERE ROUTINE_TYPE = 'PROCEDURE'
		AND Routine_SCHEMA = (SELECT DATABASE())

在这里插入图片描述

实践脚本

在这里插入图片描述

代码解析

  • PigConstant
public final class PigConstant {
    /**
     * 数据库
     */
    public static String PIG_MYSQL       = "query/10_mysql.xml";
    public static String PIG_ORACLE      = "query/11_oracle.xml";
    public static String PIG_POSTGRESQL  = "query/12_postgresql.xml";
    public static String PIG_GREENPLUM   = "query/12_greenplum.xml";
    public static String PIG_SQLSERVER   = "query/13_sqlserver.xml";
    public static String PIG_DM          = "query/14_dm.xml";
    public static String PIG_KINGBASE8   = "query/15_kingbase8.xml";
    public static String PIG_OSCAR       = "query/16_oscar.xml";
    /**
     * 查询
     */
    public static String PIG_1_DB_TABLE_SQL      = "1dbTableSql";
    public static String PIG_2_DB_TABLEFIELD_SQL = "2dbTableFieldSql";
    public static String PIG_3_DB_TABLEFK_SQL    = "3dbTableFkSql";
    public static String PIG_4_DB_TABLEINDEX_SQL = "4dbTableIndexSql";
    public static String PIG_5_DB_TABLETRI_SQL   = "5dbTableTriSql";
    public static String PIG_6_DB_VIEW_SQL       = "6dbViewSql";
    public static String PIG_7_DB_FUNCTION_SQL   = "7dbFunctionSql";
    public static String PIG_8_DB_PROCEDURE      = "8dbProcedure";

}
  • IPigSqlQuery
public interface IPigSqlQuery {
	Object getDbQuery(String name);
}
  • PigSqlQuery
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.core.io.ClassPathResource;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class PigSqlQuery implements IPigSqlQuery {

    private static Map<String, Object> dbQuery = new HashMap<>();

    public PigSqlQuery(String configXml) {
        InputStream is = null;
        Document document = null;
        try {
            SAXReader reader = new SAXReader();
            ClassPathResource classPathResource = new ClassPathResource(configXml);
            is = classPathResource.getInputStream();
            document = reader.read(is);
            is.close();
            List<Element> elements = document.getRootElement().elements();
            for (Element element : elements) {
                String id = element.attributeValue("id");//获取id属性
                String content = element.getText();
                dbQuery.put(id, content);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (document != null) {
                document.clone();
            }
        }
    }

    /**
     * 根据名字来获取实例
     *
     * @param name
     * @return
     */
    @Override
    public String getDbQuery(String name) {
        String sql = (String) dbQuery.get(name);
        return sql;
    }
}
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

掘金者说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值