从HIVE中中查询

	/**
	 * 从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;}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值