编程教育资源分享平台

网站首页 > 后端开发 正文

数据仓库工具方法-维度表同步 mysql表结构同步到Hive

luoriw 2024-04-04 12:50:23 后端开发 12 ℃ 0 评论

mysql 中的数据类型与Hive 是有区别的,但是他们有规律, 有规律就好办了, 我们可以通过写程序来批量处理,来提高我们的工作效率。

来我们开干。

MySQL 中的表结构都是存在一个固定的数据库中,它的名字是:information_schema

字段是存储在固定的表中:COLUMNS

我们先直接上脚本

SELECT
	CONCAT(
		'create table ',
		TABLE_NAME,
		'(',
		substring( column_info, 1, length( column_info ) - 1 ),
		')',
		' comment ',
		'"',
		TABLE_COMMENT,
		'"',
		';' 
) 
FROM
	(
	SELECT
		TABLE_NAME,
		TABLE_COMMENT,
		group_concat( CONCAT( COLUMN_NAME, ' ', DATA_TYPE, ' comment ', '"', COLUMN_COMMENT, '"' ) ) AS column_info 
	FROM
		(
		SELECT
			t1.TABLE_NAME,
		CASE
				
				WHEN t2.TABLE_COMMENT = NULL THEN
				t1.TABLE_NAME ELSE t2.TABLE_COMMENT 
			END AS TABLE_COMMENT,
			COLUMN_NAME,
		CASE
				
				WHEN DATA_TYPE = 'varchar' THEN
				'string' 
				WHEN DATA_TYPE = 'int' THEN
				'int' 
				WHEN DATA_TYPE = 'tinyint' THEN
				'tinyint' 
				WHEN DATA_TYPE = 'decimal' THEN
				'double' 
				WHEN DATA_TYPE = 'datetime' THEN
				'string' 
				WHEN DATA_TYPE = 'timestamp' THEN
				'string' 
				WHEN DATA_TYPE = 'float' THEN
				'double' 
				WHEN DATA_TYPE = 'double' THEN
				'double' 
				WHEN DATA_TYPE = 'bigint' THEN
				'bigint' 
			END AS DATA_TYPE,
		CASE
				
				WHEN COLUMN_COMMENT = NULL THEN
				COLUMN_NAME ELSE COLUMN_COMMENT 
			END AS COLUMN_COMMENT 
		FROM
			COLUMNS t1
			JOIN TABLES t2 ON t1.TABLE_NAME = t2.TABLE_NAME and   t1.TABLE_SCHEMA = t2.TABLE_SCHEMA 
		WHERE
			t1.TABLE_NAME = 'book_module_stencil'  and t1.TABLE_SCHEMA='yyb_test'
			
		) t3 
	GROUP BY
		TABLE_NAME,
	TABLE_COMMENT 
	) t4;

book_module_stencil 替换成你的表名称。

yyb_test 替换成你的数据库名称。

执行结果是这样的



格式化后是这样的

CREATE TABLE book_module_stencil (
	id string COMMENT "id",
	NAME string COMMENT "版块名称",
	type string COMMENT "图书类型(0:教材;1:教辅;2课外)",
	stu_icon string COMMENT "学生端配置图标的地址",
	tea_icon string COMMENT "老师端配置图标的地址",
	sort INT COMMENT "排序",
	remarks string COMMENT "备注信息",
	create_by string COMMENT "创建者",
	create_date string COMMENT "创建时间",
	update_by string COMMENT "更新者",
	update_date string COMMENT "更新时间",
CODE string COMMENT "编码(模块名称首字母)" 
) COMMENT "模块模版表";

今天的分享就到这里。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表
最新留言