web-dev-qa-db-ja.com

Amazon Redshiftでインデックスを作成する方法

Amazon Redshiftでインデックスを作成しようとしていますが、エラーが発生しました

create index on session_log(UserId);

UserIdは整数フィールドです。

22
user3600910

Redshiftテーブルで(名前付きの)インデックスを作成しようとした場合:

create index IX1 on "SomeTable"("UserId");

エラーが表示されます

SQLコマンドの実行中にエラーが発生しました:「SomeTable」(「UserId」)でインデックスIX1を作成エラー:SQLコマンド「SomeTable」(「UserId」)でインデックスIX1を作成」はRedshiftテーブルではサポートされていません。

これは、他の データウェアハウス と同様に、Redshiftは カラムストレージ を使用し、その結果、多くのインデックス作成手法(他のRDBMSで使用される非クラスター化インデックスの追加)は適用されません。

ただし、テーブルごとに単一の ソートキー を提供するオプションがあり、 分散キー を使用してパフォーマンスに影響を与えることもできます。データを分割し、各列に適切な 圧縮エンコードを選択して 、ストレージとI/Oのオーバーヘッドを最小限に抑えます。

たとえば、あなたの場合、UserIdをソートキーとして使用することを選択できます。

create table if not exists "SomeTable"
(
    "UserId" int,
    "Name" text
)
sortkey("UserId");

いくつかのプライマー likethese を読みたいかもしれません

50
StuartLC

Redshiftは主キーの作成を許可します

create table user (
id int ,
phone_number int,
primary key(id))

しかし、Redshiftはこの制約を強制しないため、主キーは重複する値を受け入れます。

その問題に関する添付記事

http://www.sqlhaven.com/Amazon-redshift-what-you-need-to-think-before-defining-primary-key/

3
user3600910

Define Constraints が可能ですが、Amazonが言うように、情報提供のみです:Amazon Redshiftによって強制されません。それにもかかわらず、主キーと外部キーは計画のヒントとして使用され、ETLプロセスまたはアプリケーションの他のプロセスがそれらの整合性を強制する場合、それらを宣言する必要があります。

挿入モード(REPLACE_EXISTING)を使用したパイプラインなどの一部のサービスでは、テーブルで定義された主キーが必要です。

他のパフォーマンスのために、スチュアートの応答は正しいです。

2
Ricardo Edo