/** * 从HIVE数据库查询文档 by ymd */ @RequestMapping(value = "/selectbyhive") public String selectbyhive(HttpServletRequest request, HttpServletResponse response, Model model, UnstructuredBean unstructuredbean) { // 设置当前页为5条数据 List<SqlBean> listBean = new ArrayList<SqlBean>(10); // 修改时间格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String begin = ""; String end = ""; if (null != unstructuredbean.getBeginTime()) { begin = sdf.format(unstructuredbean.getBeginTime()); } if (null != unstructuredbean.getEndTime()) { end = sdf.format(unstructuredbean.getEndTime()); } // 拼接SQL语句 String sql = "select * from doc_file where contains(name ,\"wildcard '" + "*" + "'\" ) "; // 拼接名称查询语句 if (StringUtils.isNoneEmpty(unstructuredbean.getName())) { sql = sql + " and contains(name ,\"wildcard '" + "*" + unstructuredbean.getName() + "*" + "'\" )"; } // 拼接操作人语句 if (StringUtils.isNoneEmpty(unstructuredbean.getOptioner())) { sql = sql + " and contains(optioner ,\"wildcard '" + "*" + unstructuredbean.getOptioner() + "*" + "'\" )"; } // 拼接全文检索语句 if (StringUtils.isNoneEmpty(unstructuredbean.getSearch())) { sql = sql + " and contains(search ,\"wildcard '" + "*" + unstructuredbean.getSearch() + "*" + "'\" )"; } // 拼接详细描述语句 if (StringUtils.isNoneEmpty(unstructuredbean.getDescribes())) { sql = sql + " and contains(describe ,\"wildcard '" + "*" + unstructuredbean.getDescribes() + "*" + "'\" )"; } // 拼接开始时间、结束时间语句 if (unstructuredbean.getBeginTime() != null && unstructuredbean.getEndTime() != null) { sql = sql + " and contains(date ,\"range '" + "[" + begin + "," + end + "]" + "'\" )"; } // 调用ws接口 返回jsonArray JsonArray resArray = toolWs.getUnstructuredWs(sql, unstructuredbean .getPage().getPageNo()); // 所有列名 System.out.println("resArray:" + resArray); List<String> columnNameList = getColumnNameList(resArray); listBean = toolWs.getListBean(resArray); SqlBean sqlBean = new SqlBean(); sqlBean.setSql_sentence(sql); // 总数 long totalNum = toolWs.unstructuredTotalNum(sqlBean); System.out.println("总数:" + totalNum); // 分页 Page<SqlBean> page = toolWs.getPageInterface(sqlBean.getPage() .getPageSize(), sqlBean.getPage().getPageNo(), listBean, totalNum); model.addAttribute("page", page); model.addAttribute("columnNameList", columnNameList); model.addAttribute("unstructuredbean", unstructuredbean); return "/modules/bankunstructured/unstructured_list"; }/** * 根据sql 调用hive接口 返回 jsonArray * @param sql * @return jsonArray */ public JsonArray getUnstructuredWs(String sql,int num) { num = 5 * (num-1) + 1; String numStr = ""; if(num == 1){ numStr = ""; } else { numStr = String.valueOf(num); } JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("sql", sql); jsonObject.addProperty("recordnum", "5"); // key:recordnum 分页(每页条数) jsonObject.addProperty("datasource", "HIVE"); // key:datasource "HIVE" jsonObject.addProperty("actiontype", "fullindex"); //获取页面第一项序号 jsonObject.addProperty("startlimit", numStr); // key:startlimit IDispatcherWebServiceService dispatcherWebServiceService = new IDispatcherWebServiceService(); IDispatcherWebService service = dispatcherWebServiceService .getIDispatcherWebServicePort(); Gson gson = new Gson(); String handle = service.handle(gson.toJson(jsonObject)); InfoBean infobean = gson.fromJson(handle, InfoBean.class); String message = infobean.getMessage(); JsonObject jsonobject = gson.fromJson(message, JsonObject.class); JsonArray resArray = (JsonArray) jsonobject.get("res"); return resArray; }
/** * 将jsonArray 转换为List<SqlBean> 返回 List<SqlBean> */ public List<SqlBean> getListBean(JsonArray jsonArray) { List<SqlBean> list = new ArrayList<SqlBean>(); for (com.google.gson.JsonElement jsonElement : jsonArray) { HashMap<String, Object> map = (HashMap<String, Object>) JsonToMap.toMap(jsonElement.getAsJsonObject()); HashMap<String, Object> newMap = new HashMap<String, Object>(); SqlBean sql = new SqlBean(); String mapStr = map.toString(); String jsonStr = ""; //去掉双引号 String[] strs = mapStr.split("\""); for (String str : strs) { jsonStr += str; } //去掉前后括号并去空格 jsonStr = jsonStr.substring(1,jsonStr.length()-1).replaceAll(" ", ""); //截取逗号 String[] str1 = jsonStr.split(","); for (String str : str1) { String[] str2 = str.split("="); //重组map if(str2.length == 2){ newMap.put(str2[0], str2[1]); } } sql.setMap(newMap); list.add(sql); } return list; }
/** * 查询非结构化数据检索总条数 * @param sqlBean * @return */ public long unstructuredTotalNum(SqlBean sqlBean){ long totalNum = 0; JsonObject jsonObject = new JsonObject(); JsonArray jsonArray = null; if(null != sqlBean.getSql_sentence()){ jsonObject.addProperty("sql", "select count(*) from (" + sqlBean.getSql_sentence() + ")"); jsonObject.addProperty("recordnum", "5"); // key:recordnum 分页(每页条数) jsonObject.addProperty("datasource", "HIVE"); // key:datasource "HIVE" jsonObject.addProperty("actiontype", "fullindex"); jsonObject.addProperty("startlimit", ""); // key:startlimit IDispatcherWebServiceService dispatcherWebServiceService = new IDispatcherWebServiceService(); IDispatcherWebService service = (IDispatcherWebService) dispatcherWebServiceService .getIDispatcherWebServicePort(); Gson gson = new Gson(); String handle = service.handle(gson.toJson(jsonObject)); InfoBean infobean = gson.fromJson(handle, InfoBean.class); String message = infobean.getMessage(); JsonObject jsonobject = gson.fromJson(message, JsonObject.class); jsonArray = (JsonArray) jsonobject.get("res"); System.out.println("jsonArray:"+jsonArray); } if(jsonArray != null){ String jsonToStr = jsonArray.get(0).toString(); String strsToBracket = null; //去掉json格式的字符串的括号 if(StringUtils.isNotEmpty(jsonToStr)){ strsToBracket = jsonToStr.substring(1, jsonToStr.length()-1); } //将字符串分割成数组 String[] strToColon = strsToBracket.split(":"); String[] column = strToColon[1].split("\""); totalNum = Long.parseLong(column[1]); } return totalNum; }
/*** 返回分页* @param sql* @param listBean* @param totalNum* @return*/ public Page<SqlBean> getPageInterface(int pageSize,int pageNo, List<SqlBean> listBean,long totalNum) {Page<SqlBean> page = new Page<SqlBean>();//查询前:page.setPageSize(5); //查询条件,每页5条page.setPageNo(pageNo); //要第几页//查询://设置当前页5条数据//List<SqlBean> listSqlBeans = new ArrayList<SqlBean>(5);page.setList(listBean); //1-5,6-10, 1-8,9-16 // TODO: 根据当前页1和每页大小,调接口//设置总数100 //long totalRecords = 100; // TODO: 调接口获取总记录数page.setCount(totalNum);return page;}
从HIVE中中查询
最新推荐文章于 2023-06-06 13:50:01 发布