对Controller进行单元测试是Spring框架原生就支持的能力,它可以模拟HTTP客户端发起对服务地址的请求,可以不用借助于诸如Postman这样的外部工具就能完成对接口的测试。...具体来讲,是由Spring框架中的spring-test模块提供的实现,详见MockMvc。...如下将详细阐述如何使用MockMvc测试框架实现对“Spring Controller”进行单元测试,基于Spring Boot开发框架进行验证。 添加测试框架依赖: 结果时,有2种方式: 1.使用JUnit提供的Assert断言工具判断返回结果,这是一种非常普遍和常见的方式 2.在MockMvc框架中可以通过andExpect()方法定义一个或多个预期结果...写在最后 使用Spring提供的测试框架MockMvc可以非常方便地实现对HTTP服务接口进行单元测试,不要把基础的功能验证工作都交给测试童鞋,应该通过单元测试来保证代码迭代的稳定性。
也许很多同学写单元测试时遇到这样的问题,一个类方法是 protected ,如何测呢 ? 当然,你可以说把 protected 改成 public 就可测了!...会不会有吃牛排却被塞了牙的感觉 ~ 看看下面的方法是不是会好一些。...假设我们要对下面这个类的 add 方法进行测试 class Demo{ protected function add($a, $b){ return...继承类要做的唯一事情是将父类的 protected 方法以 public 方式暴露给外界,参数等一切形式与父类相同。目的只有一个,方便测试,且不对原有父类代码造成影响。...不过,这次我也没有办法了,如果你有好的方式,欢迎留言.
宽格式数据:每个变量单独成一列为宽格式数据,例如变量name、age等。 长格式数据:长数据中变量的ID没有单独列成一列,而是整合在同一列。...order by user_no collect_set形成的集合是无序的,若想得到有序集合,可以使用sort_array对集合元素进行排序。...select user_no, str_to_map(concat_ws(',',sort_array(collect_set(concat_ws(':', message, detail...map格式函数,可以每一步运行出来查看结果更容易理解。...order by user_no ) a 上面代码就是提取map格式数据中的key与value,即列名['key']得到value值。
到一个数组, 按mid_id分组(便于后边统计) collect_set将某字段的值进行去重汇总,产生array类型字段。...concat_ws('|', collect_set(version_name)) version_name, concat_ws('|', collect_set(lang))lang,...('|', collect_set(version_name)) version_name, concat_ws('|', collect_set(lang)) lang, concat_ws('|',...如果是每日新增的设备,则在每日新增设备表中为null。...:通常是周一对前3周的数据做统计,该数据一周计算一次。
# 关于排序:如何根据函数返回的值对dart中的List进行排序 void main(){ List pojo = [POJO(5), POJO(3),POJO(7),POJO(1)
到一个数组, 按mid_id分组(便于后边统计) collect_set将某字段的值进行去重汇总,产生array类型字段。...concat_ws('|', collect_set(version_name)) version_name, concat_ws('|', collect_set(lang))lang,...('|', collect_set(version_name)) version_name, concat_ws('|', collect_set(lang)) lang, concat_ws('|',...concat_ws('|', collect_set(version_name)) version_name, concat_ws('|', collect_set(lang)) lang,...如果是每日新增的设备,则在每日新增设备表中为null。
函数将将星座和血型用“,”连接后group by 用collect_set函数对name聚合,用concat_ws函数对聚合后的name用“|”分割 注意: collect_list不去重 collect_set...去重 三、执行sql: SELECT t1.a, CONCAT_WS("|",collect_set(t1.name)) FROM ( SELECT name...,CONCAT_WS(',',constellation,blood) a FROM syc_ads.test_transform )t1 GROUP BY t1.a 四、执行结果: 列转行...一、实现内容: 将用户的多个爱好拆分成单行展示 二、实现步骤: 先用split函数将hobby根据“,”分割成数组 lateral view结合explode函数进行拆分后的聚合 三、执行sql: SELECT...AS hobby1; 四、执行结果:
1、order by 对查询结果做一次全局排序,即所有Mapper产生的结果都会交给一个reducer处理,无论数据量大小,job任务只会启动一个reducer,所以如果数据量巨大,会耗费大量时间计算...2、sort by 对每一块Partion进行局部排序,即每一个reducer处理的数据都是有序的,但不能保证全局有序。...3、distribute by 一般和sort by 组合使用,即将某一块数据给一个reducer处理,然后在指定的reducer中进行sort by排序(distribute by必须写在sort...("|",collect_set(t1.name)) names 【注】 collect_set去重 collect——list不去重 from( select...by 设置字段与字段之间的分隔符 collection items terminated by 设置字段中各个子元素的分隔符
order by 语句会对查询结果做一次全局排序,即,所有的 mapper 产生的结果都会交给一个 reducer 去处理,无论数据量大小,job 任务只会启动一个 reducer,如果数据量巨大,则会耗费大量的时间... desc; 1.1.2、sort by hive 中的 sort by 语句会对每一块局部数据进行局部排序,即每一个 reducer 处理的数据都是有序的,但是不能保证全局有序。...然后在指定的 reducer 中进行 sort by 排序。...("|", collect_set(t1.name)) name from (select concat_ws(",", constellation, blood_type) as c_b, name... view explode(category) table_tmp as category_name; -- lateral view 对原始表的集合字段进行了侧写,得到侧写表和侧写列(侧写字段)。
在Excel中,如果想对一个一维的数组(只有一行或者一列的数据)进行排序的话(寻找最大值和最小值),可以直接使用Excel自带的数据筛选功能进行排序,但是如果要在二维数组(存在很多行和很多列)的数据表中排序的话...先如今要对下面的表进行排序,并将其按顺序排成一个一维数组 ?...另起一块区域,比如说R列,在R列的起始位置,先寻找该二维数据的最大值,MAX(A1:P16),确定后再R1处即会该二维表的最大值 然后从R列的第二个数据开始,附加IF函数 MAX(IF(A1:P300...进行输入(非常重要) 然后即可使用excel拖拽功能来在R列显示出排序后的内容了
在 Hive SQL 中,CONCAT_WS 和 CONCAT 函数都用于连接字符串,但它们在如何处理分隔符方面存在差异。...因为ORDER BY子句对整个结果集进行全局排序,而不是对每个owner和primary_key组内的数据进行排序。...总结:在此概括一下ORDER BY与DISTRIBUTE BY和SORT BY的区别:ORDER BY: ORDER BY子句用于对整个结果集进行全局排序。通常用于对查询结果的最终展示格式进行排序。...它对整个结果集进行排序,因此对于分组内部的局部排序不是很理想,尤其是当输入数据的分布和假设不同时。...UNION ALL:UNION ALL操作符也将两个或多个查询结果集合并为一个结果集,但不进行去重。UNION ALL会保留所有结果中的重复行,并将其全部加入到最终的结果集中。
Examples: > SELECT collect_list(col) FROM VALUES (1), (2), (1) AS tab(col); [1,2,1] 注意 该函数是非确定性的,因为收集结果的顺序取决于行的顺序...Since: 2.0.0 2.collect_set函数介绍 collect_set(expr) - 收集并返回一个唯一元素的集合。...Examples: > SELECT collect_set(col) FROM VALUES (1), (2), (1) AS tab(col); [1,2] 注意 该函数是非确定性的,因为收集结果的顺序取决于行的顺序...在升序排序中,空元素将被放置在返回数组的开头;在降序排序中,空元素将被放置在返回数组的末尾。...执行SQL select rider_id, concat_ws(',', collect_set(goods_type)) as goods_type_list from t_delivery_orders
经过前面那么久的折腾,我们终于可以切入主题了,接下来我们用数仓分层的理论,在Hive中建立数据仓库。...,我们要配置hive的LZO压缩INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' ODS层加载数据脚本 0: jdbc:hive2...concat_ws('|', collect_set(version_name)) version_name, concat_ws('|', collect_set(lang)) lang,...concat_ws('|', collect_set(version_name)) version_name, concat_ws('|', collect_set(lang)) lang,...concat_ws('|', collect_set(version_name)) version_name, concat_ws('|', collect_set(lang)) lang,
GROUP BY category 结果如下: GROUP_CONCAT()函数的API如下: 功能: 将group by产生的同一个分组中的值连接起来,返回一个字符串结果。...;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。...(2)hive中 hive不提供GROUP_CONCAT函数,所以需要使用其他方法代替,我们可以使用CONCAT_WS()函数代替,如下: SELECT category, CONCAT_WS(...,COLLECT_SET表示组内去重,表示将name字段放到一个list/set中,在使用concat_ws进行连接。...2、组内排序下的GROUP_CONCAT对比 需求如下: 写出一个sql语句,按照category分组,并把组内的name和level使用“name-level”格式使用“; ”分隔符连接,并在组内使用
) split函数传入两个参数,对string按照seprator进行拆分,这里就相当于把一个字符串变成了一个array explode 顾名思义,就是“爆炸”函数,就是把上面拆分的array给炸开,由一行三列...——也就是如何进行转列呢?...其实hive里有一个类似于“汇总数据”sum的函数,collect_set是专注于文本的汇总杀器,而重要的是:它会剔除重复记录。 那如何解决方括号和双引号的问题呢?...其实也很简单,上脚本: SELECT class ,concat_ws(';',collect_set(name)) AS names FROM ( SELECT...VIEW explode(split(t.students,';')) names AS item ) tt GROUP BY class ; 上优化后结果图: 其实就是加了一个concat_ws
duration_rank,然后拼接concat_ws(',',collect_set(category)),但是得到的结果却是乱序的,产生这个问题的根本原因自然在MapReduce,如果启动了多于一个...解决方法可以把mapper数固定成1,或者把rank加进来再进行一次排序,拼接完之后把rank去掉: select regexp_replace( concat_ws(',', sort_array...( collect_list( concat_ws(':',lpad(cast(duration_rank as string),5,'0'),cast(category as...对齐,因为排序的是字符串而不是数字,如果不补0的话,按字典序排序就会变成1, 10, 11, 12, 13, 2, 3, 4......将排序的结果拼起来之后,用regexp_replace函数替换掉冒号及其前面的数字,大功告成。
1 将排序结果插入到新文件中 hive> insert overwrite table re_table1 select * from table1 cluster by id; 2 在shell中使用... a 可以直接在hive中添加命令:set hive.cli.print.header=true b 在$HOME/.hiverc文件中添加配置:hive.cli.print.header=true...(这种形式使用hive会报错并退出) 6 hive去重 hive> select id, concat_ws(',', collect_set(school)) from table1 group by...id; 在这里CONCAT_WS是UDF,COLLECT_SET是UDAF,它将group后的id去重,并转换为了array,方便udf使用。...hive> describe database default; 8 显示是哪个数据库 hive> set hive.cli.print.current.db=true; 9 hive执行按严格格式进行的设置
concat_ws 三、有序行转列 根据配送订单记录表,查询出骑手id,顾客id列表,要求顾客id列表中的顺序按照送达时间早晚排序。...分析 这里要求按照订单送达时间,对顾客id进行排序。...直接考虑是使用开窗函数,根据时间进行排序(这种方法不可行,原因在于collect_list和collect_set那句提示“该函数是非确定性的,因为收集结果的顺序取决于行的顺序,这在经过shuffle之后可能是不确定的...可以看到collect_list结果是正确的(这里属于巧合,但是大多数情况都是对的),而collect_set的结果是错误的。...两个函数中均有提示,不保证结果顺序,从严谨出发,这两个函数均不可因为开窗函数来保证有序。 如果忽略该问题,使用collect_list进行行转列开窗,大部分情况得到的结果是正确的。
,不可跟聚合函数 having:对查询结果中的列发挥作用,相当于二次筛选,可跟聚合函数,只能用于group byf分组统计语句 -- 以字段grade分组,显示age平均值大于18的grade select...concat(),参数只能为字符串,第一个参数为后面参数的分隔符 select concat_ws('-', name, gender) from student; Collect_set collect_set...(col) 将一列中复杂的array或map结构拆分成多行 -- 将上面collect_set后的结果使用explode拆分 select explode(ages) from (select collect_set...LATERAL VIEW udtf(expression) tableAlias AS columnAlias 配合split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,并且对拆分后的结果进行聚合...; -- 将数据按id值降序排序 select * from student order by id desc; Sort By 内部排序 对每个Reducer进行排序,不影响全局结果集 直接使用会将结果平均分配给每个文件
行转列聚合 一、开始之前 在进行操作之前,你需要知道以下的几个函数: 1、CONCAT(string A/col, string B/col…): 返回输入字符串连接后的结果,支持任意个输入字符串。...3、COLLECT_SET(col): 函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生 array 类型字段。...,输出如下的结果 info name 女-10 Missy 女-27 Penny 男-10 Cooper 男-18 Titan,Goodman 四、创建Hive表并导入数据 1、建立user_info...(',', COLLECT_SET(t1.name)) name FROM ( SELECT name, CONCAT_WS('-', sex, age) info FROM user_info...一、开始之前 在进行操作之前,你需要知道以下的几个函数: 1、EXPLODE(col): 将 hive 一列中复杂的 array 或者 map 结构拆分成多行。
领取专属 10元无门槛券
手把手带您无忧上云