如何将SQL查出的结果拼成json串

442 阅读2分钟

在机器学习中,特征工程是一个非常重要的环节,特征的好坏直接影响模型的效果。
除了用SQL开发一些简单的单值特征,比如每家店铺的流量,每家店铺的销量,这种单维的特征非常常见。
在实际工作中,还会有开发一些复杂特征的需求,常见的比如每家店铺在每个城市的广告投入,每家店在每个城市的产出,这里的投入产出指标会需要统计在店铺、城市两个维度下的值。

这种情况用怎么实现呢?

1. 用SQL拼出你想要的json串

  • 优点:借助SQL内置功能,查询速度快,效率高
  • 缺点:一次可能只能开发出一个特征值

2.用python或其他语言查询SQL结果

  • 优点:编程语言对于list,set,json操作灵活
  • 缺点:需要for循环,效率低

尤其是这些特征还要上调度,每天都要跑数据,在计算资源与时间的取舍后,优先选择通过SQL来实现。

实现步骤:

1.第一个group by 计算结果

在这里插入图片描述

2. 第二个group by拼接结果

需要掌握4个函数的用法:

  • concat()函数

一 concat()函数
1、功能:将多个字符串连接成一个字符串。
2、语法:concat(str1, str2,…)  
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
3、语法:concat(str1, seperator,str2,seperator,…)
返回结果为连接参数产生的字符串并且有分隔符,如果有任何一个参数为null,则返回值为null。

  • concat_ws() 函数

1.功能:和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符(concat_ws就是concat with separator)
2.语法:concat_ws(separator, str1, str2, …)
说明:第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null。

  • collect_set() 函数

1.功能:group by进行分组后,将每行的数据给连接起来,加入到一个set()中
2.语法:collect_set (str)
说明:满足set集合属性,其元素值不重复

  • collect_list() 函数

1.功能:group by进行分组后,将每行的数据连接起来,加入到一个list()中
2.语法:collect_list (str)
说明:满足list属性,将数据按顺序加入并存储,可以存储重复元素

完整代码如下所示:

insert into tmp.dwb_p_cust_feature_manage_dd
select mobile_no,
    'prov_cnt_1m_p_cust_manage',
	concat("{",concat_ws(",",collect_list(concat('"',temp.prov,'":',temp.prov_cnt_1m))),"}") as prov_cnt_1m_p_cust_manage,
    from_unixtime(unix_timestamp())
from
(select
	mobile_no,
	r1.region_name as prov,
	sum(case when r1.region_name is not null and DateDiff(from_unixtime(unix_timestamp()), c.created_time) <= 30 then 1 else 0 end) as prov_cnt_1m
from
	dcs.nt_tp_p_customers c
left join dcs.nt_bb_dealers d on c.dealer_id = d.dealer_id
left join dcs.nt_bb_regions r1 on d.province = r1.region_id and r1.is_inactive=0
where
	DateDiff(from_unixtime(unix_timestamp()),
	c.created_time) <= 30
group by
	mobile_no,
	r1.region_name)temp
group by temp.mobile_no;

最终结果如下所示:
在这里插入图片描述
很棒是不是!
👏👏👏再看看我们以前的文章😃😃😃
🌺 Excel中数据分析工具库-相关系数篇
🌺 干货,手把手教会你做相关性分析
🌺 5年数据分析路,小结。
🌺 用户细分及画像分析
🌺 K-近邻算法及实践

欢迎关注,微信公众号“数据分析师之家
扫描二维码 关注我们
💁提供职业规划、简历指导、面试辅导服务哦
QQ交流群:254674155
在这里插入图片描述