Amazon Redshiftでインデックスを作成しようとしていますが、エラーが発生しました
create index on session_log(UserId);
UserId
は整数フィールドです。
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");
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/
Define Constraints が可能ですが、Amazonが言うように、情報提供のみです:Amazon Redshiftによって強制されません。それにもかかわらず、主キーと外部キーは計画のヒントとして使用され、ETLプロセスまたはアプリケーションの他のプロセスがそれらの整合性を強制する場合、それらを宣言する必要があります。
挿入モード(REPLACE_EXISTING)を使用したパイプラインなどの一部のサービスでは、テーブルで定義された主キーが必要です。
他のパフォーマンスのために、スチュアートの応答は正しいです。