数仓建模:DataX同步Mysql数据到Hive如何批量生成建表语句?| 基于SQL实现

目录

一、需求

二、实现步骤

1.数据类型转换维表

2.sql批量生成建表语句

三、小结

[如果觉得本文对你有帮助,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下:](#如果觉得本文对你有帮助,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下:)

数字化建设通关指南

[专栏 原价99,现在活动价39.9,按照阶梯式增长,还差3个名额将上升至59.9,直到恢复原价。](#专栏 原价99,现在活动价39.9,按照阶梯式增长,还差3个名额将上升至59.9,直到恢复原价。)


一、需求

数据采集时如果使用datax的话,必须先手工建好表之后才能进行数据采集;使用sqoop的话虽然可以默认建表,但是每次还要手工配置命令。表数量不多的话还好,如果多库多表需要批量采集的话工作量会很大,因此需要一个批量生成建表语句的功能来节省人力。

二、实现步骤

1.数据类型转换维表

先确定好异构数据源的数据类型转换关系,可以定义好一张维表。

sql 复制代码
CREATE TABLE dim_data_type_convert
     (
         source string comment '源库',
         source_data_type string comment '源库数据类型',
         target string comment '目标库',
         target_data_type string comment '目标库数据类型',
         update_time string comment '更新时间'
     )
 COMMENT='数据类型转换维表';

数据示例如下:

源库 源库数据类型 目标库 目标库数据类型 更新时间
mysql bigint hive bigint 20220817
mysql int hive bigint
mysql tinyint hive bigint
mysql char hive string
mysql varchar hive string
mysql datetime hive datetime
mysql decimal hive double
mysql double hive double
mysql float hive double
mysql json hive string
mysql mediumtext hive string
mysql text hive string
mysql time hive string
mysql timestamp hive timestamp
mysql varbinary hive binary
mysql binary hive binary

2.sql批量生成建表语句

sql 复制代码
SELECT
    a.TABLE_NAME ,
    b.TABLE_COMMENT ,
    concat('CREATE TABLE IF NOT EXISTS ',a.TABLE_NAME ,' (',group_concat(concat(a.COLUMN_NAME,' ',
    c.target_data_type," COMMENT '",COLUMN_COMMENT,"'") order by a.TABLE_NAME,a.ORDINAL_POSITION) ,
    ") COMMENT '",b.TABLE_COMMENT ,"' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\\t' STORED AS orc;") AS DDL
FROM
    (
        SELECT
            TABLE_SCHEMA,
            TABLE_NAME,
            COLUMN_NAME,
            ORDINAL_POSITION,
            DATA_TYPE,
            COLUMN_COMMENT
        FROM information_schema.COLUMNS
        WHERE TABLE_SCHEMA='你的库名'
        ) a
LEFT JOIN information_schema.TABLES b
   ON a.TABLE_NAME=b.TABLE_NAME
   AND a.TABLE_SCHEMA=b.TABLE_SCHEMA
--源库为mysql,目标库为hive
LEFT JOIN
    (
	    select
	    *
	    from dim_data_type_convert
	    where source='mysql' and target='hive'
    ) c
   ON a.DATA_TYPE=c.source_data_type
where b.TABLE_TYPE='BASE TABLE'
GROUP BY
    a.TABLE_NAME,
    b.TABLE_COMMENT
;

生成示例:

TABLE_NAME TABLE_COMMENT DDL
TABLE_NAME TABLE_COMMENT CREATE TABLE IF NOT EXISTS TABLE_NAME (COLUMN_NAME target_data_type COMMENT "COLUMN_COMMENT") COMMENT "TABLE_COMMENT " ROW FORMAT DELIMITED FIELDS TERMINATED BY '\\t' STORED AS orc;

三、小结

本文基于SQL给出了一种 DataX同步Mysql数据到Hive批量生成建表语句的方法及技巧,该方法和技巧在数仓开发中经常被用到

如果觉得本文对你有帮助,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下:
数字化建设通关指南
专栏 原价99,现在活动价39.9,按照阶梯式增长,还差3个名额将上升至59.9,直到恢复原价。

主要内容:
(1)SQL进阶实战技巧

可以参考如下教程,具体链接如下

SQL很简单,可你却写不好?也许这才是SQL最好的教程

上面链接中的文章及技巧会不定期更新。

(2)数仓建模实战技巧和个人心得

1)新人入职新公司后应如何快速了解业务?

2)以业务视角看宽表化建设?

  1. 维度建模 or 关系型建模?

4)业务模型与数据模型有什么区别?业务阶段的模型该如何建设?

5)业务指标体系该如何建设?指标体系该如何维护?指标平台应如何建设?指标体系 该由谁来搭建?

6)如何优雅设计DWS层?DWS层模型好坏该如何评价?

7)指标发生异常,该如何排查?应从哪些方面入手寻找问题点?

8) 数据架构的选择,mpp or hadoop?

9)数仓团队应如何体现自己的业务价值,讲好数据故事?

10)BI与大数据有什么关系?BI与信息化、数字化之间有什么关系?BI与报表之间的关 系?

11)数据部门如何与业务部门沟通,并规划指引业务需求?

文章不限于以上内容,有新的想法也会及时更新到该专栏。

具体专栏链接如下:

​​​​​​数字化建设通关指南_莫叫石榴姐的博客-CSDN博客

相关推荐
数据知道8 小时前
PostgreSQL 核心原理:如何利用多核 CPU 加速大数据量扫描(并行查询)
数据库·postgresql
七夜zippoe8 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥8 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
忆~遂愿8 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
忆~遂愿9 小时前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
麦聪聊数据9 小时前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
未来之窗软件服务9 小时前
数据库优化提速(四)新加坡房产系统开发数据库表结构—仙盟创梦IDE
数据库·数据库优化·计算机软考
米羊1219 小时前
已有安全措施确认(上)
大数据·网络
人道领域10 小时前
AI抢人大战:谁在收割你的红包
大数据·人工智能·算法
Goat恶霸詹姆斯11 小时前
mysql常用语句
数据库·mysql·oracle