【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(字符串,截取字符串起始位置,截取字符串长度):进行字符串截取
相关推荐
Decay__3 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
吃一碗粉只付一碗钱9 小时前
10-令牌里的用户主键不要明文
服务器·数据库·sql·sqlserver·c#
sun032210 小时前
【JDK 动态代理】 和 【CGLIB 代理】对比
java·数据库·sql
l1t12 小时前
DeepSeek总结的AI 智能体应该用哪种语言搜索其记忆:SQL 还是 SPARQL?
数据库·人工智能·sql
geovindu13 小时前
SQL Data Sampling and Approximation Techniques using postgreSQL 18
大数据·数据库·数据仓库·sql·postgresql·数据库开发·数据库架构
l1t14 小时前
DeepSeek总结的从 SQL 桥梁到智能体基础设施:Hex 的 DuckDB 实践
数据库·sql·duckdb
正儿八经的少年14 小时前
MyBatis 一对一、一对多 SQL
数据库·sql·mybatis
skywalk816314 小时前
hive —— 多机 AI Agent 协同的任务总线:分布式,多节点同时运行,保障不会宕机
人工智能·hive·分布式
Decay__15 小时前
03_MySQL 存储引擎与存储管理 —— InnoDB 深入、表空间/ibd、binlog/redo/undo 与双写缓冲
运维·数据库·sql·mysql·架构