各位用户为了找寻关于Mysql元数据如何生成Hive建表语句注释脚本详解的资料费劲了很多周折。这里教程网为您整理了关于Mysql元数据如何生成Hive建表语句注释脚本详解的相关资料,仅供查阅,以下为您介绍关于Mysql元数据如何生成Hive建表语句注释脚本详解的详细内容
前言
本文主要给大家介绍了关于Mysql元数据生成Hive建表语句注释脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:
最近在将数据从Mysql 等其他关系型数据库 抽取到Hive 表中时,需要同步mysql表中的注释,以下脚本可以生成hive表字段注释修改语句。
注:其他关系型数据库如:oracle 可以通过相同的思路,读取元数据,修改脚本语法实现。
使用:
在mysql元数据库:information_schema 中执行以下语句
? 1 2 3 4 5SELECT
CONCAT(
'alter table '
, TABLE_NAME,
' CHANGE COLUMN '
, COLUMN_NAME,
' '
, COLUMN_NAME,
' '
, DATA_TYPE,
' comment '
,
'"'
, COLUMN_COMMENT,
'"'
,
';'
)
FROM
(
SELECT
TABLE_NAME, 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, COLUMN_COMMENT
FROM
COLUMNS
WHERE
TABLE_NAME =
'o_oms_statistic_profit'
) t;
在将数据从Mysql 等其他关系型数据库 抽取到Hive 表中时,需要同步mysql表中的注释,以下脚本可以生成hive创建表语句。只是生成了hive表主要的字段信息,其他信息需要手工添加。
在mysql元数据库:information_schema 中执行以下语句
? 1 2 3 4 5 6 7 8SELECT
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
WHERE
t1.TABLE_NAME =
'o_oms_statistic_profit'
) t3
GROUP
BY
TABLE_NAME, TABLE_COMMENT
) t4;
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
原文链接:http://www.cnblogs.com/sunjava/p/7344876.html