以前の作業で遭遇した問題のいくつかは、言うまでもなく、これらの状況を簡単に共有して、直接問題に行きましょう。
1.問題の背景
上の図のデータ効果を下の図の効果に変換します
マネージャー |
["aa"、 "aa"、 "aa"、 "bb"、 "bb"] |
["cc"、 "cc"、 "dd"] |
["1"、 "2"、 "1"、 "2"、 "3"] |
マネージャー |
aa、bb |
cc、dd |
1,2,3 |
2.実装のアイデア
- 最初のステップは、横方向のexplode()関数の側面図を使用してマネージャー列を開くことです。
- 2番目のステップは、wm_concat()関数をgroup byと組み合わせて使用して、重複データを削除することです。
3.コードの実装
select approvalid
,subProductTag
,regexp_replace(wm_concat(distinct managers,','),'"','')as manager
from (
SELECT approvalid
,subProductTag
,managers
FROM (SELECT approvalid,subproducttag,manager FROM a WHERE ftime = %(dateFrom)s)tmp
lateral view explode(split(substr(manager,2,length(manager)-2),','))tmp1 as managers)
group by approvalid,subProductTag
4.まとめ
全体的な考え方は、最初に拡張してから集約することです。他に優れた実装方法がある場合は、下のコメントセクションで自由に考えを表明してください。