MySQLselect columnA, group_concat(columnB separator ',')from tablegroup by columnAHiveselect columnA, concat_ws('_', collect_set(columnB))from tablegroup by columnAPrestoselect columnA, array_join(array_agg(columnB), ',')from tabl
可替换为wm_
concat
()
默认为逗号分隔,如果想其他符号要重写函数或者用replace()函数包裹替换,例如:
select replace( wm_
concat
( user_name),',','|') from zhmx_data_bzbb.tb_clue
按
group
_
concat
的
语法
会报错非法参数
//会报错
select wm_
concat
( user_name,'|') from zhmx_data_bzbb.tb_clue
如果还想支持排序,或者支持替换分隔符,也可以使用lista
mysql
中
,
group
_
concat
函数将
group
by产生的同一个分组
中
的值连接起来,返回一个字符串结果。当查询的数据过多时,
group
_
concat
超出了默认值1024个字符,超过就会截断,导致
group
_
concat
查询出来的数据不全。好的,这是一个容易忽视的坑。解法1:
https://www.freesion.com/article/2975170859/
http://www.javashuo.com/article/p-zqzeqcby-ws.html解法2:
不用
group
_
concat
1、字符串截取substr
presto
语法
:
substr(string, start, length) → varchar 如: select substr(‘1599319787151’,1,10)
substr(string, start) → varchar 如: select substr(‘1599319787151’,1)
而
hive
中
:substr和substring都可以
568810800017635002 210100026066367206
568810800017635002 210100026070369019
568810800017635002 210100026038823395
568810800017635002 210100026038921817
568811800170738001 210100016048730468
568811800170738001
当过滤条件作用在分区字段上面时,可以减少数据扫描的范围,有效提升查询性能;
当
group
by的数值型字段将比字符型更节省内存空间;
还应考虑统计字段基数(某字段拥有不同值的个数),将基数大的字段放在前面
3.order by 和 limit 配合使用
order by 将所有数据放到一个worker
中