目录

准备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. 不用加减乘除符号计算两数之和
  2. [UOJ #167]【UR #11】元旦老人与汉诺塔
  3. [转]IIS 允许/禁止 目录浏览
  4. python网络聊天器多线程版
  5. tp703n怎么做无线打印服务器,TP-Link TL-WR703N无线路由器无线AP模式怎么设置
  6. 打开程序并监听程序是否退出
  7. 多路复用实现单服百万级别RPS吞吐
  8. gnome-shell 扩展
  9. arduino-esp32:LVGL中文字库(通用)
  10. js混淆还原工具_技术分享:几种常见的JavaScript混淆和反混淆工具分析实战
  11. Anroid在应用层实现开机自启
  12. 评估期已过.有关如何升级您的测试版软件的信息,请访问,sql server 2008 r2评估期已过。有关如何升级的测试版软件的信息...
  13. MiniGUI源码分析:GDI(1)-- GDI概览及Surface
  14. 大学英语B116-2020年12月
  15. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java水果生鲜销售系统7826c
  16. android之DPAD上下左右四个键控制
  17. 不知不觉已经大四了,错过了秋招,春招是该好好把握了
  18. 时间相加,对时间求和
  19. 借记卡、贷记卡、预付卡、准贷记卡、信用卡
  20. openKylin社区会员沙龙,11月25日北京见!

热门文章

  1. JAVA---数组从小到大排序方法
  2. 细数门店客流量统计的那些技术
  3. kindle刷机ttl_“免费” PHICOMM 斐讯 K2路由器TTL刷机全纪录
  4. html简单网页源代码表格,HTML 表格
  5. java中面向对象的例子_java面向对象九个经典例子程序
  6. 信息系统安全等级保护三级的基本要求 引用的规范文件
  7. idea主题风格设置
  8. linux nginx rtmp 直播,linux下利用nginx搭建rtmp直播服务
  9. 500G JAVA视频网盘分享 JEECG开源社区
  10. bean的生命周期(最全最细讲解)