JsonToCalciteUtil.java 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. //package com.sundata.internalevaluation.calc.util;
  2. //
  3. //import com.fasterxml.jackson.core.JsonProcessingException;
  4. //import com.fasterxml.jackson.databind.JsonNode;
  5. //import com.fasterxml.jackson.databind.ObjectMapper;
  6. //import org.apache.calcite.adapter.file.JsonScannableTable;
  7. //import org.apache.calcite.jdbc.CalciteConnection;
  8. //import org.apache.calcite.schema.SchemaPlus;
  9. //import org.apache.calcite.schema.impl.AbstractSchema;
  10. //import org.apache.calcite.util.Sources;
  11. //
  12. //import java.sql.*;
  13. //
  14. ///**
  15. // * Created by IntelliJ IDEA.
  16. // *
  17. // * @author JoeLazy
  18. // * @date 2025-02-18 11:44:07
  19. // * @description: json转虚拟表
  20. // */
  21. //public class JsonToCalciteUtil {
  22. //
  23. // private Connection connection = null;
  24. //
  25. // private Statement statement = null;
  26. //
  27. // private ResultSet resultSet = null;
  28. //
  29. // public ResultSet jsonToResultSet(String jsonStr, String sql) throws SQLException, JsonProcessingException {
  30. // // 1. 使用 Jackson 解析 JSON 数据
  31. // ObjectMapper objectMapper = new ObjectMapper();
  32. // JsonNode rootNode = objectMapper.readTree(jsonStr);
  33. //
  34. // //2. 创建 Calcite Schema
  35. // connection = DriverManager.getConnection("jdbc:calcite:");
  36. // CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
  37. //
  38. //
  39. // String json01 = "[\n" +
  40. // " {\n" +
  41. // " \"subNo\": \"07cc9eca-4e66-4d1c-9dd1-fe4671c2e18b\",\n" +
  42. // " \"subName\": \"Associate Degree in Health Science\"\n" +
  43. // " },\n" +
  44. // " {\n" +
  45. // " \"subNo\": \"cda7b717-bbff-40fd-af90-7e22dcea8457\",\n" +
  46. // " \"subName\": \"Associate Degree in Medicine\"\n" +
  47. // " },\n" +
  48. // " {\n" +
  49. // " \"subNo\": \"9cf8534b-37c6-4365-8453-d1454e336992\",\n" +
  50. // " \"subName\": \"Master of Biological Science\"\n" +
  51. // " },\n" +
  52. // " {\n" +
  53. // " \"subNo\": \"b21f3d9b-670b-4819-8faa-dbb2324f522a\",\n" +
  54. // " \"subName\": \"Bachelor of Criminology\"\n" +
  55. // " },\n" +
  56. // " {\n" +
  57. // " \"subNo\": \"635c0a8a-3701-43f1-a1d6-d359465df3c6\",\n" +
  58. // " \"subName\": \"Master of Teaching\"\n" +
  59. // " },\n" +
  60. // " {\n" +
  61. // " \"subNo\": \"2aa9e2d1-5f0e-41c6-8bf5-970b08d47b67\",\n" +
  62. // " \"subName\": \"Associate Degree in Creative Arts\"\n" +
  63. // " }\n" +
  64. // " ]";
  65. //
  66. //
  67. // String json02 = "[\n" +
  68. // " {\n" +
  69. // " \"stuNo\": \"2e482de1-c984-4447-a968-ffc2f9cd4a2a\",\n" +
  70. // " \"subNo\": \"07cc9eca-4e66-4d1c-9dd1-fe4671c2e18b\",\n" +
  71. // " \"score\": 70.82\n" +
  72. // " },\n" +
  73. // " {\n" +
  74. // " \"stuNo\": \"2e482de1-c984-4447-a968-ffc2f9cd4a2a\",\n" +
  75. // " \"subNo\": \"cda7b717-bbff-40fd-af90-7e22dcea8457\",\n" +
  76. // " \"score\": 24.71\n" +
  77. // " },\n" +
  78. // " {\n" +
  79. // " \"stuNo\": \"2e482de1-c984-4447-a968-ffc2f9cd4a2a\",\n" +
  80. // " \"subNo\": \"9cf8534b-37c6-4365-8453-d1454e336992\",\n" +
  81. // " \"score\": 44.05\n" +
  82. // " },\n" +
  83. // " {\n" +
  84. // " \"stuNo\": \"2e482de1-c984-4447-a968-ffc2f9cd4a2a\",\n" +
  85. // " \"subNo\": \"b21f3d9b-670b-4819-8faa-dbb2324f522a\",\n" +
  86. // " \"score\": 78.65\n" +
  87. // " },\n" +
  88. // " {\n" +
  89. // " \"stuNo\": \"2e482de1-c984-4447-a968-ffc2f9cd4a2a\",\n" +
  90. // " \"subNo\": \"635c0a8a-3701-43f1-a1d6-d359465df3c6\",\n" +
  91. // " \"score\": 26.77\n" +
  92. // " },\n" +
  93. // " {\n" +
  94. // " \"stuNo\": \"2e482de1-c984-4447-a968-ffc2f9cd4a2a\",\n" +
  95. // " \"subNo\": \"2aa9e2d1-5f0e-41c6-8bf5-970b08d47b67\",\n" +
  96. // " \"score\": 3.0\n" +
  97. // " }\n" +
  98. // " ]";
  99. //
  100. //
  101. // SchemaPlus rootSchema = calciteConnection.getRootSchema();
  102. // SchemaPlus credite = rootSchema.add("credite", new AbstractSchema());
  103. //
  104. //
  105. // SchemaPlus subjectSc = rootSchema.add("subjectSc", new AbstractSchema());
  106. // subjectSc.add("subject", new JsonScannableTable(Sources.of(json01)));
  107. // SchemaPlus scoresSc = rootSchema.add("scoresSc", new AbstractSchema());
  108. // scoresSc.add("scores", new JsonScannableTable(Sources.of(json02)));
  109. //
  110. //
  111. // // 注册 JSON 数据为表
  112. // rootNode.fields().forEachRemaining(entry -> {
  113. // String tableName = entry.getKey();
  114. // JsonNode tableData = entry.getValue();
  115. // rootSchema.add(tableName, new JsonScannableTable(Sources.of(tableData.toString())));
  116. // });
  117. //
  118. // sql =
  119. // """
  120. // select "subjectSc"."subject"."subName","scoresSc"."scores"."score" from "subjectSc"."subject" inner join "scoresSc"."scores" on "subjectSc"."subject"."subNo" = "scoresSc"."scores"."subNo"
  121. // """;
  122. //
  123. //
  124. // // 4. 执行 SQL 查询
  125. // statement = connection.createStatement();
  126. // resultSet = statement.executeQuery(sql);
  127. // while (resultSet.next()) {
  128. // System.out.printf("Order ID: %s, Amount: %.2f\n",
  129. // resultSet.getString(1),
  130. // resultSet.getDouble(2));
  131. //
  132. // }
  133. // return resultSet;
  134. // }
  135. //
  136. // public void closeResource() throws SQLException {
  137. // // 关闭连接
  138. // if (resultSet != null) {
  139. // resultSet.close();
  140. // }
  141. // if (statement != null) {
  142. // statement.close();
  143. // }
  144. // if (connection != null) {
  145. // connection.close();
  146. // }
  147. // }
  148. //
  149. //
  150. // public static void main(String[] args) throws SQLException, JsonProcessingException {
  151. // JsonToCalciteUtil jsonToCalciteUtil = new JsonToCalciteUtil();
  152. //
  153. // String json1 = "{\n" +
  154. // " \"student\": [\n" +
  155. // " {\n" +
  156. // " \"stuNo\": \"2e482de1-c984-4447-a968-ffc2f9cd4a2a\",\n" +
  157. // " \"syuName\": \"阎彬\",\n" +
  158. // " \"stuSex\": \"男\",\n" +
  159. // " \"stuAge\": 26,\n" +
  160. // " \"stuClass\": \"1\"\n" +
  161. // " }\n" +
  162. // " ],\n" +
  163. // " \"scores\": [\n" +
  164. // " {\n" +
  165. // " \"stuNo\": \"2e482de1-c984-4447-a968-ffc2f9cd4a2a\",\n" +
  166. // " \"subNo\": \"07cc9eca-4e66-4d1c-9dd1-fe4671c2e18b\",\n" +
  167. // " \"score\": 70.82\n" +
  168. // " },\n" +
  169. // " {\n" +
  170. // " \"stuNo\": \"2e482de1-c984-4447-a968-ffc2f9cd4a2a\",\n" +
  171. // " \"subNo\": \"cda7b717-bbff-40fd-af90-7e22dcea8457\",\n" +
  172. // " \"score\": 24.71\n" +
  173. // " },\n" +
  174. // " {\n" +
  175. // " \"stuNo\": \"2e482de1-c984-4447-a968-ffc2f9cd4a2a\",\n" +
  176. // " \"subNo\": \"9cf8534b-37c6-4365-8453-d1454e336992\",\n" +
  177. // " \"score\": 44.05\n" +
  178. // " },\n" +
  179. // " {\n" +
  180. // " \"stuNo\": \"2e482de1-c984-4447-a968-ffc2f9cd4a2a\",\n" +
  181. // " \"subNo\": \"b21f3d9b-670b-4819-8faa-dbb2324f522a\",\n" +
  182. // " \"score\": 78.65\n" +
  183. // " },\n" +
  184. // " {\n" +
  185. // " \"stuNo\": \"2e482de1-c984-4447-a968-ffc2f9cd4a2a\",\n" +
  186. // " \"subNo\": \"635c0a8a-3701-43f1-a1d6-d359465df3c6\",\n" +
  187. // " \"score\": 26.77\n" +
  188. // " },\n" +
  189. // " {\n" +
  190. // " \"stuNo\": \"2e482de1-c984-4447-a968-ffc2f9cd4a2a\",\n" +
  191. // " \"subNo\": \"2aa9e2d1-5f0e-41c6-8bf5-970b08d47b67\",\n" +
  192. // " \"score\": 3.0\n" +
  193. // " }\n" +
  194. // " ],\n" +
  195. // " \"subject\": [\n" +
  196. // " {\n" +
  197. // " \"subNo\": \"07cc9eca-4e66-4d1c-9dd1-fe4671c2e18b\",\n" +
  198. // " \"subName\": \"Associate Degree in Health Science\"\n" +
  199. // " },\n" +
  200. // " {\n" +
  201. // " \"subNo\": \"cda7b717-bbff-40fd-af90-7e22dcea8457\",\n" +
  202. // " \"subName\": \"Associate Degree in Medicine\"\n" +
  203. // " },\n" +
  204. // " {\n" +
  205. // " \"subNo\": \"9cf8534b-37c6-4365-8453-d1454e336992\",\n" +
  206. // " \"subName\": \"Master of Biological Science\"\n" +
  207. // " },\n" +
  208. // " {\n" +
  209. // " \"subNo\": \"b21f3d9b-670b-4819-8faa-dbb2324f522a\",\n" +
  210. // " \"subName\": \"Bachelor of Criminology\"\n" +
  211. // " },\n" +
  212. // " {\n" +
  213. // " \"subNo\": \"635c0a8a-3701-43f1-a1d6-d359465df3c6\",\n" +
  214. // " \"subName\": \"Master of Teaching\"\n" +
  215. // " },\n" +
  216. // " {\n" +
  217. // " \"subNo\": \"2aa9e2d1-5f0e-41c6-8bf5-970b08d47b67\",\n" +
  218. // " \"subName\": \"Associate Degree in Creative Arts\"\n" +
  219. // " }\n" +
  220. // " ]\n" +
  221. // "}";
  222. //
  223. // ResultSet resultSet1 = jsonToCalciteUtil.jsonToResultSet(json1, "");
  224. //
  225. //
  226. // }
  227. //
  228. //}