目录

准备Excel例如下:

如果是想生成Hive的建表语句则:

​如果是想生成Mysql的建表语句则:

宏代码分享:


准备Excel例如下:

表结构-副本.xls(文章:《根据Excel记录生成Mysql和Hive建表语句》使用)-其它文档类资源-CSDN下载根据Excel记录生成Mysql和Hive建表语句更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/qq_30168227/75382077

D列的序号比较重要:

如果是想生成Hive的建表语句则:

这一列都打上Y。

然后使用宏:

出现下图:

双击其中一个,生成结果如下:

打开文件如下:

如果是想生成Mysql的建表语句则:

将Hive的T列打的Y都给取消掉。

生成的文件如下:

宏代码分享:

Sub P01_Gen_DDL_mysql()
'lyg 2021-07-26Application.ScreenUpdating = FalseDim FSO As Object
Dim TextFile As ObjectDim PrimaryKey      As String   '主键
Dim NotNull         As String   '分布键
Dim Orientation     As String   '分布键
Dim CompressMode    As String   '分布键
Dim DistributeKey   As String   '分布键Dim ColumnList         As String   '字段列表
Dim CommentList        As String   '注释'初始化变量值
PrimaryKey = ""
NotNull = ""
Orientation = ""
CompressMode = ""
DistributeKey = ""ColumnList = ""
CommentList = ""v_path = ActiveWorkbook.Path
v_filename = v_path + "\" + Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) + "-mpp.sql"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TextFile = FSO.CreateTextFile(v_filename, True)
Set ws = ActiveWorkbook.ActiveSheetFor Each rw In ws.Cells(1, 2).CurrentRegion.RowsIf Len(ws.Cells(1, 1)) = 0 Then Exit Forn = rw.Row   '行号SchemaName = Cells(n, 1).Valuetable_en = Cells(n, 2).Value     '英文表名table_cn = Cells(n, 3).Value     '中文表名field_en = Cells(n, 5).Value     '字段名称英文field_cn = Cells(n, 6).Value     '字段名称中文field_type = Cells(n, 7).Value   '字段类型长度MPPthis_table = UCase(Trim(table_en))                '当前表名next_table = UCase(Trim(Cells(n + 1, 2).Value))   '下一英文表名If n > 1 Thenpre_table = UCase(Trim(Cells(n - 1, 2).Value))   '上一英文表名Elsepre_table = ""End IfIf UCase(Trim(Cells(n, 11).Value)) = "Y" Then      '设置主键,  (行号,列号)PrimaryKey = PrimaryKey + Cells(n, 5).Value + ","End IfIf UCase(Trim(Cells(n, 12).Value)) = "Y" Then   '设置分布键DistributeKey = DistributeKey + Cells(n, 5).Value + ","   '字段名称英文End IfIf UCase(Trim(Cells(n, 13).Value)) = "NN" Then  '非空标志NotNull = " NOT NULL"ElseNotNull = " NULL"End IfIf this_table <> pre_table ThenIf UCase(Trim(Cells(n, 14).Value)) = "Y" Or IsEmpty(Trim(Cells(n, 14).Value)) Then    '列式存储(默认column)Orientation = "COLUMN"ElseOrientation = "ROW"    '指定N或其它值时为ROWEnd IfEnd IfIf this_table <> pre_table ThenIf UCase(Cells(n, 15).Value) <> "" Then    '压缩级别CompressMode = Cells(n, 15).ValueElseCompressMode = "LOW"End IfEnd IfIf UCase(Cells(n, 16).Value) = "Y" Then  '复制表DistributeKey = "REPLICATION"End If'生成字段列表, 例如: Wthd_Mod_Cd   CHAR(3)  NOT NULL,   --支取方式代码field_en_len = 32    '设置英文字段名的字符最大长度field_type_len = 20  '设置字段类型的字符最大长度If n > 1 Then        '从第2行开始执行ColumnList = ColumnList + "  ," + field_en + Space(Abs(field_en_len - Len(field_en)) + 1) + field_type + Space(Abs(field_type_len - Len(field_type)) + 1) + Space(Abs(10 - Len(NotNull)) + 1) + "COMMENT '" + field_cn + "'" + vbLfCommentString = "COMMENT ON COLUMN " + SchemaName + "." + table_en + "." + field_en + Space(Abs(field_en_len - Len(field_en)) + 1) + "IS '" + field_cn + "';"If Len(field_cn) > 0 Then  '如果有注释则执行,否则不执行COMMENTCommentList = CommentList + CommentString + vbLfElseCommentList = CommentList + "--" + CommentString + vbLfEnd IfEnd IfIf n > 1 And this_table <> next_table Then     '从第2行开始TextFile.WriteLine ("-- --------------CREATE TABLE: " + table_cn + "----------------------------------")DropSQL = "-- DROP TABLE IF EXISTS " + SchemaName + "." + table_en + " CASCADE;"TextFile.WriteLine (DropSQL)Create = "CREATE TABLE " + SchemaName + "." + table_en + vbLf + "("TextFile.WriteLine (Create)ColumnList = "   " + Mid(ColumnList, 4, InStrRev(ColumnList, vbLf) - 4)  '去除前面1个逗号和尾部换行符号TextFile.WriteLine (ColumnList)  '字段列表' If Len(PrimaryKey) > 0 Then'     TextFile.WriteLine ("  --,PRIMARY KEY (" + Mid(PrimaryKey, 1, Len(PrimaryKey) - 1) + ")")   '设置主键,去除最后1个字符逗号' End IfTextFile.WriteLine (")")      '字段完成TAB_COMMENT = "COMMENT ='" + table_cn + "';"    '表注释TextFile.WriteLine (TAB_COMMENT)' TextFile.WriteLine ("WITH (ORIENTATION = " + Orientation + ", COMPRESSION = " + CompressMode + ")")    '设置存储模式、压缩级别' If DistributeKey = "" Then'不设置分布键'  ElseIf DistributeKey = "REPLICATION" Then'     TextFile.WriteLine ("DISTRIBUTE BY REPLICATION")  '设置分布键,去除最后1个字符逗号' Else'     TextFile.WriteLine ("DISTRIBUTE BY HASH(" + Mid(DistributeKey, 1, Len(DistributeKey) - 1) + ")")   '设置分布键,去除最后1个字符逗号' End IfTextFile.WriteLine (";")      '列出字段完成TextFile.WriteLine ("")' TAB_COMMENT = "COMMENT ON TABLE  " + SchemaName + "." + table_en + " IS '" + table_cn + "';"    '表注释' TextFile.WriteLine (TAB_COMMENT)' TextFile.WriteLine (CommentList)       '设置字段注释,建表完成'初始化变量值PrimaryKey = ""NotNull = ""Orientation = ""CompressMode = ""DistributeKey = ""ColumnList = ""CommentList = ""End IfNextMsgBox "DDL成功生成在:" + vbLf + v_filename
End SubSub P02_Gen_DDL_hive()
'wzm 2020-07-09Application.ScreenUpdating = FalseDim FSO As Object
Dim TextFile As ObjectDim ColumnList      As String
Dim PartitionKey    As String'初始化变量值
PrimaryKey = ""
NotNull = ""
Orientation = ""
CompressMode = ""
DistributeKey = ""ColumnList = ""
PartitionKey = ""v_path = ActiveWorkbook.Path
v_filename = v_path + "\" + Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) + "-hive.sql"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TextFile = FSO.CreateTextFile(v_filename, True)
Set ws = ActiveWorkbook.ActiveSheetFor Each rw In ws.Cells(1, 2).CurrentRegion.RowsIf Len(ws.Cells(1, 1)) = 0 Then Exit Forn = rw.Row   '行号If UCase(Cells(n, 20).Value) = "Y" Then   '判断是否生成Hive脚本'生成字段列表, 例如: Wthd_Mod_Cd   CHAR(3)  NOT NULL,   --支取方式代码If n > 1 Then  '从第2行开始SchemaName = Cells(n, 1).Valuetable_en = Cells(n, 2).Value     '英文表名table_cn = Cells(n, 3).Value     '中文表名field_en = Cells(n, 5).Value     '字段名称英文field_cn = Cells(n, 6).Value     '字段名称中文field_type = Cells(n, 7).Value   '字段类型长度field_type = Replace(UCase(field_type), "NVARCHAR2", "VARCHAR")field_type = Replace(UCase(field_type), "VARCHAR2", "VARCHAR")field_type = Replace(UCase(field_type), "CHARACTER", "CHAR")field_type = Replace(UCase(field_type), "BYTEA", "STRING")field_type = Replace(UCase(field_type), "TEXT", "STRING")field_type = Replace(UCase(field_type), "CLOB", "STRING")field_type = Replace(UCase(field_type), "NUMBER", "DOUBLE")field_type = Replace(UCase(field_type), "NUMERIC", "DOUBLE")field_type = Replace(UCase(field_type), "DECIMAL", "DOUBLE")field_type = Replace(UCase(field_type), "TIMESTAMP(6)", "TIMESTAMP")If Mid(UCase(field_type), 1, 6) = "DOUBLE" Then   '将DECIMAL(x,x)替换为整型field_type = "DOUBLE"End IfIf Mid(UCase(field_type), 1, 9) = "TIMESTAMP" Then   'TIMESTAMP(x)替换为整型field_type = "TIMESTAMP"End Iffield_en_len = 32    '设置英文字段名的字符最大长度field_type_len = 20  '设置字段类型的字符最大长度ColumnList = ColumnList + "  ," + field_en + Space(Abs(field_en_len - Len(field_en)) + 1) + field_type + Space(Abs(field_type_len - Len(field_type)) + 1) + "COMMENT " + """" + field_cn + """" + vbLf     '设置字段及注释If UCase(Cells(n, 21).Value) = "Y" Then    '获取Hive分区键PartitionKey = field_cnEnd IfEnd Ifthis_table = UCase(Trim(table_en))               '当前表名next_table = UCase(Trim(Cells(n + 1, 2).Value))  '下一表名If n > 1 And this_table <> next_table Then     '从第2行开始TextFile.WriteLine ("----------------CREATE TABLE: " + table_cn + "----------------------------------")DropSQL = "--DROP TABLE IF EXISTS " + SchemaName + "." + table_en + ";"TextFile.WriteLine (DropSQL)Create = "CREATE TABLE " + SchemaName + "." + table_en + vbLf + "("TextFile.WriteLine (Create)ColumnList = "   " + Mid(ColumnList, 4, InStrRev(ColumnList, vbLf) - 4)  '去除前面1个逗号和尾部换行符号TextFile.WriteLine (ColumnList)  '字段列表TextFile.WriteLine (") ")      '字段完成TextFile.WriteLine ("COMMENT " + """" + table_cn) + """" '添加表注释TextFile.WriteLine ("PARTITIONED BY (DYEAR STRING COMMENT """ + PartitionKey + "(年)""," + "DMONTH STRING COMMENT """ + PartitionKey + "(月)"") ")   '设置分区TextFile.WriteLine ("ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ")   '设置行格式TextFile.WriteLine ("STORED AS ORC TBLPROPERTIES (""orc.compress""=""SNAPPY"");")   '设置行格式TextFile.WriteLine ("")'初始化变量值PrimaryKey = ""NotNull = ""Orientation = ""CompressMode = ""DistributeKey = ""ColumnList = ""PartitionKey = ""End IfEnd IfNextMsgBox "DDL成功生成在:" + vbLf + v_filename
End Sub

根据Excel记录生成Mysql和Hive建表语句相关推荐

  1. 使用java代码编写脚本,把oracle建表语句变成hive建表语句

    使用java代码编写脚本,把oracle建表语句变成hive建表语句 java代码 测试oracle.sql 生成hive创表语句 java代码 import java.io.File; import ...

  2. mysql hive 建表语句_Mysql元数据如何生成Hive建表语句注释脚本详解

    前言 本文主要给大家介绍了关于Mysql元数据生成Hive建表语句注释脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 最近在将数据从Mysql 等其他关系型数据库 抽取 ...

  3. hive建表语句_Hive数据如何同步到MaxCompute之实践讲解

    摘要:本次分享主要介绍 Hive数据如何迁移到MaxCompute.MMA(MaxCompute Migration Assist)是一款MaxCompute数据迁移工具,本文将为大家介绍MMA工具的 ...

  4. Oracle、Hive建表语句

    1.Oracle建表 drop table T_PSSC_TRAN_PORTRAIT_CENTER; create table T_PSSC_TRAN_PORTRAIT_CENTER ( OBJ_ID ...

  5. 1.python 根据 oracle字段名和类型 生成 hive建表语句

    一.问题 遇到一个场景,要根据oracle表结构创建hive表. 本来想写一个根据oracle信息和表名自动在hive中创建表的脚本.如果在集群运行,python操作oracle的cx_Oracle在 ...

  6. 小技巧:用python迅速打印Java写 的Flink代码中的hive建表语句

    假设我们想要用Flink对hive进行读写, 并且其中一段代码如下: // 如果hive中已经存在了相应的表,则这段代码省略String hiveSql = "CREATE external ...

  7. mysql 使用表 语句_【mysql】mysql 经常使用建表语句

    [1]创建员工档案表 要求字段:员工员工编号,员工姓名,性别,工资,email,入职时间,部门. [2]合理选择数据类型及字段修饰符,要求有NOT NULL,auto_increment, prima ...

  8. mysql 博客建表语句,mysql建表语句

    mysql建表语句 (2012-08-07 13:25:20) 标签: 杂谈 create table messages( id int unsigned primary key auto_incre ...

  9. mysql 如何查看建表语句

    由于公司都是使用 linux 跳板机连接 mysql, 而某个项目又没有测试环境, 于是只能通过跳板机查看某张表的详细信息. 具体语句如下 这里以查看 ups_auth_info 表为例 # \G 表 ...

  10. 使用java通过固定的excel模板自动生成数据库表的ddl建表语句

    有时候要建很多表或一个表有很多字段,一个个复制字段弄太麻烦了,为了提高点工作效率,写了个小工具通过固定的excel模板自动生成基础的ddl建表语句 maven依赖 <!--核心jar包--> ...

最新文章

  1. React + TypeScript:元素引用的传递
  2. 优秀的领导与差劲的领导
  3. mysql存储过程在实际开发中怎么用_MYSQL存储过程开发中怎么使用游标嵌套
  4. 【实施工程师】vim命令
  5. Vue-router路由基础总结(一)
  6. 使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码...
  7. Python 线程优先队列 PriorityQueue - Python零基础入门教程
  8. 活动报名 | 苏州工业园区领军人才项目申报宣讲对接会
  9. String、Object、包装类的常用方法以及注意点
  10. 网络流(最大流) CQOI 2015 BZOJ 3931 网络吞吐量
  11. 虚拟机安装Win7系统
  12. SpringBoot 获取 Yml 配置 信息 Environment
  13. JS 最新版身份证格式验证
  14. 华硕服务器 u盘安装系统,华硕台式机一键U盘装系统win7教程
  15. 华硕顽石第四代FL5900u拆机换电池
  16. 硬盘转换格式为NTFS或者其它
  17. 用友NC创建表空间、用户、授权
  18. android源生进度条,如何使用源生css3实现圆环加载进度条
  19. zxing生成二维码及解析二维码
  20. Android DecimalFormat详解

热门文章

  1. 怎么获取echarts需要的geoJson数据去渲染地图:以广州市白云区24镇街为例(内附资源)
  2. html ios视频播放器,iOS 视频播放器(整理)
  3. 后摩尔时代下先进封装技术
  4. 写了个鼠标键盘模拟器,希望对大家有用哈!
  5. 背景图片定位background-position用photoshopcs4标尺工具
  6. 如何构建自己的游戏框架并且制作游戏(一)(附源码)
  7. 使用nssm管理Windows服务
  8. 内网使用Maven本地仓库环境
  9. Photoshop 2021神经滤镜Neural Filters离线安装包下载 WIN / MAC(适用于PS 2021版本22.3.X/22.4.X)
  10. Python3实现两个Excel文件内容比对