【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(字符串,截取字符串起始位置,截取字符串长度):进行字符串截取
相关推荐
飞Link2 小时前
【Hadoop】Linux(CentOS7)下安装Hadoop集群
大数据·linux·hadoop·分布式
lbb 小魔仙2 小时前
【Java】Spring Data JPA 详解:ORM 映射、查询方法与复杂 SQL 处理
java·开发语言·sql·spring cloud
飞Link2 小时前
【Sqoop】Linux(CentOS7)下安装Sqoop教程
linux·hive·hadoop·sqoop
飞Link3 小时前
【Hive】Linux(CentOS7)下安装Hive教程
大数据·linux·数据仓库·hive·hadoop
心止水j5 小时前
hbase 电商1
hive
越甲八千5 小时前
SQL注入
数据库·sql·oracle
夜光小兔纸6 小时前
Oracle 表新增 ID RAW(16) 字段并填充历史数据
数据库·sql·oracle
小鸡脚来咯6 小时前
Hive分桶表:大数据开发的性能优化利器
大数据·hive·性能优化
七夜zippoe7 小时前
MyBatis插件开发-实现SQL执行耗时监控
java·sql·mybatis·springboot·责任链
爱好读书7 小时前
AI+SQL生成ER图
数据库·人工智能·sql