將SqlServer表創建到hive腳本

將SqlServer表創建到hive腳本

sqlserver.java

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class sqlserver {private static String[] deleteArrayNull(String string[]) {ArrayList<String> strList = new ArrayList<>();// Loop through the input array and add non-null elements to the ArrayListfor (String str : string) {if (str != null && !str.isEmpty()) {strList.add(str);}}// Convert the ArrayList back to an array of stringsreturn strList.toArray(new String[0]);}public static String findColumnType(String str) {str = str.toLowerCase();String type;if (str.startsWith("int")) {type = "int";} else if (str.startsWith("bigint")) {type = "bigint";} else if (str.startsWith("decimal")) {type = "decimal"; // Assuming Hive's decimal type matches SQL's decimal type} else if (str.startsWith("bit")) {type = "int"; // Assuming mapping to INT in Hive} else if (str.startsWith("datetime") || str.startsWith("date") || str.startsWith("time")) {type = "string"; // These date-time related types mapped to STRING in Hive} else if (str.startsWith("float")) {type = "float";} else if (str.startsWith("double")) {type = "double";} else if (str.startsWith("boolean")) {type = "boolean";} else {type = "string"; // Defaulting to STRING for unmatched types}return type;}public static void main(String[] args) {//sql serverString str9 = "create table [dbo].[RM_Unit] (\n" +"\t[ID] uniqueidentifier not null constraint PK_RM_Unit primary key,\n" +"\t[Name] nvarchar(50),\n" +"\t[TypeID] int,\n" +"\t[ParentID] uniqueidentifier,\n" +"\t[LeaderID] uniqueidentifier,\n" +"\t[LeaderCountryCode] int,\n" +"\t[LocationCode] nvarchar(max),\n" +"\t[Description] nvarchar(200),\n" +"\t[CountryCode] int,\n" +"\t[IsActive] nvarchar(200),\n" +")";//sqlserverString tableName = str9.split("] \\(\n")[0].split("].\\[")[1].toLowerCase();String[] columnLines = str9.split("] \\(\n")[1].split("CONSTRAINT")[0].split(",\n");StringBuilder hiveSqlStr = new StringBuilder();int columnNum = 0;// Begin building the Hive SQL scripthiveSqlStr.append("drop table if exists myoa.ods_").append(tableName).append("_full;\n").append("create external table if not exists myoa.ods_").append(tableName).append("_full (").append("\n");// Regular expression to match comments in SQLPattern commentPattern = Pattern.compile(".*?\\[([^\\]]+)\\].*?comment\\s+'([^']*)'");for (String line : columnLines) {String[] column = deleteArrayNull(line.replace("\n", "").split(" "));if (column.length >= 2) {String columnName = column[0].replace("[", "").replace("]", "").replace("`","").toLowerCase();Matcher matcher = commentPattern.matcher(line);String comment = "";if (columnName.equals("id")) {comment = "id"; // Set comment as "id" if column name is "ID"}if (matcher.find()) {comment = matcher.group(2);}if (columnName.equals("id") && comment.isEmpty()) {comment = "id"; // Set default comment as "id" if the column name is "id" and the comment is empty}String typeName = findColumnType(column[1]);hiveSqlStr.append("  ").append(columnName).append("  ").append(typeName).append(" comment '").append(comment).append("',\n");columnNum++;}}hiveSqlStr.delete(hiveSqlStr.length() - 2, hiveSqlStr.length());hiveSqlStr.append("\n) comment ''\n").append("partitioned by (dt string)\n").append("ROW FORMAT DELIMITED FIELDS TERMINATED BY '\\001'\nNULL DEFINED AS ''\nLOCATION '/warehouse/myoa/ods/ods_").append(tableName).append("_full';");System.out.println(hiveSqlStr);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/760356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

考研数学|《660》题这样刷,效率最高!

首先要了解一下660的难度&#xff0c;我认为660的难度是在基础和强化之间的一本习题册。具有一些比较好的选填题目&#xff0c;有些题目可能对初学者来说较为困难&#xff0c;尤其是一些包含二级结论的一些题目。但是对于强化阶段来说&#xff0c;这本题目可能难度较低了一些。…

基于springboot+vue的游戏交易系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

如何设计一个订单超过5分钟不支付就自动去掉订的设计?都有哪些方案?

实现订单在超过5分钟不支付就自动取消的功能&#xff0c;可以通过多种方案来设计。以下是一些常见的解决方案&#xff1a; 定时任务&#xff08;Cron Job&#xff09;&#xff1a; 创建一个定时任务&#xff0c;定期扫描数据库中创建时间超过5分钟且未支付的订单&#xff0c;然…

C语言学习 三、运算符与表达式

3.1 运算符分类 c语言提供了13种类型的运算符&#xff0c;如下所示&#xff1a; &#xff08;1&#xff09;算术运算符&#xff08; - * / %&#xff09; &#xff08;2&#xff09;关系运算符&#xff08;> < > < !&#xff09; &#xff08;3&#xff09;逻…

【职位管理】某大型能源化工企业职位管理体系搭建咨询项目

随着企业的发展&#xff0c;企业内部员工的数量不断增加。而管理职位的有限性使得员工的晋升出现“过独木桥”的现象&#xff0c;有些企业为了缓解这种问题&#xff0c;采取增设副职与助理岗位的办法&#xff0c;却导致组织机构迅速膨胀。那么&#xff0c;华恒智信专家是如何解…

CentOS的变迁轨迹:企业代码迁移的深刻启示20240321

在企业的技术栈中&#xff0c;操作系统扮演着基础且关键的角色。CentOS&#xff0c;作为长久以来广受欢迎的企业级Linux发行版&#xff0c;其版本的迁移与升级一直是系统管理员和开发者们关注的焦点。最近&#xff0c;CentOS的发展趋势引起了广泛讨论&#xff0c;特别是CentOS …

在基于全志V851se的TinyVision上手动构建 Linux 6.1 + Debian 12 镜像

构建 SyterKit 作为 Bootloader SyterKit 是一个纯裸机框架&#xff0c;用于 TinyVision 或者其他 v851se/v851s/v851s3/v853 等芯片的开发板&#xff0c;SyterKit 使用 CMake 作为构建系统构建&#xff0c;支持多种应用与多种外设驱动。同时 SyterKit 也具有启动引导的功能&a…

JavaScript的导入导出

导入JavaScript的全部内容 <script src"JavaScriptName.js"></script>逐个导出 JS代码 export function getMessage(msg){console.log(msg) }HTML代码 <script type"module">import { getMessage } from ./showMessage.jsdocument.g…

mysql数据类型和常用函数

目录 1.整型 1.1参数signed和unsigned 1.2参数zerofill 1.3参数auto_increment 2.数字类型 2.1floor()向下取整 2.2随机函数rand() 2.3重复函数repeat() 3.字符串类型 3.1length()查看字节长度&#xff0c;char_length()查看字符长度 3.2字符集 3.2.1查看默认字符…

海外舆情监控的重要性以及云手机的推荐

海外市场不仅有着无尽的商机&#xff0c;同时也存在着各种各样的挑战。例如&#xff0c;海外市场舆情的复杂变化给企业带来了潜在风险&#xff0c;尤其在新媒体技术快速发展的时代&#xff0c;舆论对企业品牌形象的影响日益巨大。本文将详细探讨海外舆情监控的重要性以及为大家…

mysql日志( Redo Log 、Undo Log、Bin Log)

InnoDB是一个带有ACID事务支持的存储引擎&#xff0c;其中redo log和undo log是其实现原子性、一致性、隔离性和持久性&#xff08;ACID&#xff09;的重要机制。 Redo Log&#xff08;重做日志&#xff09; Redo log主要用于实现事务的持久性。它记录了后续可以用来恢复数据…

FlorisBoard:Android开源键盘的现代化选择

FlorisBoard&#xff1a;Android开源键盘的现代化选择 简介 FlorisBoard是一款免费且开源的安卓键盘&#xff0c;适用于Android 7.0及以上版本的设备。它的现代化设计和用户友好的界面使其在众多键盘应用中脱颖而出。FlorisBoard的独特之处在于它注重用户体验的同时&#xff0…

CSS object-fit 属性

object-fit 属性指定元素的内容应该如何去适应指定容器的高度与宽度。 object-fit 一般用于 img 和 video 标签&#xff0c;一般可以对这些元素进行保留原始比例的剪切、缩放或者直接进行拉伸等。 您可以通过使用 object-position 属性来切换被替换元素的内容对象在元素框内的…

使用java实现三个线程循环打印A,B,C,并写出三种方式

方式一&#xff1a;使用wait()和notifyAll() public class demo1 {private int n 0;private int turn 0;public static void main(String[] args) {new demo1().startThreads();}private void startThreads() {new Thread(() -> printLetter(A, 0), "线程1").s…

抖音视频提取工具可导出视频分享链接|视频爬虫批量下载

抖音无水印视频批量下载工具操作指南 一、工具介绍 我们开发了一款功能强大的视频批量下载工具&#xff0c;不仅能够通过单个视频链接进行提取&#xff0c;还可以通过关键词进行视频搜索&#xff0c;Q:290615413实现批量提取和有选择性的下载。 二、操作步骤 2.1 关键词批量…

IO网络通信

IO Bio&#xff1a; 同步阻塞&#xff0c;一个线程一次连接&#xff0c;基于字符流/字节流 Nio&#xff1a;同步非阻塞 一个线程多个连接&#xff0c;多个请求注册到多路复用selector上&#xff0c;多路复用器轮训连接 面向缓冲区&#xff0c; 从某通道读取数据到缓存区&…

Android:adb命令

执行adb命令的窗口如下 Mac或Linux系统里的终端窗口&#xff1b; window系统运行输入cmd打开的指令窗口&#xff1b; Android Studio 里控制下面的Terminal窗口 1. 查看已链接的设备和模拟器 adb devices -l 2. 查看Android内核版本号 adb shell getprop ro.build.version.re…

数据结构和算法:哈希表

哈希表 哈希表&#xff08;hash table&#xff09;&#xff0c;又称散列表&#xff0c;它通过建立键 key 与值 value 之间的映射&#xff0c;实现高效的元素查询。具体而言&#xff0c;向哈希表中输入一个键 key &#xff0c;则可以在 &#x1d442;(1) 时间内获取对应的值 va…

CSS样式表 样式优先级 选择器以及选择器的权重优先级

CSS组成 css由选择符和声明组成&#xff0c;声明又分为属性和属性值 属性必须放在花括号里面&#xff0c;属性与属性值必用冒号连接 每条声明用分号结束 当一个属性有多个属性值的时候&#xff0c;属性值与属性值部分先后顺序&#xff0c;用空格隔开 在书写样式过程中、空格、换…

C++ 设计模式:观察者模式

观察者模式是行为模式之一&#xff0c;它的一个对象的状态发生变化时能自动通知其它关联对象&#xff0c;自动刷新对象状态。 Qt中信号/槽函数机制就是观察者模式&#xff0c;信号只用进行函数声明&#xff0c;槽函数的参数要和信号的参数一致&#xff0c;这是因为编译器通过co…