我是Hive的新手,也是Hadoop生态系统的新手,从我所了解到的Hive的基础知识来看,你可以基于某些属性在Hive表上创建分区,如果一个查询中提到了该属性,那么它应该会得到性能提升,因为Hive只扫描那个特定的分区文件,而不是扫描整个表。 我的问题是,假设我们的数据有一些层次结构,比如说我根据唯一的状态值对表进行分区,每次基于状态的查询时,hive只会扫描那个特定的状态分区,而不是扫描整张表,但是如果说每个状态也有唯一的区名,如果我只基于区名进行查询,hive会扫描整张表吗?
如果是这样的话,那么有没有什么方法可以改变查询方式,让我可以手动指示hive查询该地区所属的特定状态文件,然后只对该分区文件执行其他操作,而不是扫描整个表来寻找匹配的地区值。
Hive的优势之一是它对分区的支持很强。 但是,当你写查询时,它不能读懂你的想法。
如果你有一个分区,在 state
那么你需要 state
在 where
子句进行分区修剪。 所以,如果你只查询 district
,整个表都会被扫描。
如果你有一个分区在 district
,那么你需要区。 查询 state
会扫描整个表。
如果你在这两个......上都有一个分区,那么声明起来就比较复杂了,但是你的查询会读取少数分区,其中有一个 state
或 district
.
如果你刚刚了解分区,我建议你从日期分区开始。 这是最常见的,也是熟悉概念的好方法。