现象
在hive中建了一个parquet表,导入文件数据结构如下
_success 0M
_commited_ 10M
_started_xxx 0M
part-xxx.parquet 40M
...
查询表的数据量是正确的,但是多出来三个下划线开头的文件,考虑hive是read on schema的模式,为什么不读取这几个文件呢?
原因
发现网上有人讨论过这些现象,但是要么没解释原因要么解释的不清楚
https://blog.csdn.net/weixin_34357267/article/details/92599750
https://stackoverflow.com/questions/31466884/hive-not-recognizing-underscore-in-path
继续查看Hive源码FileInputFormat.class文件
private static final PathFilter hiddenFileFilter = new PathFilter() {
public boolean accept(Path p) {
String name = p.getName();
return !name.startsWith("_") && !name.startsWith(".");
}
};
hive中是以下划线_或者点.为隐藏文件
在listStatus中,会把hiddenFileFilter加入到filters中
protected FileStatus[] listStatus(JobConf job) throws IOException {
Path[] dirs = getInputPaths(job);
if (dirs.length == 0) {
throw new IOException("No input paths specified in job");