maxcompute 2.0复杂数据类型之array
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
1. 含義
類似于Java中的array。有序、可重復(fù)。
2. 場(chǎng)景
什么樣的數(shù)據(jù),適合使用array類型來(lái)存儲(chǔ)呢?這里列舉了幾個(gè)我在開(kāi)發(fā)中實(shí)際用到的場(chǎng)景。
2.1 標(biāo)簽類的數(shù)據(jù)
為什么說(shuō)標(biāo)簽類數(shù)據(jù)適合使用array類型呢?
(1)標(biāo)簽一般是一個(gè)只有key、沒(méi)有value的結(jié)構(gòu);
(2)標(biāo)簽的數(shù)量(枚舉值個(gè)數(shù))會(huì)非常多;
(3)標(biāo)簽的變化會(huì)比較頻繁;
(4)標(biāo)簽會(huì)過(guò)期;
因此,比起“創(chuàng)建多個(gè)字段”、“使用指定分隔符分隔的字符串”、“使用map”等方法,使用array是更合適的。
2.2 對(duì)象列表
對(duì)象有多種固定的屬性,簡(jiǎn)單的key-value格式無(wú)法滿足,可以使用array嵌套struct的方式定義。減少了維護(hù)數(shù)據(jù)字典的工作量。
3. 玩轉(zhuǎn)array
3.1 數(shù)組字段拆成多行
3.1.1 explode
select explode(t.arr) from (select array('a','b','c') as arr) t;| a |
| b |
| c |
| xxx | a |
| xxx | b |
| xxx | c |
3.1.2 posexplode
select posexplode(t.arr) from (select array('a','b','c') as arr) t;| 0 | a |
| 1 | b |
| 2 | c |
| xxx | 0 | a |
| xxx | 1 | b |
| xxx | 2 | c |
3.2 多行合并成數(shù)組
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;| ["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;| ["a","b"] |
3.3 數(shù)組拼成字符串
select concat_ws(',',t.arr) from (select array('a','b','c') as arr) t;| a,b,c |
3.4 字符串轉(zhuǎn)成數(shù)組
select split('a,b,c',',');| ["a","b","c"] |
3.5 構(gòu)造數(shù)組
select array('aa','bb','cc');| ["aa","bb","cc"] |
3.6 數(shù)組元素排序
select sort_array(array('b','c','e','a','d'));| ["a","b","c","d","e"] |
| [1,2,3,10,100] |
3.7 數(shù)組中增加一項(xiàng)
select split(concat('d,',concat_ws(',',t.arr)),',') as arr from (select array('a','b','c') as arr) t;| ["d","a","b","c"] |
4. 常見(jiàn)用法
4.1 代替無(wú)法使用的with cube
例如現(xiàn)在有張下單記錄流水表,記錄著每一條下單記錄,包含字段“訂單ID”、“下單人ID”、“下單渠道(網(wǎng)站/app)”。
現(xiàn)在要統(tǒng)計(jì)“各渠道的下單人數(shù)和訂單數(shù)”,渠道維度包含“不限”、“網(wǎng)站”、“APP”三項(xiàng)。
一般做這些包含“不限”的維度的聚合計(jì)算時(shí),都使用group by xxx with cube關(guān)鍵字。但是maxcompute中暫時(shí)還不支持這個(gè)關(guān)鍵字,所以我們換另一種方法來(lái)實(shí)現(xiàn)。
4.2 數(shù)組是否相等
數(shù)組的相等或不等,無(wú)法通過(guò)“=”來(lái)判斷,因此要嘗試一些其他的方法。最常用的辦法,就是轉(zhuǎn)成字符串再比較。
4.2.1 考慮順序是否一致
直接轉(zhuǎn)成字符串后,比較是否相等
4.2.2 不考慮順序是否一致
先排序,再轉(zhuǎn)成字符串,然后比較是否相等
原文鏈接
轉(zhuǎn)載于:https://my.oschina.net/u/1464083/blog/3019854
總結(jié)
以上是生活随笔為你收集整理的maxcompute 2.0复杂数据类型之array的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux Postfix + dove
- 下一篇: 左偏树 P3377【模板】左偏树(可并堆