【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(字符串,截取字符串起始位置,截取字符串长度):进行字符串截取
相关推荐
杨云龙UP6 小时前
一次数据库查询缓慢故障复盘:大表数据增长、SQL全表扫描导致系统响应异常
linux·运维·服务器·数据库·sql·mysql
2501_933670796 小时前
2027 应用统计学秋招选岗指南:统计、SQL、业务指标如何对应岗位
数据库·sql
卷毛迷你猪7 小时前
快速实验篇(B02)DWD 生产级升级
大数据·hive·hadoop
卷毛迷你猪8 小时前
快速实验篇(B03) 用户行为漏斗与转化率
大数据·hive·hadoop
oradh9 小时前
Oracle固定执行计划的方法----SQL Profie(三)
数据库·sql·oracle
卷毛迷你猪9 小时前
快速实验篇(B01)用户行为日志画像与 DWD 标准化
大数据·hive·hadoop
做运维的阿瑞10 小时前
mysql数据库分组查询:GROUP BY 与 HAVING 的执行逻辑
数据库·sql·mysql
阳光九叶草LXGZXJ10 小时前
达梦数据库-学习-67-SSL加密认证
linux·运维·数据库·sql·学习·ssl
驭渊的小故事10 小时前
MyBatis 入门:从 JDBC 到优雅操作数据库(一)
笔记·sql·spring
Wx-bishekaifayuan11 小时前
springboot房屋租赁系统11574-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·sql·spring·课程设计