【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(字符串,截取字符串起始位置,截取字符串长度):进行字符串截取
相关推荐
思麟呀3 小时前
Epoll的学习,在select和poll的基础上
网络·数据库·sql·学习·tcp/ip
猫的玖月5 小时前
SQL语法简介
数据库·sql·oracle
禹凕5 小时前
MYSQL——基础知识(SQL的临时表和克隆表)
sql·mysql
空空潍6 小时前
MySQL索引不生效?一文理解CBO成本模型
数据库·sql·mysql
IRevers7 小时前
【Agent】基于Langchain的Agent数据库查询助手
数据库·人工智能·pytorch·sql·深度学习·langchain·agent
他是龙5517 小时前
DVWA SQL 注入全级别通关笔记(Low / Medium / High / Impossible)
数据库·笔记·sql
treacle田7 小时前
达梦数据库-快速装载工具dmfldr-记录总结
数据库·sql·达梦快速装载dmfldr
juniperhan1 天前
Flink 系列第17篇:Flink Table&SQL 核心概念、原理与实战详解
大数据·数据仓库·分布式·sql·flink
Irene19911 天前
SQL 中的大小写规则总结:关键字、函数名不区分大小写(建议大写),字符串值、日期格式符严格区分大小写
sql·大小写规范
不剪发的Tony老师1 天前
DBcooper:一款面向开发者的现代数据库客户端
数据库·sql