日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

            歡迎訪問(wèn) 生活随笔!

            生活随笔

            當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

            编程问答

            maxcompute 2.0复杂数据类型之array

            發(fā)布時(shí)間:2025/3/8 编程问答 23 豆豆
            生活随笔 收集整理的這篇文章主要介紹了 maxcompute 2.0复杂数据类型之array 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

            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; col
            a
            b
            c
            select t1.id,t2.arr from (select 'xxx' as id,array('a','b','c') as arr) t1 lateral view explode(t1.arr) t2 as arr ; idarr
            xxxa
            xxxb
            xxxc

            3.1.2 posexplode

            select posexplode(t.arr) from (select array('a','b','c') as arr) t; posval
            0a
            1b
            2c
            select 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 ; idserialnoarr
            xxx0a
            xxx1b
            xxx2c

            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; 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 數(shù)組拼成字符串

            select concat_ws(',',t.arr) from (select array('a','b','c') as arr) t; _c0
            a,b,c

            3.4 字符串轉(zhuǎn)成數(shù)組

            select split('a,b,c',','); _c0
            ["a","b","c"]

            3.5 構(gòu)造數(shù)組

            select array('aa','bb','cc'); _c0
            ["aa","bb","cc"]

            3.6 數(shù)組元素排序

            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 數(shù)組中增加一項(xiàng)

            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. 常見(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)。

            SELECT tt.`下單渠道`, COUNT(1) AS `下單人數(shù)`, 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 數(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)題。

            如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。