2017-03-03 10 views
1

Amazon Redshiftでデータウェアハウスを実装する予定ですが、Redshiftでスキーマを正しく設計する方法についていくつかの提案をお願いします。Amazon Redshiftスキーマデザイン

私はRedshiftを完全に新しくしています。過去に私が「伝統的な」データウェアハウスで作業していたとき、私は「ソース」、「ステージ」、「ファイナル」などのスキーマを作成して、データがどの段階にあるかに応じてすべてのデータベースオブジェクトをグループ化していました。

デフォルトでは、RedshiftのデータベースにはPUBLICという名前の単一のスキーマがあります。だから、Redshiftで働いていた人たちに私の質問は、私が上記で概説したアプローチはここに適用されますか?そうでなければ、私はいくつかの提案を愛するだろう。

ありがとうございました。

答えて

4

、私は自信を持って、次の点を主張することができます

  1. 複数のスキーマ:あなたは、複数のスキーマを作成し、それに応じてテーブルを作成する必要があります。スケールするときは、正確にテーブルがどこにあるのかを正確にピンポイントすることが容易になります。たとえば、productionaggregatesroughという3つのスキーマがあります。さて、テーブルproductionには、変更される予定のないテーブル(主にOLTPデータ)が含まれていることがわかりました。たとえば、user, order, transactionsテーブルです。テーブルaggregatesは、number of orders placed per user per day per categoryのような生のテーブルに基づいて集計されたデータを持っています。最後に、roughには、ビジネスロジックを保持していないが一時的な作業に必要なテーブルが含まれます。ムービーのジャンルをチェックして、1Lakhユーザーのリストを確認してくださいファイル。 roughスキーマにテーブルを作成し、操作を実行してテーブルを削除します。ここでは、テーブルが未加工、集約、または一時的なテーブルのいずれであるかに基づいて、テーブルがどこにあるかを非常に明確に知ることができます。

  2. 公開スキーマ:それは存在しません。スキーマ名が前に付いていない表がそこに作成されます。重要なデータをそこに保存する必要はありません。

  3. クロススキーマ結合:ここには停止がありません。必要な数のスキーマから多くの表に参加できます。実際、すべての情報を単一の表に保管するのではなく、ディメンション表を作成して後でPKに結合することが望ましいです。

スキーマと基礎となるテーブル構造を設計する際に、ある程度の時間を費やしてください。拡張すると、アクセス制御の点でより分かりやすくなります。私がいくつかの明白な点を見逃しているかどうか教えてください。

2

Redshiftクラスタには複数のデータベースを置くことができますが、私はそれに固執します。スキーマ(本質的に名前空間)は物事を分ける良い方法です。スキーマは問合せできますが、データベースは問い合せることはできません。

パブリックスキーマを特定のアクセス許可の管理として使用することは、難しい場合があります(たとえば、誰かがパブリックにアクセスすることを拒否して、たとえば表を作成できないようにすることは容易です)。

時間がある場合は、最善の結果を得るために、権限システムの前面を確認してください。あなたはcreate groups that have access to schemas or tablesになり、グループからユーザーを追加/削除して、できることを制御します。一度それを行うと、管理がかなり簡単になります。赤方偏移での作業中に私の経験では

1

他の応答に加えて、スキーマのパフォーマンスを向上させるためのいくつかの提案があります。

まず:COPYコマンド

を使用して自動圧縮符号化方式は、COPYコマンドを使用してAmazonで赤方偏移のパフォーマンスを向上させます。 Redshiftデータベースにデータを取得します。 COPYコマンドは十分に巧妙です。アップロードされるデータに最適なエンコーディング設定が自動的に選択されます。あなたはそれについて考える必要はありません。ただし、最初のデータを空のテーブルにアップロードする場合にのみ実行します。

したがって、データを初めてアップロードするときに重要なデータセットを使用するようにしてください。Redshiftは、列エンコーディングを最適な方法で設定することができます。数行のテストデータをアップロードすると、Redshiftは実際の作業負荷を処理するために圧縮を最適に最適化する方法を混乱させます。

第二:使用ベストディストリビューションスタイルとキー

配信スタイルは、データをノードに分散する方法を決定します。テーブルレベルで流通スタイルを適用すると、Redshiftはテーブルとキーをどのように配布するかを指示します。したがって、Redshiftを使用してクエリのパフォーマンスを向上させるには、配信スタイルを指定する方法が重要です。選択したスタイルは、データストレージとクラスタの要件に影響を与える可能性があります。また、COPYコマンドの実行にかかる時間も影響を受けます。

ディメンションが小さいすべてのテーブルにディストリビューションスタイルを設定することをお勧めします。大きなディメンションの場合は、ディメンションと関連するファクトの両方をその結合列に配布します。 2番目の大きな次元を最適化するには、ストレージヒットを取り、ALLを配布します。事実に次元の列を設計することさえできます。

サード:

指定されている場合は赤方偏移データベースはソート・キー列の配列を持つテーブルにデータを保持するキーベストソートを使用してください。それは各パーティションでソートされているためです。各クラスタノードは事前定義された順序でパーティションを維持します。 Redshiftスキーマの設計時には、予算への影響も考慮してください。Redshiftは、格納されたデータ量とノード数によってpricedです。

ソートキーは、AmazonのRedshiftパフォーマンスを大幅に最適化します。あなたは多くの方法でそれを行うことができます。まず、データフィルタリングを使用します。 sort-key-columnのwhere-clauseフィルタを使用すると、データブロック全体がスキップされます。 Redshiftはデータをブロック単位で保存するためです。各ブロックヘッダーには、最小ソートキー値と最大ソートキー値が記録されます。その範囲外にフィルタリングすると、ブロック全体がスキップされることがあります。

また、ジョイントキーでソートされた2つのテーブルを結合する場合、データは一致する順序で読み込まれます。また、別々のソートステップを使用せずにマージ結合することもできます。大規模なファクトテーブルへの大きな次元の結合は、どちらもハッシュテーブルに収まらないため、このメソッドでは簡単になります。

関連する問題