ステップ 3: 外部スキーマと外部テーブルを作成する
外部スキーマに外部テーブルを作成します。外部スキーマは、外部データカタログのデータベースを参照し、ユーザーに代わってクラスターの Amazon S3 へのアクセスを許可する IAM ロール ARN を提供します。外部データベースは、Amazon Athena データカタログ、AWS Glue Data Catalog、または Amazon EMR などの Apache Hive メタストアに作成できます。この例では、外部スキーマ Amazon Redshift 作成時に Amazon Athena データカタログに外部データベースを作成します。詳細については、「Amazon Redshift Spectrum 用の外部スキーマの作成」を参照してください。
外部スキーマと外部テーブルを作成するには
-
外部スキーマを作成するには、次のコマンドの IAM ロール ARN を、ステップ 1 で作成したロール ARN で置き換えます。次に、SQL クライアントでコマンドを実行します。
create external schema myspectrum_schema from data catalog database 'myspectrum_db' iam_role 'arn:aws:iam::123456789012:role/myspectrum_role' create external database if not exists;
-
外部テーブルを作成するには、次の CREATE EXTERNAL TABLE コマンドを実行します。
注記
クラスターと Amazon S3 バケットは、同じ AWS リージョン に存在する必要があります。この CREATE EXTERNAL TABLE コマンドの例では、サンプルデータのある Amazon S3 バケットは米国東部 (バージニア北部) AWS リージョン にあります。ソースデータを表示するには、
sales_ts.000
ファイルをダウンロードします。 この例を変更して、別の AWS リージョン で実行します。目的の AWS リージョン で Amazon S3 バケットを作成します。Amazon S3 コピーコマンドで販売データをコピーします。次に、この例の
CREATE EXTERNAL TABLE
コマンドにあるロケーションオプションをバケットに更新します。aws s3 cp s3://redshift-downloads/tickit/spectrum/sales/ s3://
bucket-name
/tickit/spectrum/sales/ --copy-props none --recursiveAmazon S3 のコピーコマンドの出力により、ファイルが希望する AWS リージョン の
bucket-name
にコピーされたことが確認されます。copy: s3://redshift-downloads/tickit/spectrum/sales/sales_ts.000 to s3://
bucket-name
/tickit/spectrum/sales/sales_ts.000create external table myspectrum_schema.sales( salesid integer, listid integer, sellerid integer, buyerid integer, eventid integer, dateid smallint, qtysold smallint, pricepaid decimal(8,2), commission decimal(8,2), saletime timestamp) row format delimited fields terminated by '\t' stored as textfile location 's3://redshift-downloads/tickit/spectrum/sales/' table properties ('numRows'='172000');