我是靠谱客的博主 疯狂大炮,最近开发中收集的这篇文章主要介绍通过数据字典excel文件在oracle等数据库中生成Hive建表脚本,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

业务场景:从一个系统库里查询得到数据表的数据字典,该数据字典包含表名,表中文名,列名,列中文名,列数据类型,映射情况等字段,那么如何通过该数据字典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

 

最后

以上就是疯狂大炮为你收集整理的通过数据字典excel文件在oracle等数据库中生成Hive建表脚本的全部内容,希望文章能够帮你解决通过数据字典excel文件在oracle等数据库中生成Hive建表脚本所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部