目录
[如果觉得本文对你有帮助,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下:](#如果觉得本文对你有帮助,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下:)
[专栏 原价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进阶实战技巧
可以参考如下教程,具体链接如下
上面链接中的文章及技巧会不定期更新。
(2)数仓建模实战技巧和个人心得
1)新人入职新公司后应如何快速了解业务?
2)以业务视角看宽表化建设?
- 维度建模 or 关系型建模?
4)业务模型与数据模型有什么区别?业务阶段的模型该如何建设?
5)业务指标体系该如何建设?指标体系该如何维护?指标平台应如何建设?指标体系 该由谁来搭建?
6)如何优雅设计DWS层?DWS层模型好坏该如何评价?
7)指标发生异常,该如何排查?应从哪些方面入手寻找问题点?
8) 数据架构的选择,mpp or hadoop?
9)数仓团队应如何体现自己的业务价值,讲好数据故事?
10)BI与大数据有什么关系?BI与信息化、数字化之间有什么关系?BI与报表之间的关 系?
11)数据部门如何与业务部门沟通,并规划指引业务需求?
文章不限于以上内容,有新的想法也会及时更新到该专栏。
具体专栏链接如下: