企业网站 响应式,网店营销推广策略,西安搬家公司哪家好,wordpress 启动慢2019独角兽企业重金招聘Python工程师标准 1. 含义 类似于Java中的array。有序、可重复。 2. 场景 什么样的数据#xff0c;适合使用array类型来存储呢#xff1f;这里列举了几个我在开发中实际用到的场景。 2.1 标签类的数据 为什么说标签类数据适合使用array类… 2019独角兽企业重金招聘Python工程师标准 1. 含义 类似于Java中的array。有序、可重复。 2. 场景 什么样的数据适合使用array类型来存储呢这里列举了几个我在开发中实际用到的场景。 2.1 标签类的数据 为什么说标签类数据适合使用array类型呢 1标签一般是一个只有key、没有value的结构 2标签的数量枚举值个数会非常多 3标签的变化会比较频繁 4标签会过期 因此比起“创建多个字段”、“使用指定分隔符分隔的字符串”、“使用map”等方法使用array是更合适的。 2.2 对象列表 对象有多种固定的属性简单的key-value格式无法满足可以使用array嵌套struct的方式定义。减少了维护数据字典的工作量。 3. 玩转array 3.1 数组字段拆成多行 3.1.1 explode select explode(t.arr) from (select array(a,b,c) as arr) t;colabcselect t1.id,t2.arr from (select xxx as id,array(a,b,c) as arr) t1 lateral view explode(t1.arr) t2 as arr ;idarrxxxaxxxbxxxc 3.1.2 posexplode select posexplode(t.arr) from (select array(a,b,c) as arr) t;posval0a1b2cselect t1.id,t2.serialno,t2.arr from (select xxx as id,array(a,b,c) as arr) t1 lateral view posexplode(t1.arr) t2 as serialno,arr ;idserialnoarrxxx0axxx1bxxx2c 3.2 多行合并成数组 3.2.1 不去重 select collect_list(t.c1) as arr from ( select a as c1 union all select a as c1 union all select b as c1) t;arr[a,a,b] 3.2.2 去重 select collect_set(t.c1) as arr from ( select a as c1 union all select a as c1 union all select b as c1) t;arr[a,b] 3.3 数组拼成字符串 select concat_ws(,,t.arr) from (select array(a,b,c) as arr) t;_c0a,b,c 3.4 字符串转成数组 select split(a,b,c,,);_c0[a,b,c] 3.5 构造数组 select array(aa,bb,cc);_c0[aa,bb,cc] 3.6 数组元素排序 select sort_array(array(b,c,e,a,d));_c0[a,b,c,d,e]select sort_array(array(1,10,100,2,3));_c0[1,2,3,10,100] 3.7 数组中增加一项 select split(concat(d,,concat_ws(,,t.arr)),,) as arr from (select array(a,b,c) as arr) t;arr[d,a,b,c] 4. 常见用法 4.1 代替无法使用的with cube 例如现在有张下单记录流水表记录着每一条下单记录包含字段“订单ID”、“下单人ID”、“下单渠道(网站/app)”。 现在要统计“各渠道的下单人数和订单数”渠道维度包含“不限”、“网站”、“APP”三项。 一般做这些包含“不限”的维度的聚合计算时都使用group by xxx with cube关键字。但是maxcompute中暂时还不支持这个关键字所以我们换另一种方法来实现。 SELECT tt.下单渠道, COUNT(1) AS 下单人数, SUM(tt.下单量) AS 下单量
FROM (SELECT t1.下单人ID, t2.下单渠道, SUM(t1.下单量) AS 下单量FROM (SELECT t.下单人ID, t.下单渠道, SUM(t.下单量) AS 下单量FROM (SELECT 订单ID, 下单人ID, 下单渠道, 1 AS 下单量FROM 下单记录流水表) tGROUP BY t.下单人ID, t.下单渠道) t1LATERAL VIEW EXPLODE(array(t1.下单渠道, 不限)) t2 AS 下单渠道GROUP BY t1.下单人ID, t2.下单渠道
) tt
GROUP BY tt.下单渠道4.2 数组是否相等 数组的相等或不等无法通过“”来判断因此要尝试一些其他的方法。最常用的办法就是转成字符串再比较。 4.2.1 考虑顺序是否一致 直接转成字符串后比较是否相等 4.2.2 不考虑顺序是否一致 先排序再转成字符串然后比较是否相等 原文链接 转载于:https://my.oschina.net/u/1464083/blog/3019854