關係錶轉dooris 的java 指令碼
package sql; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.nio.charset.Charset; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) throws IOException { genFile(); convert(); } private static void genFile() throws IOException { // 指定要建立或開啟的檔案路徑及名稱 String filePath2 = "E:\\XXXX\\ct.sql"; // 指定要讀取的檔案路徑 BufferedReader reader = new BufferedReader(new FileReader(filePath2)); File file = new File("E:\\\\\\\\XXXX\\\\\\\\doc\\\\\\\\temp.sql"); if (file.exists()) { // 判斷檔案是否存在 file.delete(); // 刪除檔案 } else { // 檔案不存在 System.out.println(file.createNewFile()); // 建立新檔案 } String line; while ((line = reader.readLine()) != null) { System.out.println(line); // 輸出每一行內容 // 在這裡進行其他操作或邏輯判斷等 // Pattern pattern = Pattern.compile("\\((.*?)\\)"); Pattern pattern = Pattern.compile("\\((.*?)\\)"); Matcher matcher = pattern.matcher(line); String key = null; if (line.startsWith("CREATE")) { String[] data1 = line.split(" "); String name = data1[2]; if (name.contains(".")) { String[] names = name.split("\\."); String tableName = names[1]; String tableNames = "`" + tableName.trim() + "`"; line = line.replace(names[0] + ".", ""); //去除表名 line=line.replace(tableName, tableNames); } } // 加引號 String[] data = line.split(" "); String filed = data[0]; if (filed.length() > 0 && !filed.startsWith("--") && !filed.startsWith("CREATE") && !filed.startsWith(")") && !filed.endsWith("COMMENT")) { String filednew = "`" + filed.trim() + "`"; line = line.replace(filed, filednew); } // 判斷varchar(轉換varchar2( if (line.contains("varchar(")) { line = line.replace("varchar(", "varchar2("); } if(line.contains("int4")) { line = line.replace("int4", "int(4)"); } //byte if(line.contains("bytea")) { line = line.replace("bytea", "text"); } // timestamp 改為 datetime if (line.contains("timestamp")) { // line = line.replace("timestamp", "datetime"); String[] result = line.split(" "); if(result[1].contains("timestamp")) { line = line.replace(result[1], "datetime"); } } // numeric(->decimal( if (line.contains("numeric")) { line = line.replace("numeric", "decimal"); } // bpchar->char if (line.contains("bpchar")) { line = line.replace("bpchar", "char"); } if (line.contains("PRIMARY")) { while (matcher.find()) { System.out.println("獲取數值=" + matcher.group().replace("(", "").replace(")", "")); key = matcher.group().replace("(", "").replace(")", ""); } // 1.最後追加 line = ""; line = " "; line += ")\n"; line += "unique key(" + key + ")" + " DISTRIBUTED BY HASH(" + key + ") BUCKETS 16" + " PROPERTIES(\"replication_num\" = \"3\");"; } else { // 獲取數值*3 while (matcher.find()) { System.out.println("獲取數值=" + matcher.group().replace("(", "").replace(")", "")); key = matcher.group().replace("(", "").replace(")", ""); if (isNumber(key)) { int keyInt = Integer.parseInt(key) * 3; line = line.replace(key, "" + keyInt); } else { } } } if (line.startsWith(")")) { line = ""; } if (line.startsWith("COMMENT")) { line = ""; } //包含索引 if(line.startsWith("CREATE INDEX")) { line=" "; } try (BufferedWriter writer = new BufferedWriter(new FileWriter(file, true))) { if (!(line.isBlank() || line.isEmpty())) { // 向檔案寫入資料 // 過濾 if (line != null) { writer.write(line); writer.write("&"); } } } catch (IOException e) { e.printStackTrace(); } } } public static boolean isNumber(String str) { return str.matches("\\d+"); } public static void convert() throws IOException { // 指定要建立或開啟的檔案路徑及名稱 String filePath = "E:\\01XXXX\\doc\\temp.sql"; BufferedReader reader = new BufferedReader(new FileReader(filePath)); File file = new File("E:\\0XXXXXXX\\doc\\doris.sql"); if (file.exists()) { // 判斷檔案是否存在 file.delete(); // 刪除檔案 } else { // 檔案不存在 System.out.println(file.createNewFile()); // 建立新檔案 } String line; while ((line = reader.readLine()) != null) { System.out.println(line); // 輸出每一行內容 int lastCommaIndex = line.lastIndexOf(","); // 獲取最後一個逗號的索引位置 // 建立 StringBuilder 物件並將原始字串賦值給它 StringBuilder sb = new StringBuilder(line); if (lastCommaIndex >= 0 && lastCommaIndex < sb.length()) { // 呼叫 deleteCharAt() 方法刪除指定索引位置的字元 sb.deleteCharAt(lastCommaIndex); System.out.println("刪除後的字串為:" + sb.toString()); String result = sb.toString().replace("&", "\n"); try (BufferedWriter writer = new BufferedWriter(new FileWriter(file, Charset.forName("UTF-8"), true))) { if (!(line.isBlank() || line.isEmpty())) { // 向檔案寫入資料 // 過濾 if (line != null) { writer.write(result); } } } catch (IOException e) { e.printStackTrace(); } } else { System.out.println("無效的索引"); } } } //記得最後要更改為varchar }
以上很容易將對應的普通的表結構轉化為dris 可以識別的表插入資料。
參考資料:
-
https://cloud.tencent.com/developer/article/2055323
-
https://blog.csdn.net/be_racle/article/details/133877785
-
https://blog.csdn.net/be_racle/article/details/133877785
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/69949806/viewspace-3004521/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 機器碼 指令 組合語言 的關係機器碼組合語言
- Java中各程式碼層級的關係Java
- Scala與Java的關係Java
- 【java】類之間的關係Java
- repo和Git的關係 [轉載]Git
- java 指令碼Java指令碼
- 【轉】QPS和併發數的關係
- [20180814]慎用檢視錶壓縮率指令碼.txt指令碼
- 關於Solidity指令碼相關環境配置及指令碼資料的查詢Solid指令碼
- java物件關係對映ROMJava物件
- 物件導向程式設計程式碼詳解(依賴關係,關聯關係,組合關係)物件程式設計
- Java設計模式-類之間的關係Java設計模式
- Java面試題:Java中的集合及其繼承關係Java面試題繼承
- 平行關係轉化思維導圖
- Java類關係之代理(代理模式)Java模式
- 關於群起kafka指令碼Kafka指令碼
- 在Java中,以下有關類的關聯關係描述錯誤的是()Java
- Intelligent Enterprise 和企業數字化轉型的關聯關係Intel
- Sun 公司的 Java 跟 Android 使用的 Java 庫有什麼關係?JavaAndroid
- 基於java的客戶關係管理系統Java
- Java中類與物件的關係與區別Java物件
- 關於 Bash 指令碼中 Shebang 的趣事指令碼
- 【JAVA今法修真】 第三章 關係非關係 redis法器JavaRedis
- [轉]寫好shell指令碼的13個技巧指令碼
- 表的關聯關係
- GoldenGate使用SQLEXEC和GETVAL實現碼錶關聯GoSQL
- HTML <script> 指令碼的 async 與 defer 屬性及不同屬性的執行時機與 DOMContentLoaded 事件的關係HTML指令碼事件
- mysql~GROUP_CONCAT實現關係表的行轉列MySql
- JAVA類的頂層Type抽象和繼承關係Java抽象繼承
- 由char和byte的關係引申出去——總結一下java中的字元編碼相關知識Java字元
- sql_trace相關指令碼SQL指令碼
- Java位元組碼指令表Java
- 求 PHP 轉 java 的相關教程PHPJava
- Java的指令碼機制、編譯器APIJava指令碼編譯API
- Java執行groovy指令碼的兩種方式Java指令碼
- 【Java】Java計時器(秒錶)Java
- 奈學:Java 和 JavaScript 是什麼關係?JavaScript
- java繼承關係下執行順序Java繼承