【Hive SQL】统计同名路径下目录数量(基于reverse、split和substr函数)

首先,Hive事务表所产生的的路径信息如下:

PS:其中路径信息格式为

bash 复制代码
/user/hive/warehouse/${database_name}.db/${table_name}/*
bash 复制代码
/user/hive/warehouse/test.db/tran_ts/delete_delta_0000002_0000002_0000
/user/hive/warehouse/test.db/tran_ts/delta_0000001_0000001_0000
/user/hive/warehouse/test.db/tran_ts/delta_0000002_0000002_0000

然后,需求为:我们需要分库表统计目录数量。

接下来,拆分需求:

  1. 获取最后一个子目录名
  2. 截取字符串到最后一个'/'前的路径信息

因为hive没有获取第几个字符的相关UDF函数,所以只能通过多个函数组合的方式进行处理。结果如下:

sql 复制代码
select  location,
		substr(location, 1, length(location) - length(split(reverse(location), '/')[0]) - 1) as db_table_path,
		reverse(split(reverse(location), '/')[0]) as last_subpath_name
from 
(
	select "/user/hive/warehouse/test.db/tran_ts/delete_delta_0000002_0000002_0000" as location
) t

解析:

  • reverse(location):反转字符串
  • split(reverse(location), '/')[0]:反转并分隔字符串,获取字符串数组第一个字符串
  • reverse(split(reverse(location), '/')[0]):反转上述获取到的字符串,得到最后一个子目录名
  • length(location):获取路径字符串长度
  • length(location) - length(split(reverse(location), '/')[0]) - 1:获取待截取字符串长度,即总长度-最后一个子目录名长度
  • substr(字符串,截取字符串起始位置,截取字符串长度):进行字符串截取
相关推荐
yzs8711 小时前
SQL Sever Pragmatic Bitmap过滤技术解析
数据库·sql
Full Stack Developme14 小时前
SQL发展历史
数据库·sql
zcn12614 小时前
关于非相关子查询改写经验
数据库·sql·sql优化改写
今天也是元气满满的一天呢15 小时前
详解SQL注入问题
网络·数据库·sql
omenkk715 小时前
【MySQL专题】1.一条更新SQL语句是如何执行的
数据库·sql·mysql
callJJ16 小时前
SQL 调优完全指南 —— 从入门到实战
数据库·sql·调优·慢查询
淘矿人17 小时前
Claude助力前端开发
java·数据库·git·python·sql·spring·database
Languorous.18 小时前
SQL新手高频语法错误:分号遗漏、字段名写错,避坑合集
数据库·sql
杨云龙UP18 小时前
一次 Oracle 11g 异常不可用排查:从 ORA-01034 到磁盘 I/O 故障定位_2026-05-17
运维·数据库·windows·sql·oracle·centos
rockey6271 天前
AScript如何实现LINQ语法
sql·c#·.net·linq·script·eval·expression