1. MAXCOMPUTE(原odps)踩坑:
1锉罐、 在使用split_part(info, ‘|’, 1)函數(shù)切分?jǐn)?shù)據(jù)時(shí),要格外注意分隔符’|’践叠,尤其是涉及有非字母巧涧、數(shù)字的數(shù)據(jù),其中可能會(huì)夾雜’|’判哥,這樣就導(dǎo)致取出的數(shù)據(jù)不一致献雅;其實(shí)是應(yīng)該注意切分之前的字符串組裝concat()函數(shù),在組裝時(shí)使用的分隔字符塌计。
2挺身、 odps是一個(gè)數(shù)據(jù)倉(cāng)庫(kù),有分層的概念锌仅,它的dwd層類(lèi)型數(shù)據(jù)庫(kù)章钾,又有全量更新的dd類(lèi)型(即,每天更新歷史和最近一天新增一天數(shù)據(jù))和每天增量更新的ds類(lèi)型(即热芹,每天的數(shù)據(jù)存放在一個(gè)分區(qū))贱傀。dd表遇到一個(gè)坑是:有可能按前一天取數(shù)據(jù)仍然還沒(méi)有或沒(méi)更新,這樣可以利用max求最近一天數(shù)據(jù):
select * from table_name
where partition_name IN (select max(partition_name) from table_name));
3伊脓、延伸2府寒,odps提交工作流任務(wù)有幾個(gè)概念:
1. 今天提交的任務(wù)明天到調(diào)度時(shí)間時(shí)才會(huì)運(yùn)行;
2. 今晚12點(diǎn)之前會(huì)使用最新提交的代碼生成明天要跑的實(shí)例报腔;
3. 實(shí)例生成之后就跟代碼沒(méi)有關(guān)系株搔;
4. 停止一個(gè)周期任務(wù)運(yùn)行只能通過(guò)刪除代碼的方式。
最好不要使用to_char(dateadd(getdate(), 0, 'dd'), 'yyyymmdd'),即getdate()獲取分區(qū)時(shí)間纯蛾,因?yàn)閛dps任務(wù)涉及幾類(lèi)時(shí)間:
1. 業(yè)務(wù)時(shí)間:運(yùn)行時(shí)間 - 1天(運(yùn)行時(shí)間減一天)邪狞;
2. 調(diào)度時(shí)間:阿里云周期調(diào)度時(shí)間,可能會(huì)存在排隊(duì)現(xiàn)象茅撞;
3. 運(yùn)行時(shí)間:任務(wù)被調(diào)度后獲得計(jì)算資源時(shí)間帆卓。(getdate()獲得的時(shí)間巨朦,
這個(gè)時(shí)間可能和計(jì)算邏輯想要的時(shí)間有偏差)
4、odps select if()語(yǔ)句中支持like剑令,不支持in糊啡;
5、如果需要concat()數(shù)據(jù)吁津,需要將空值補(bǔ)一個(gè)值棚蓄,因?yàn)?concat('a', null, 'b') = NULL,一個(gè)null會(huì)導(dǎo)致所有值都失效碍脏。
2. 計(jì)算一個(gè)區(qū)域的流入流出梭依,直接上圖
相當(dāng)于是兩張表join,假設(shè)A表為新表典尾,B表為舊表役拴,則黃色部分為流入,深藍(lán)色為流出钾埂,淺藍(lán)色為兩天都存在河闰。計(jì)算時(shí)可以先做一個(gè)full outer join, 然后當(dāng)B.key is null,則為流入;A.key is null,則為流出褥紫。