You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hive如何从多级目录仅筛选csv.gz文件进行数据查询

当然没问题!你完全可以在base目录层级执行查询时只筛选出.csv.gz格式的文件,我给你两种实用的方案,适配你的目录结构:

方法1:用路径通配符直接定位目标文件

这种方式最简洁,利用Hive支持的递归通配符**匹配所有日期子目录,精准定位到logs文件夹下的.csv.gz文件:

CREATE EXTERNAL TABLE IF NOT EXISTS csvData (
  `col1` string,
  `col2` string,
  `col3` string,
  `col4` string,
  `col5` string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' -- 替换成你实际使用的SerDe类
WITH SERDEPROPERTIES (
  "separatorChar" = ",",
  "quoteChar"     = "\""
)
STORED AS TEXTFILE
LOCATION '/base/**/logs/*.csv.gz';

小提示:如果你的.csv.gz是压缩文件,Hive默认支持gzip解压读取,只要确保STORED AS的格式和文件类型匹配就好,一般用TEXTFILE就可以。

方法2:递归遍历+规则过滤(适合复杂场景)

如果之后需要更灵活的文件过滤规则,可以先开启子目录递归遍历,再通过表属性指定只保留.csv.gz文件:

CREATE EXTERNAL TABLE IF NOT EXISTS csvData (
  `col1` string,
  `col2` string,
  `col3` string,
  `col4` string,
  `col5` string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
  "separatorChar" = ",",
  "quoteChar"     = "\""
)
STORED AS TEXTFILE
LOCATION '/base'
TBLPROPERTIES (
  -- 开启递归遍历所有子目录
  "hive.input.dir.recursive" = "true",
  "mapred.input.dir.recursive" = "true",
  "hive.supports.subdirectories" = "true",
  -- 用正则排除非csv.gz的文件
  "hive.input.path.filter" = "org.apache.hadoop.hive.ql.io.PathFilterAcceptAllButRegex",
  "hive.input.path.filter.regex" = ".*\\.(?!csv\\.gz).*$"
);

注意事项

  • 记得把示例里的SerDe类替换成你实际使用的(就是你原来语句里的org.apache.hadoop.hive.ser...部分)。
  • 第一种方法更适配你当前的固定目录结构,操作起来更简单;第二种方法扩展性更强,适合后续可能调整过滤规则的情况。

内容的提问来源于stack exchange,提问作者Adi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:25:05