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