controller:面向外部请求,提供数据查询,返回对应格式的数据

service:组合和数据层,提供数据服务(接口+实现类)

mapper:单表操作(接口 + xml操作(sql) )

1. com.atguigu.gmall0105.publisher.controller.PublisherController

package com.atguigu.gmall0105.publisher.controller;import com.alibaba.fastjson.JSON;
import com.atguigu.gmall0105.publisher.service.ClickHouseService;
import com.atguigu.gmall0105.publisher.service.EsService;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;@RestController
public class PublisherController {@AutowiredEsService esService;@AutowiredClickHouseService clickHouseService;@RequestMapping(value = "realtime-total", method = RequestMethod.GET)public String realtimeTotal(@RequestParam("date") String dt) {List<Map<String, Object>> rsList = new ArrayList<>();//        Map<String, Object> dauMap = new HashMap();
//        dauMap.put("id", "dau");
//        dauMap.put("name", "新增日活");
//        Long dauTotal = 0L;
//        try {
//            dauTotal = esService.getDauTotal(dt);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        if (dauTotal != null) {
//            dauMap.put("value", dauTotal);
//        } else {
//            dauMap.put("value", 0L);
//        }
//        rsList.add(dauMap);//        Map<String, Object> newMidMap = new HashMap();
//        newMidMap.put("id", "new_mid");
//        newMidMap.put("name", "新增设备");
//        newMidMap.put("value", 233);
//        rsList.add(newMidMap);Map<String, Object> orderAmountMap = new HashMap();orderAmountMap.put("id","order_amount");orderAmountMap.put("name","新增交易额");BigDecimal orderAmount = clickHouseService.getOrderAmount(dt);orderAmountMap.put("value",orderAmount);rsList.add(orderAmountMap);return JSON.toJSONString(rsList);}@GetMapping("realtime-hour")public String realtimeHour(@RequestParam("id") String id, @RequestParam("date") String dt) {if (id.equals("dau")) {Map dauHourMapTD = esService.getDauHour(dt);String yd = getYd(dt);Map dauHourMapYD = esService.getDauHour(yd);Map<String, Map<String, Long>> rsMap = new HashMap<>();rsMap.put("yesterday", dauHourMapYD);rsMap.put("today", dauHourMapTD);return JSON.toJSONString(rsMap);} else if (id.equals("order_amount")) {Map orderAmountHourMapTD = clickHouseService.getOrderAmountHour(dt);String yd = getYd(dt);Map orderAmountHourMapYD = clickHouseService.getOrderAmountHour(yd);Map<String, Map<String, BigDecimal>> rsMap = new HashMap<>();rsMap.put("yesterday", orderAmountHourMapYD);rsMap.put("today", orderAmountHourMapTD);return JSON.toJSONString(rsMap);} else {return null;}}private String getYd(String today) {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");try {Date todayDate = dateFormat.parse(today);Date ydDate = DateUtils.addDays(todayDate, -1);return dateFormat.format(ydDate);} catch (ParseException e) {e.printStackTrace();throw new RuntimeException("日期格式不正确");}}}

2. com.atguigu.gmall0105.publisher.service.ClickHouseService

package com.atguigu.gmall0105.publisher.service;import java.math.BigDecimal;
import java.util.List;
import java.util.Map;public interface ClickHouseService {public BigDecimal getOrderAmount(String date);public Map getOrderAmountHour(String date);}

3. com.atguigu.gmall0105.publisher.service.impl.ClickHouseServiceImpl

package com.atguigu.gmall0105.publisher.service.impl;import com.atguigu.gmall0105.publisher.mapper.OrderWideMapper;
import com.atguigu.gmall0105.publisher.service.ClickHouseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Service
public class ClickHouseServiceImpl implements ClickHouseService {@AutowiredOrderWideMapper orderWideMapper;@Overridepublic BigDecimal getOrderAmount(String date) {return orderWideMapper.selectOrderAmount(date);}@Overridepublic Map getOrderAmountHour(String date) {//进行转换
//        List<Map>     [{"hr":10,"order_amount":1000.00} ,{"hr":11,"order_amount":2000.00}...... ]
//        Map    {"10":1000.00,"11":2000.00,...... }List<Map> mapList = orderWideMapper.selectOrderAmountHour(date);Map<String, BigDecimal> hourMap = new HashMap<>();for (Map map : mapList) {hourMap.put(String.valueOf(map.get("hr")), (BigDecimal) map.get("order_amount"));}return hourMap;}
}

4. com.atguigu.gmall0105.publisher.mapper.OrderWideMapper

package com.atguigu.gmall0105.publisher.mapper;import java.math.BigDecimal;
import java.util.List;
import java.util.Map;public interface OrderWideMapper {//查询当日总额public BigDecimal selectOrderAmount(String date);//查询当日交易额public List<Map> selectOrderAmountHour(String date);}

5. mapper/OrderWideMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.atguigu.gmall0105.publisher.mapper.OrderWideMapper"><select id="selectOrderAmount" resultType="java.math.BigDecimal">select  sum(final_detail_amount) order_amountfrom order_wide_0105where dt=#{date}</select><select id="selectOrderAmountHour" resultMap="orderAmountHrMap">select toHour(create_time) hr, sum(final_detail_amount) order_amountfrom order_wide_0105where dt='2021-05-19'group by hr</select><resultMapid="orderAmountHrMap" type="java.util.Map" autoMapping="true"></resultMap>
</mapper>

5. application.properties

server.port=8070
#Es
spring.elasticsearch.jest.uris=http://hadoop102:9200,http://hadoop103:9200#ClickHouse
spring.datasource.driver-class-name=ru.yandex.clickhouse.ClickHouseDriver
spring.datasource.url=jdbc:clickhouse://hadoop102:8123/test0105mybatis.mapperLocations=classpath:mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true#Mysql
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#spring.datasource.url=jdbc:mysql://hadoop102/gmall0105_rs?characterEncoding=utf-#8&useSSL=false
#spring.datasource.username=root
#spring.datasource.password=000000

使用clickhouse即席查询相关推荐

  1. 支持频繁更新、即席查询,ClickHouse在爱奇艺视频生产是上怎么用的?

    点击"开发者技术前线",选择"星标" 让一部分开发者先看到未来 众所周知,爱奇艺拥有海量视频,在视频生产过程中产生的上千QPS的实时数据.T级别的数据存储.要支 ...

  2. OLTP、OLAP、即席查询(ad hoc query)区别与联系

    对于目前来讲,对数据的处理主要集中在两个方面,一种是联机事务处理 OLTP(on-line transaction processing),另一种是联机分析处理 OLAP(On-Line Analyt ...

  3. 【clickhouse】 clickhouse配置查询记录query_log

    1.概述 转载:clickhouse配置查询记录query_log 最近在使用clickhouse中,看到官方文档上可以配置query_log,但是文档上写的配置比较模糊,特此记录一下具体配置方法,以 ...

  4. clickhouse 复杂查询时嵌套连接join可能存在的异常解决(xjl456852原创)

    clickhouse 复杂查询时嵌套连接join可能存在的异常解决(xjl456852原创) 参考文章: (1)clickhouse 复杂查询时嵌套连接join可能存在的异常解决(xjl456852原 ...

  5. 即席查询Presto

    文章目录 1.Presto简介 1.1Presto概念 1.2Presto架构 1.3Presto优缺点 2.Presto安装 2.1Presto Server安装 2.2Presto命令行Clien ...

  6. #研发解决方案#数据开放实验室:再战即席查询和数据开放

    创建于2017/9/7 最后更新于2017/9/16 关键词:大数据,HBase,数据开放,即席查询,数据授权,HDFS,Zeppelin,Kylin, 提纲: 解决什么场景 即席查询的发展历程 五个 ...

  7. Flink实践 | 360 政企安全基于 Flink 的 PB 级数据即席查询实践

    摘要:本文整理自 360 政企安全集团的大数据工程师苏军以及刘佳在 Flink Forward Asia 2020 分享的议题<基于 Flink 的 PB 级数据即席查询实践>,文章内容为 ...

  8. 大数据即席查询工具——秒级响应

    报表是企业管理的基本措施和途径,是企业的基本业务要求,也是实施 BI战略的基础.报表可以帮助企业访问.格式化数据,并把数据信息以可靠和安全的方式呈现给使用者.在企业管理过程中,报表往往都会通过一些简洁 ...

  9. 尚硅谷大数据项目之电商数仓(4即席查询数据仓库)

    尚硅谷大数据项目之电商数仓(即席查询) (作者:尚硅谷大数据研发部) 版本:V4.0 第1章 Presto 1.1 Presto简介 1.1.1 Presto概念 1.1.2 Presto架构 1.1 ...

  10. 大数据江湖之即席查询与分析(上篇)--即席查询与分析的前世今生

    如今,大数据领域新技术层出不穷,可谓百家争鸣,甚是红火.不乏有些玩家动辄搞出个大数据平台,可谓包罗万象,号称无所不能.小弟则以为在大数据江湖中如能修炼好独门绝技,有能拿得出手的看家本领已然实属不易.小 ...

最新文章

  1. 演讲实录丨中科大陈小平教授《从封闭性到非封闭性:2020到2035年智能机器的机遇和挑战》...
  2. .NET Core 中的并发编程
  3. Go 语言 Slice
  4. Bootstrap表单的可选布局
  5. python代码翻译器-Python编程学习 -- 用十几行代码实现一个翻译器
  6. [Android学习笔记]startActivityForResult和onActivityResult的使用
  7. [Swift]LeetCode1009. 十进制整数的补码 | Complement of Base 10 Integer
  8. 反射机制——获取Class中的方法
  9. 大数据初学者的福利——Hadoop快速入门教程
  10. 用you-get下载JayChou专辑
  11. exe模拟器android版,安卓exe模拟器
  12. matlab高斯滤波跟中值滤波区别,基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波的实现与对比...
  13. Node进程管理工具—pm2
  14. 锁定计算机和睡眠有什么区别,电脑系统待机、睡眠和休眠的区别有哪些
  15. python实验报告代写_vector data作业代写、python程序设计作业调试、代做python实验作业、代写OGR python作业代做Python程序|代写Web开发...
  16. 汕头大学计算机转专业,2021年汕头大学大一新生转专业及入学考试相关规定
  17. 设计一个最优算法来查找一n个元素数组中的最大值和最小值
  18. C语言中如何输出字符的编码,GB2312中汉字字符的编码在C语言中的输出测试
  19. MBA面试系列之----中文面试宝典(四)
  20. Mysql快速入门 在python、java使用

热门文章

  1. 姿态角与方向余弦矩阵 matlab,方向余弦矩阵和姿态角提取算法(矩阵)要点.ppt
  2. webpack打包报错系列(二)Failed to load C:\Users\XXX\webpack.config.js:17 mode: ‘development‘
  3. aiem模型matlab,一种基于高分三号数据的植被覆盖区土壤水分反演方法与流程
  4. 设备划分冲突域和广播域
  5. 6LowPAN与CoAP协议
  6. 2021-09-06 工作记录--YDUI-让弹窗打开后,弹窗下面的页面不可以上下滑动
  7. 微信小程序中长按识别二维码
  8. HTTPServer不能从外部访问
  9. 【操作系统】系统中断技术
  10. verilog学习笔记——8位数码管驱动设计与验证