Snowflake に格納されてる従業員テーブルから組織ツリーを抽出するクエリを書いたのでメモ
with recursive mgmt(delim, user_id, manager_id, job_title, emp_hier_level) as ( select ' ' as delim ,user_id ,manager_id ,job_title ,1 as emp_hier_level from dim_employee where job_title = 'CEO' union all select (delim || '-> ') ,e.user_id ,e.manager_id ,e.job_title ,emp_hier_level + 1 from dim_employee as e join mgmt as m on e.manager_id = m.user_id ) , b as (select delim || job_title as emp_hier ,user_id ,manager_id ,job_title ,emp_hier_level from mgmt) select distinct * from b;
dim_employee (従業員テーブル) に user_id (従業員ID) と job_title (肩書) と manager_id が入っている。
そこから recursive CTE でループしながら社員ごとにCEOから自分までのノード(距離)を「 -> 」区切りで並べてぶら下げて行くという処理。
recursive やっぱ便利よ。