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 やっぱ便利よ。