9

我正在学习蜂巢,遇到了歪斜的桌子。帮助我理解它。

Hive 中的倾斜表是什么?

我们如何创建倾斜的表?

它如何影响性能?

4

2 回答 2

17

Hive 中的倾斜表是什么?

倾斜表是一种特殊类型的表,其中经常出现的值(严重倾斜)被拆分到单独的文件中,其余值转到其他文件。

我们如何创建倾斜的表?

create table <T> (schema) skewed by (keys) on ('value1', 'value2') [STORED as DIRECTORIES];

例子 :

create table T (c1 string, c2 string) skewed by (c1) on ('x1')

它如何影响性能?

通过指定倾斜值,Hive 将自动将它们拆分为单独的文件,并在查询期间考虑这一事实,以便它可以跳过(或包含)整个文件,从而提高性能。

编辑 :

x1 实际上是 c1 列倾斜的值。您可以为多个列设置多个此类值。例如,

create table T (c1 string, c2 string) skewed by (c1) on ('x1', 'x2', 'x3')

进行这种设置的好处是,对于出现频率高于其他值的值,它们会被拆分到单独的文件中(如果我们使用 STORED AS DIRECTORIES 子句,则将其拆分为单独的目录)。执行引擎在查询执行期间使用此信息来提高处理效率。

于 2013-09-12T18:14:46.713 回答
3

在倾斜表中,将为具有许多记录的列值创建分区,并将其余数据移动到另一个分区。因此,将减少分区数量、映射器数量和中间文件数量。例如:在 100 位患者中,90 位患者有高血压,另外 10 位患者有发烧、感冒、癌症等。因此将为 90 位患者创建一个分区,为其他 10 位患者创建一个分区。我希望这能回答你的问题。

于 2018-01-22T12:57:35.347 回答