2017-06-27 35 views
2

在Hive中經歷了Skewed tables之後,我對將數據存儲到傾斜表的方式以及處理分區表的方式感到困惑。可有人明確說明具有顯着的例子的區別在何處這兩個概念Hive中的傾斜與分區

Skewed Tables and Partitioned Tables

一致,他們有什麼不同? 請做提供示例。

回答

1

傾斜和分區表的目的是相同的,以優化查詢。但是,他們的做法和適用的方式有點不同。

我們假設我們正在構建類似Strava的健身追蹤器,並且用戶數據會不斷髮送給我們。

  • Partitioning:這是很正常的日期和時間像/year=2017/month=10/day=12等這樣的任何日期和時間爲基礎的濾波器會非常快如分區此類型的數據。

SELECT col FROM table WHERE year=2017 AND month=10

  • Skewed table:它可以發生,一些用戶的不僅發送健身房鍛鍊,而且還行走步數計,地理位置,騎自行車,熱量消耗,睡眠,什麼不是。這些用戶非常少,但與普通用戶相比,他們發送的數據量非常大。所以,如果你想通過UserId查詢,這將是緩慢的:

SELECT col FROM table WHERE year=2017 AND month=10 AND userid=20

然而,傾斜表可以幫助在這裏。假設那些活躍的用戶是20, 23, 25。現在,您可以創建這樣存儲數據:

/year=2017/month=10/day=12/userid=20
/year=2017/month=10/day=12/userid=23
/year=2017/month=10/day=12/userid=27
/year=2017/month=10/day=12/userid=others

正如你所看到的,這些健身怪胎得到了他們自己的目錄。當您運行上述相同的查詢時(按用戶ID過濾),這將導致查詢速度加快。

還有一點,refer to this documentation