2017-06-27 7 views
2

ハイブでSkewed tablesを実行した後、スキュードテーブルのデータの格納方法と、パーティションテーブルの処理方法とが混同されました。誰かが明確にどここれら二つの概念スキューvsハイブのパーティション

Skewed Tables and Partitioned Tables

一致とどこが異なるのとマークされた例との違いを述べることはできますか? 例を挙げてください。

答えて

1

クエリを最適化するために、スキューされたテーブルとパーティションテーブルの両方の目的が同じです。しかし、彼らのやり方や時期は少し異なります。

私たちがStravaのようなフィットネストラッカーを構築しており、ユーザーのデータが絶えず私たちに送信されているとしましょう。

  • Partitioning:それは/year=2017/month=10/day=12などのように、日付と時刻で任意の日付と時間ベースのフィルタは、非常に高速になります例えば、この方法はこの種のデータを分割するために非常に正常です。
    • Skewed table

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

  • :それはユーザーの一部は、ジオロケーション、自転車に乗って、カロリー消費量、睡眠と何ではないだけのジムワークアウトを送信するだけでなく、手順がカウント歩いていないことが起こることができます。これらは非常に少数のユーザーですが、送信するデータの量は平均的なユーザーに比べて非常に多くなります。あなたは 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です。

関連する問題