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 "模块模版表";
今天的分享就到这里。