概述
业务场景:从一个系统库里查询得到数据表的数据字典,该数据字典包含表名,表中文名,列名,列中文名,列数据类型,映射情况等字段,那么如何通过该数据字典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 语句生成建表脚本,有三点需要注意
- 建表脚本的注释需要加单引号',但由于在sql中单引号比较特殊,转义过于繁杂,所以生成的建表脚本中单引号统一为@#@,生成之后再一键替换即可
- 由于从两个表里选数据,且建表脚本是上下结构,只能采用union all 来进行关联
- 最后生成一个子查询,由于表的列顺序也不能变,所以最后也排序,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建表脚本所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复