蜂巢-爆炸和聚合计数?



我有一个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

相关内容

  • 没有找到相关文章

最新更新