SQL之mysql到hive批量生成建表语句

目录

一、需求

二、实现步骤

1.数据类型转换维表

2.sql批量生成建表语句


一、需求

数据采集时如果使用datax的话,必须先手工建好表之后才能进行数据采集;使用sqoop的话虽然可以默认建表,但是每次还要手工配置命令。表数量不多的话还好,如果多库多表需要批量采集的话工作量会很大,因此需要一个批量生成建表语句的功能来节省人力。

二、实现步骤

1.数据类型转换维表

先确定好异构数据源的数据类型转换关系,可以定义好一张维表。

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

数据示例如下:

源库源库数据类型目标库目标库数据类型更新时间
mysqlbiginthivebigint20220817
mysqlinthivebigint
mysqltinyinthivebigint
mysqlcharhivestring
mysqlvarcharhivestring
mysqldatetimehivedatetime
mysqldecimalhivedouble
mysqldoublehivedouble
mysqlfloathivedouble
mysqljsonhivestring
mysqlmediumtexthivestring
mysqltexthivestring
mysqltimehivestring
mysqltimestamphivetimestamp
mysqlvarbinaryhivebinary
mysqlbinaryhivebinary

2.sql批量生成建表语句

SELECT
    a.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
    (
        SELECT
            TABLE_SCHEMA,
            TABLE_NAME,
            COLUMN_NAME,
            ORDINAL_POSITION,
            DATA_TYPE,
            COLUMN_COMMENT
        FROM information_schema.COLUMNS
        WHERE TABLE_SCHEMA='你的库名'
        ) a
LEFT JOIN information_schema.TABLES b
   ON a.TABLE_NAME=b.TABLE_NAME
   AND a.TABLE_SCHEMA=b.TABLE_SCHEMA
--源库为mysql,目标库为hive
LEFT JOIN
    (
	    select
	    *
	    from dim_data_type_convert
	    where source='mysql' and target='hive'
    ) c
   ON a.DATA_TYPE=c.source_data_type
where b.TABLE_TYPE='BASE TABLE'
GROUP BY
    a.TABLE_NAME,
    b.TABLE_COMMENT
;

生成示例:

TABLE_NAMETABLE_COMMENTDDL
TABLE_NAMETABLE_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;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值