【问题标题】:Hive - explode and aggregate count?Hive - 爆炸和汇总计数?
【发布时间】:2021-06-03 15:35:42
【问题描述】:

我有一个配置单元表,它存储驱动器到叶节点的路径,以及它有多少文件。并想建立一个新的配置单元表,可以查找在任何文件夹深度下存在多少个文件。我可以获得一些关于如何实现这一目标的提示吗?

我的输入表是:

>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 + explode 方法,但这不允许我跟踪目录层次结构(每个/ 都存储在单独的行中)。

【问题讨论】:

  • 您似乎在查询 Hive 而不是例如 Spark、Trino 或 Presto。删除不相关的标签。

标签: sql hive hiveql hierarchy explode


【解决方案1】:

您可以拆分路径,然后使用运行 collect_set 解析函数 + concat_ws 再次构建路径。在此聚合后的 file_count 组按路径:

演示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 2019-12-27
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    相关资源
    最近更新 更多