Hive中的偏斜表

11

我正在学习Hive,并遇到了“倾斜表(skewed tables)”的问题。帮我理解一下。

什么是Hive中的倾斜表?

我们如何创建倾斜表?

它会如何影响性能?

2个回答

18

什么是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子句,则为单独的目录)。执行引擎在查询执行期间使用此信息以使处理更加高效。

有没有一个真实的具体例子,可以更好地说明正在发生的事情? - dfrankow
2
在你的例子中,x1是什么意思? - d34th4ck3r
@d34th4ck3r 很抱歉回复晚了。在众多事务中,我不知怎么错过了这个。我相信你现在已经弄清楚了。但以防万一,我已经编辑了我的答案。如果还有不清楚的地方,请随时告诉我。 - Tariq
@dfrankow 对你也道歉。如果你仍然需要一个具体的例子来更好地理解这个问题,请告诉我。我很乐意提供! - Tariq
2
@CodingOwl 你应该从你的用户名中删除“Coding”。总有一种有尊严的方式来表达你的观点。我一直试图提供尽可能详细的答案,但有时由于时间紧迫,我倾向于从源代码中复制东西,我认为这没有任何害处。如果你能够提供一些帮助而不是对我的技术能力进行抱怨,那么这将更有用。无论如何,我不认为我需要在像你这样的人面前证明自己。祝你在软技能方面好运! - Tariq
@Tariq,抱歉兄弟。我可能在这里写下了一些让我感到沮丧的东西。再次道歉。 :) 祝你有美好的一天。 - CodingOwl

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

分区会自动创建吗? - luckyluke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接