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

devtools/2024/9/30 0:21:39/

目录

一、需求

二、实现步骤

1.数据类型转换维表

sql%E6%89%B9%E9%87%8F%E7%94%9F%E6%88%90%E5%BB%BA%E8%A1%A8%E8%AF%AD%E5%8F%A5-toc" style="margin-left:80px;">2.sql批量生成建表语句

三、小结

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

数字化建设通关指南

专栏 原价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='数据类型转换维表';

 数据示例如下:

源库

源库数据类型

目标库

目标库数据类型

更新时间

sql>mysql

bigint

hive

bigint

20220817

sql>mysql

int

hive

bigint

sql>mysql

tinyint

hive

bigint

sql>mysql

char

hive

string

sql>mysql

varchar

hive

string

sql>mysql

datetime

hive

datetime

sql>mysql

decimal

hive

double

sql>mysql

double

hive

double

sql>mysql

float

hive

double

sql>mysql

json

hive

string

sql>mysql

mediumtext

hive

string

sql>mysql

text

hive

string

sql>mysql

time

hive

string

sql>mysql

timestamp

hive

timestamp

sql>mysql

varbinary

hive

binary

sql>mysql

binary

hive

binary

sql%E6%89%B9%E9%87%8F%E7%94%9F%E6%88%90%E5%BB%BA%E8%A1%A8%E8%AF%AD%E5%8F%A5">2.sql批量生成建表语句

sql">SELECTa.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(SELECTTABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,ORDINAL_POSITION,DATA_TYPE,COLUMN_COMMENTFROM information_schema.COLUMNSWHERE TABLE_SCHEMA='你的库名') a
LEFT JOIN information_schema.TABLES bON a.TABLE_NAME=b.TABLE_NAMEAND a.TABLE_SCHEMA=b.TABLE_SCHEMA
--源库为sql>mysql,目标库为hive
LEFT JOIN(select*from dim_data_type_convertwhere source='sql>mysql' and target='hive') cON a.DATA_TYPE=c.source_data_type
where b.TABLE_TYPE='BASE TABLE'
GROUP BYa.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)以业务视角看宽表化建设?

       3)  维度建模 or 关系型建模?

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

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

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

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

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

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

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

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

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

具体专栏链接如下:

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

 


http://www.ppmy.cn/devtools/118966.html

相关文章

Battery Connector接触电阻仿真

下面是一款Battery Connector的透视图 该Battery Connector接触电阻设计目标值为:30 Milliohms Maximum。这款Battery Connector的端子比较复杂,难以用公式进行准确计算,这里用Ansys Q3D对接触电阻做仿真计算。在上一篇连接器接触电阻仿真教程中已经讲过:连接器的接…

Quill Editor 富文本编辑器的高度问题

问题现象 1. 编辑框只有一行高; 2. 编辑框高度足够,但显示不全,左侧有滚动条。向下拉滚动条,编辑框把工具栏向上顶出去,工具栏看不见了。 网上搜出来一大堆各种说法,照猫画虎,有时候对&#…

ConcurrentHashMap是怎么实现的?

1.是什么 ConcurrentHashMap 是 Java 并发包(java.util.concurrent)中的一个线程安全的哈希表实现。与 HashMap 相比,ConcurrentHashMap 在并发环境下具有更高的性能,因为它允许多个线程并发地进行读写操作而不会导致数据不一致。…

linux中system和shell有什么关系

在Linux中&#xff0c;system函数和Shell之间有着密切的关系&#xff0c;主要体现在以下几个方面&#xff1a; 一、system函数简介 system函数是C语言标准库&#xff08;<stdlib.h>&#xff09;中的一个函数&#xff0c;它允许程序执行一个外部命令&#xff0c;就像在S…

redis01

redis概念 远程字典服务 是一个开源的使用ANSI C语言编写&#xff0c;支持网络&#xff0c;可基于内存亦可持久化的日志类型&#xff0c;ker-value数据库&#xff0c;并提供多种语言的API&#xff0c;它支持多种类型的数据结构&#xff0c;&#xff1a;字符串 散列 列表 集合…

人工智能领域-----机器学习和深度学习的区别

机器学习和深度学习都是人工智能领域中的重要概念&#xff0c;它们之间存在以下一些区别&#xff1a; 一、定义与概念 机器学习&#xff1a; 是一种让计算机自动学习和改进的方法&#xff0c;通过从数据中学习模式和规律&#xff0c;从而能够对新的数据进行预测或决策。涵盖了…

创建数据/采集数据+从PI数据到PC+实时UI+To PLC

Get_Data ---------- import csv import os import random from datetime import datetime import logging import time # 配置日志记录 logging.basicConfig(filename=D:/_Study/Case/Great_Data/log.txt, level=logging.INFO, format=%(asctime)s - %(l…

深度学习:调整学习率

目录 前言 一、什么是调整学习率&#xff1f; 二、调整学习率的作用 三、怎么调整学习率 1.有序调整 2.自适应调整 3.自定义调整 4.调整示例 前言 在深度学习中&#xff0c;调整学习率是非常重要的&#xff0c;它对模型的训练效果和收敛速度有显著影响。 一、什么是调整…