利用mysql元数据自动生成hive建表语句

数仓搭建的过程中,需要将业务数据导入到hive中,但是业务表较多,建表成为一个效率瓶颈。可以利用mysql的元数据库INFORMATION_SCHEMA ,其中COLUMNS和 TABLES这两张表记录了我们需要的表名,列名,comemnt等信息。

下面是生产中实际用到的一个案例sql,在使用时可以根据自己公司的规范进行修改: 可以往where table name中添加多张表,实现批量创建

SELECT CONCAT('create table if not exists ods.ods_',schema_table, ' (',column_info,
              ') comment \'', TABLE_COMMENT, '\' partitioned by (p_date string) ROW FORMAT DELIMITED FIELDS TERMINATED BY \'\\001\' stored as orc',
            ' location \'hdfs://emr-cluster/user/hive/warehouse/fle_ods.db/ods_',schema_table, '\' TBLPROPERTIES ("orc.compress" = "snappy");')
FROM (SELECT TABLE_NAME,
             table_schema,
             schema_new,
             concat(schema_new,'_',TABLE_NAME,'','_di') as schema_table,
             TABLE_COMMENT,
             group_concat(CONCAT(COLUMN_NAME, ' ', DATA_TYPE, ' comment ', '\'', COLUMN_COMMENT, '\'')) AS column_info
      FROM (SELECT t1.TABLE_NAME,
                   t1.table_schema,
                   case when t1.table_schema ='test' then 'other_test' when t1.table_schema='order_test' then 'ods_order' else '??' end as schema_new,
                   t2.TABLE_COMMENT,
                   COLUMN_NAME,
                   CASE
                       WHEN DATA_TYPE = 'varchar' THEN 'string'
                       WHEN DATA_TYPE = 'int' THEN 'string'
                       WHEN DATA_TYPE = 'tinyint' THEN 'string'
                       WHEN DATA_TYPE = 'decimal' THEN 'string'
                       WHEN DATA_TYPE = 'datetime' THEN 'string'
                       WHEN DATA_TYPE = 'timestamp' THEN 'string'
                       WHEN DATA_TYPE = 'float' THEN 'string'
                       WHEN DATA_TYPE = 'double' THEN 'string'
                       when DATA_TYPE = 'bigint' THEN 'string'
                       WHEN DATA_TYPE = 'smallint' THEN 'string'
                       WHEN DATA_TYPE = 'tinyint' THEN 'string'
                       WHEN DATA_TYPE = 'date' THEN 'string'
                       WHEN DATA_TYPE = 'boolean' THEN 'string'
                       WHEN DATA_TYPE = 'time' THEN 'string'END AS DATA_TYPE,
                   COLUMN_COMMENT
            FROM COLUMNS t1
                     JOIN TABLES t2 ON t1.TABLE_NAME = t2.TABLE_NAME
            WHERE t1.TABLE_NAME in ('test_table_1','table_2')
           ) t3
      GROUP BY TABLE_NAME, TABLE_COMMENT
     ) t4
要读取文件并生成Hive建表语句,可以按照以下步骤进行: 1. 首先,需要确定文件的格式和字段的分隔符。一般来说,Hive支持多种文件格式,如文本文件(CSV、TSV等)、Parquet、ORC等。同时,还需要知道字段的分隔符,通常是逗号、制表符或者其他自定义符号。 2. 使用Hive的LOAD DATA语句将文件加载到Hive表中。LOAD DATA语句用于将外部文件加载到Hive表中,并自动将文件的数据映射到Hive表的字段中。可以指定文件的路径、表名以及字段的分割符。 3. 查看加载的数据是否正确。可以使用Hive的SELECT语句从加载的表中查询数据,以确保数据加载正确。 4. 生成建表语句。可以通过Hive自带的工具或者编写自定义脚本生成建表语句。如果使用Hive自带的工具,可以使用Hive的DESCRIBE表命令来查看表的元数据信息,并将元数据信息用于生成建表语句。如果使用自定义脚本,可以读取加载的表的元数据信息,然后根据元数据信息来生成建表语句。 5. 根据字段的类型和属性生成建表语句。根据表的字段类型和属性(如VARCHAR、INT、DECIMAL等)以及字段的分隔符,可以生成对应的建表语句。可以使用Hive的CREATE TABLE语句来创建表,并指定表的名称、字段列表、数据类型和数据分隔符等信息。 总结起来,要读取文件并生成Hive建表语句,首先加载文件到Hive表中,然后根据加载的数据和字段属性生成建表语句。最后,使用生成建表语句创建Hive表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值