我有一个hive表,它存储驱动器到叶子节点的路径,以及它有多少个文件。并且想要建立一个新的hive表,它可以查找在任何文件夹深度下存在多少文件。我能得到一些关于如何做到这一点的建议吗?
我的输入表是:
>select * from default.file_file
path file_count
/teamA/projectA/ 3
/teamA/projectB/ 2
我正在尝试构建输出表,使其看起来像:
>select * from default.output_table
path file_count
/ 5
/teamA/ 5
/teamA/projectA/ 3
/teamA/projectB/ 2
到目前为止,我尝试了lateral_view + explosion方法,但这并不允许我跟踪目录层次结构(每个/
存储在单独的行中)。
您可以拆分路径,然后使用运行collect_set解析函数+ concat_ws重新构建路径。
演示:
SELECT stack (2,
'/teamA/projectA/', 3,
'/teamA/projectB/', 2
) AS (path, file_count)
)
select path, sum(file_count) file_count
from
(
select t.file_count,
concat(concat_ws('/',collect_set(s.node) over(partition by t.path order by level))
, '/'
) path
from Table1 t
--remove trailing /, split and explode
lateral view posexplode(split(regexp_replace(t.path,'/$',''),'/')) s as level, node
)s
group by path;
结果:
path file_count
/ 5
/teamA/ 5
/teamA/projectA/ 3
/teamA/projectB/ 2