我在 hadoop 集群上有一个相当大的 Hive 表(约 200 亿条记录),我需要对其进行几次连接。
是否可以在键上索引此表?例如,如果表名是table1并且我想在列键上执行table1与table2、table3和table 4 的多个连接,那么最有效的方法是什么?
如果相关表 2-4 相对较小(每个约 1 亿)
恕我直言,索引只有在 table1 上具有非常高的选择性时才会有所帮助。如果 table1 的严重部分(我推测超过 1-5%)将是连接的结果,则索引将不会有效。原因是在任何情况下您都会阅读所有页面/块。
Hive 可以确定一个表很小,并将其用作每个映射器上的内存哈希表,执行连接而不进行混洗。https://issues.apache.org/jira/browse/HIVE-195
您还可以从在 mapjoin 的情况下对表进行分区这一事实获得改进:
https ://issues.apache.org/jira/browse /HIVE-917
我不确定 Hive 是否能够使用分区信息进行公共连接。