【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(字符串,截取字符串起始位置,截取字符串长度):进行字符串截取
相关推荐
上海云盾商务经理杨杨2 小时前
Web渗透核心漏洞:SQL注入漏洞测试与修复实战
数据库·sql·安全
Irene19913 小时前
(课堂笔记)游标与动态SQL(EXECUTE IMMEDIATE):使用 CHR(39) 替代拼接单引号
sql
消失的旧时光-19433 小时前
SQL 第四篇:JOIN 实战(数据库到底是怎么“拼表”的)
数据库·sql·mysql
秋96 小时前
MySQL 8.0.46 与 MySQL 9.7.0在sql语句方面的区别并举例说明
数据库·sql·mysql
Irene199110 小时前
PL/SQL:异常处理补充
数据库·sql
Volunteer Technology10 小时前
Hadoop NameNode HA
大数据·hadoop·分布式
Elastic 中国社区官方博客10 小时前
从平均值到任意百分位数:Elasticsearch 在 ES|QL 中原生支持指数直方图
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索·prometheus
大大大大晴天10 小时前
Flink集群跨机房容灾:HDFS 快照权限踩坑与实践
hadoop·flink
今儿敲了吗10 小时前
数据库(四)——关系数据库SQL语言
数据库·笔记·sql
麦聪聊数据10 小时前
SQL与数据库开发(二):用 CTE 重构嵌套查询与处理树形结构
sql·数据库开发