hive-group by的时候把两个字段变成map

源表结构:

pcgid               string

mobilegid           string

value               double

测试数据如下:

p1 m1 0.6
p1 m2 0.9
p2 m1 1.0

需要的结果是:

p1 {"m2":"0.9","m1":"0.6"} 2

p2 {"m1":"1.0"} 1

就是对源表进行group by之后对另外两个字段变成key-value存成一个map

查了一下,hive中没有现成的函数可以直接得到结果。不过可以转一个思路,把mobilegid和value先连接成字符串,然后再把整个set的结果连接成一个字符串,最后再用str_to_map,完美解决。

select pcgid as gid,str_to_map(concat_ws(",",collect_set(concat_ws(‘:‘, mobilegid, cast(value as string)) ))) as gids,count(1) as num
from gemini_product_id_connect_result_pair
group by pcgid;

p

时间: 2024-12-25 05:38:18

hive-group by的时候把两个字段变成map的相关文章

不同数据库中两列字段相减(某列有空值)

数据库中两个字段相减(某列有空值)处理方法: sql server中:select (isnull(字段1,0)-isnull(字段2,0)) as 结果 from 表 oracle中:select (nvl(字段1,0)-nvl(字段2,0)) as 结果 from 表 mysql中:select (ifnull(字段1,0)=ifnull(字段2,0)) as 结果 from 表 不同数据库中两列字段相减(某列有空值),码迷,mamicode.com

使用sed和awk取除最后两个字段之外的字段

字符串示例为: /Users/yfan/Downloads/dsc20170801_jar/releases/com/netfinworks/ufs/ufs-client/ufs-client-2.0.0.jar 需求:如果使用斜杠/作为分隔符的话,可能每个字符串的字段数不同,这时需要取 除了最后两个字段外的其他字段字符串,所得结果应为如下形式: /Users/yfan/Downloads/dsc20170801_jar/releases/com/netfinworks/ufs/ufs-clie

thinkphp 视图模型 两个字段映射同一个表

thinkphp 视图模型 是挺好用的. 这里有一种情况,例如一个文章表,有一个字段是add_admin_id, 用于记录添加者的id,还有一个字段edit_admin_id, 用于记录最后编辑者的id, 需要用视图模型通过admin_id来查询出真实姓名.这种清空是同一个表的两个字段分别又对应着同一个表.视图可以如下 class Red_userViewModel extends ViewModel{ Protected $viewFields = array( 'red_user' => a

sql server中如何将两个字段数据合并成一个字段显示(字段与字段添加特殊符号)

之前,我在做统计数据时,需要一个字段显示某月的订单数量和订单金额,要求组合成一个字段,用括号组合. 统计出来的结果大概是这样的,首先我们来创建一些模拟数据 ---创建订单表--- create table OmsOrder( Uid int identity(1,1) primary key, OrganizeName varchar(20) not null, OrderCount int not null, OrderMoney float not null ) --添加模拟数据--- in

MYSQL计算两个字段日期差

一,TIMESTAMPDIFF 语法: TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2). 说明: 返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差.其结果的单位由interval 参数给出.该参数必须是以下值的其中一个: FRAC_SECOND.表示间隔是毫秒 SECOND.秒 MINUTE.分钟 HOUR.小时 DAY.天 WEEK.星期 MONTH.月 QUARTER.季度 Y

update更新两个字段

update更新两个字段时的sql语句: update tj_record set is_recycle_reprint_guide='1' , recycle__guide_date=now() where id = #{record_id} 科室如果我将字段的","写成了and也不报错.但是更新不了.如图: 切记,更新多个字段时是以逗号分隔. update更新两个字段

solr 使用记录 - 查找某个值在两个字段之前的数据

有两个域,最小年龄 min_age 和最大年龄 max_age , 需要查找在这两个字段之间的数据. 比如:传年龄 10 ,要查 min_age <10<max_age. 由于对solr 不太熟悉 , 没有找到好方法. 思路如下: 因为年龄一般都是介于0-100 之间,所以分成两部分,min_age[0 TO 10] AND max_age[10 TO 100].

ThinkPHP 条件是一个表里面的两个字段比较

ThinkPHP 条件是一个表里面的两个字段比较 今天群里有人问,thinkphp框架,条件是一个表里的两个字段,怎么查询. 然后就做了下测试: 比如查询出 手机号就是微信号 的用户: (1)首先,正常的sql语句应该是这样的: SELECT `id`,`name`,`tel`,`weixin` FROM `user` WHERE `tel` = `weixin` 然后在thinkphp框架中测试: (2)当where条件是字符串时,肯定是可以的: M('user')->where('`tel`

C#代码给DropDownList的DataTextField属性绑定两个字段----2010年01月03日

给DropDownList的DataTextField属性绑定两个字段 方法1:在SQL查询语句中拼接字段 C#代码 using (SqlConnection conn = new SqlConnection("server=(local);database=Northwind;user id=sa;password=sa;min pool size=4;max pool size=100;Connection Lifetime=30;")) { SqlDataAdapter adap