關係錶轉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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 求主外來鍵的關係的指令碼(ZT)指令碼
- 機器碼 指令 組合語言 的關係機器碼組合語言
- 使用shell指令碼快速得到主備關係指令碼
- Java中各程式碼層級的關係Java
- Scala與Java的關係Java
- JavaScript和Java的關係JavaScript
- 檢視錶的統計資訊SQL指令碼SQL指令碼
- 小米為何撇清與華米手錶的關係?或有分歧!
- 【java】類之間的關係Java
- java三大特性的關係?Java
- 得到對錶操作的指令碼(可作為參考)指令碼
- 關係運算子(轉)
- java 指令碼Java指令碼
- repo和Git的關係 [轉載]Git
- 論Asp與XML的關係(轉)XML
- BeanShell桌面---Java應用程式指令碼引擎 (轉)BeanJava指令碼
- 四種Java指令碼語言之評測(轉)Java指令碼
- 品牌關係管理(轉載)
- 互惠關係定律(轉載)
- ER模型轉關係模式模型模式
- 地址本的指令碼(轉)指令碼
- 虛擬鍵碼錶(windows) (轉)Windows
- [Shell] Shell 生成 HTML指令碼,可顯示錶格HTML指令碼
- 物件怎麼轉化為關係的物件
- Java面試題:Java中的集合及其繼承關係Java面試題繼承
- java物件關係對映ROMJava物件
- MediaScanner Java, JNI, mediaservice 呼叫關係Java
- CPA二十--關聯方關係的披露要求(轉載)
- 物件導向程式設計程式碼詳解(依賴關係,關聯關係,組合關係)物件程式設計
- 養老保險關係轉移
- Linus關於核心標頭檔案與核心原始碼關係的論述(轉)原始碼
- DG相關指令碼指令碼
- 您好!關於指令碼指令碼
- Java設計模式-類之間的關係Java設計模式
- Java中常見的集合容器類關係圖Java
- Java中類名與檔名的關係Java
- [轉]ABAP資料型別與Java資料型別的對應關係資料型別Java
- Oracle檢視錶空間使用率SQL指令碼OracleSQL指令碼