0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点#使用Hive 将父子结构转换成层级结构

使用Hive 将父子结构转换成层级结构

已知表结构有parent_id, id , category_level ,category_name

其中,parent_id代表的这个分类的上级分类,例如某一大类的二级分类的id等于下级三级的parent_id 其中id是改分类的id 其中category_level代表的是分类的等级,一级二级三级四级 ,最多四级. 其中category_name代表分类的名称

想将其转化成
id1,id2,id3,id4,category_name_1,category_name_2,category_name_3,category_name_4

SELECT  COALESCE(t4.id,t3.id,t2.id,t1.id) AS final_id
       ,t1.id                             AS id_1
       ,t2.id                             AS id_2
       ,t3.id                             AS id_3
       ,t4.id                             AS id_4
       ,t1.category_name                  AS category_name_1
       ,t2.category_name                  AS category_name_2
       ,t3.category_name                  AS category_name_3
       ,t4.category_name                  AS category_name_4
FROM dw.dw_cate_table t1
LEFT JOIN dw.dw_cate_table t2
ON t1.id = t2.parent_id
LEFT JOIN dw.dw_cate_table t3
ON t2.id = t3.parent_id
LEFT JOIN dw.dw_cate_table t4
ON t3.id = t4.parent_id
WHERE t1.parent_id = 0 
id category_level category_name parent_id
1 1 a
2 2 b 1
3 3 c 2
4 4 d 3
id1 id2 id3 id4 category_name1 category_name2 category_name3 category_name4
1 2 3 4 a b c d

当然以上的数据都是通过在没有一个指定的分类组进行的,加入有一个特定的分类组可以是这样使用

已知表结构有 cate_id, parent_id , id , category_level ,category_name

其他的条件都一样,这里的cate_id 就是已经规定了一个特定分类组

那么就可以这么处理了,这里我就用三级分类来演示了



SELECT  cate_id
       ,MAX(id_1)           AS id_1
       ,MAX(id_2)           AS id_2
       ,MAX(id_3)           AS id_3
       ,MAX(category_name1) AS category_name_1
       ,MAX(category_name2) AS category_name_2
       ,MAX(category_name3) AS category_name_3
FROM
(
	SELECT 
	       ,t1.id            AS id_1
	       ,t2.id            AS id_2
	       ,t3.id            AS id_3
	       ,t1.category_name AS category_name_1
	       ,t2.category_name AS category_name_2
	       ,t3.category_name AS category_name_3
	       ,cate_id
	FROM dw.dw_cate_table t1
	LEFT JOIN dw.dw_cate_table t2
	ON t1.id = t2.parent_id
	LEFT JOIN dw.dw_cate_table t3
	ON t2.id = t3.parent_id
	WHERE t1.parent_id = 0
	UNION
	SELECT 
	       ,t1.id            AS id_1
	       ,t2.id            AS id_2
	       ,null             AS id_3
	       ,t1.category_name AS category_name_1
	       ,t2.category_name AS category_name_2
	       ,null             AS category_name_3
	       ,cate_id
	FROM dw.dw_cate_table t1
	LEFT JOIN dw.dw_cate_table t2
	ON t1.id = t2.parent_id
	WHERE t1.parent_id = 0
	SELECT 
	       ,t1.id            AS id_1
	       ,null             AS id_2
	       ,null             AS id_3
	       ,t1.category_name AS category_name_1
	       ,null             AS category_name_2
	       ,null             AS category_name_3
	       ,cate_id
	FROM dw.dw_cate_table t1
	WHERE t1.parent_id = 0 
) t

group by cate_id


举报

相关推荐

0 条评论