2017-07-09 6 views
0

Redshiftでこれをビルドする機能はありますか?インターリーブされたキーはこれを何らかの形で緩和します。 化合物による並べ替えとインターリーブされたものがある場合は、これが理想的です。Redshiftでパーティションビュー(ユニオンすべての複数のテーブル)を使用してテーブルごとのパーティション

パーティションビューを使用することには欠点がありますか?私は以下のように意味します。

https://sqlsunday.com/2014/08/31/partitioned-views/

しかし代わりの日付を使用して、私は他のフィールド型でパーティションを作成します。例えば商品の種類または国。

ので、ビューはProd_type、国として 'USA' として

を選択し、 '1' * fact_Sales_1_USA 組合からのすべての 選択されます '2' の国としてProd_type、 '英国' として、* からfact_Sales_2_UK

このようにすると、クエリがテーブル全体を読み取ることができなくなり、特定の商品タイプと地域に制限されます。

同様の名前の複数のテーブルを選択する機能もあります。

したがって、上記の表示の代わりに これは単なるですが、これはパーティション化された列をテーブルに含める必要があります。

選択欠点のfact_から* *

一つは、もう少し複雑なデータの更新、私たちのコースですか?

上記のフィールドを使用しないクエリの速度が低下しますか?

答えて

0

Redshiftには分割ビューの機能は組み込まれていません。その開発者は、ソートとdistの主要なモデルとエンコーディングは、パフォーマンスの問題のほとんどを処理することができると信じています。特定のソリューションは、データの性質と一般的なクエリに大きく依存しています。

特定の例では、製品タイプ/国に基づいて複数のテーブルを持ち、他の列でソートしても、製品タイプ/国がソートキーにない場合、クエリプランナーはすべてのテーブルをスキャンできません。 AFAIK Redshiftはソート/ディストリビューションキーに参加していない列の値分布には無関係ですので、必要な値が単なる表として設計されていても、ユニオンに参加する各テーブルをスキャンします。商品タイプの国で頻繁にフィルタリングする場合は、複合型のソートキー(product_type,country,timestamp)を作成します。このように、Redshiftは検索条件を満たすデータのブロックのみをスキャンします。商品タイプまたは国で頻繁にフィルタリングする場合は、同じ列にインターリーブされたソートキーを作成します。上記の複合ソートキーを国(第2列)でフィルタリングすると、キーは使用されないため、インターリーブドキーがより優れています。

問題が緩和されない場合は、データが非常に大きく、Redshiftの上にこのロジックを処理するアプリケーションを構築する余裕があることを意味します(別の製品タイプ/フィルタ値に基づいてこれらの特定のテーブルを照会する動的SQL)。

類似の名前の表から選択する機能はありません。Postgresでは、システムテーブルを照会し、照会結果に基づいてSQLを生成し、直ちに実行することができますが、Redshiftは動的SQLをサポートしていません。解決策は上です(右のソートキーまたはRedshiftの上のアプリケーション)。

関連する問題