通过数据字典excel文件在oracle等数据库中生成Hive建表脚本

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mochou111/article/details/85048776

业务场景:从一个系统库里查询得到数据表的数据字典,该数据字典包含表名,表中文名,列名,列中文名,列数据类型,映射情况等字段,那么如何通过该数据字典excle(其他类文件如csv等也可以)文件生成建表脚本呢?

一、把excel文件数据传输到ORACLE数据库

在ORACLE库需要建两张主从表,一张主表包含三个必需字段:TABLE_NAME,TABLE_COMMENT,XH(序号),另一张从表包含TABLE_NAME,COLUMN_ID,COLUMN_NAME,COLUMN_COMMENT,COLUMN_TYPE这些字段,主从表通过TABLE_NAME进行关联;

接着通过plsql的ODBC功能把数据传输到ORACLE数据库  ODBC导入数据流程

二、通过sql select 语句生成建表脚本,有三点需要注意

  1. 建表脚本的注释需要加单引号',但由于在sql中单引号比较特殊,转义过于繁杂,所以生成的建表脚本中单引号统一为@#@,生成之后再一键替换即可
  2. 由于从两个表里选数据,且建表脚本是上下结构,只能采用union all 来进行关联
  3. 最后生成一个子查询,由于表的列顺序也不能变,所以最后也排序,order by 排序表名,字段顺序

三、自动生成脚本如下

--需建立一个主表存放表名和表中文名
--建立从表,存放表名,列ID,列数据类型,列中文注释
--主从表根据表名来关联
--此外为了防止顺序错乱,查询结果需要有三列,第一列关联的表名,第二列建表语句,第三列序号,即列ID 用来排序

select *
  from (SELECT b.odps_table_name as odps_table_name,
               'CREATE TABLE IF NOT EXISTS KF_YS_TY.' || B.ODPS_TABLE_NAME || '(' as create_table_sql,
               0 as xh
          FROM hyht.table_odps_zgw_zb B
        UNION ALL
        SELECT a.odps_table_name as odps_table_name,
               A.COLUMN_NAME || ' ' || A.COLUMN_TYPE || ' COMMENT @#@' ||
               A.COLUMN_CHINESE || '@#@,' as create_table_sql,
               cast(a.column_id as number) as xh
          FROM hyht.table_odps_zgw A
        UNION ALL
        select c.odps_table_name as odps_table_name,
               'ypt_jgsj DATETIME COMMENT @#@云平台加工时间@#@,
                 ypt_ysjczlx STRING COMMENT @#@源数据操作类型@#@,
                 ypt_ysjczsj DATETIME COMMENT @#@源数据操作时间@#@,
                 ypt_ysjczxl STRING COMMENT @#@源数据操作序列@#@
                 )COMMENT @#@' || c.ODPS_TABLE_CHINESE || '@#@
                 PARTITIONED BY ( rfq STRING COMMENT @#@日分区@#@);' as create_table_sql,
               10000000 as xh
          from hyht.table_odps_zgw_zb c) t
 order by t.odps_table_name, t.xh asc

猜你喜欢

转载自blog.csdn.net/mochou111/article/details/85048776