Amazon Redshift
データベース開発者ガイド

CREATE EXTERNAL SCHEMA

現在のデータベースに新しい外部スキーマを作成します。このスキーマの所有者は CREATE EXTERNAL SCHEMA コマンドの発行者です。外部スキーマの所有者を移行するには、「ALTER SCHEMA」を使用して所有者を変更します。GRANT コマンドを使用し、スキーマに他のユーザーやグループへのアクセス権を付与します。

外部テーブルのアクセス権限に対して、GRANT または REVOKE コマンドを使用することはできません。代わりに、外部スキーマに対するアクセス権限の付与または取り消しを実行します。

Amazon Redshift 外部スキーマは、AWS Glue または Amazon Athena の外部 Data Catalog のデータベース、あるいは Apache Hive メタストア (Amazon EMR など) のデータベースを参照します。

注記

現在、Athena データカタログに Redshift Spectrum 外部テーブルがある場合は、Athena データカタログを AWS Glue データカタログ に移行できます。Redshift Spectrum で AWS Glue データカタログを使用するには、IAM ポリシーの変更が必要になる場合があります。詳細については、Athena ユーザーガイドの「AWS Glue データカタログへのアップグレード」を参照してください。

外部テーブルはすべて、外部スキーマで作成されている必要があります。外部スキーマでローカルテーブルを作成することはできません。詳細については、「CREATE EXTERNAL TABLE」を参照してください。

外部スキーマは検索パスをサポートしていません。

外部スキーマの詳細を表示するには、SVV_EXTERNAL_SCHEMAS システムビューにクエリを実行します。

構文

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name
FROM { [ DATA CATALOG ] |  HIVE METASTORE }
DATABASE 'database_name'
[ REGION 'aws-region' ]
[ URI 'hive_metastore_uri' [ PORT port_number ] ]
IAM_ROLE 'iam-role-arn-string' ] 
[ CATALOG_ROLE 'catalog-role-arn-string' ] 
[ CREATE EXTERNAL DATABASE IF NOT EXISTS ]

パラメータ

IF NOT EXISTS

指定されたスキーマが既に存在する場合、コマンドはエラーで終了するのではなく、何も変更しないで、スキーマが存在するというメッセージを返すことを示す句。この句は、CREATE EXTERNAL SCHEMA で既存のスキーマを作成しようとしてもスクリプトが失敗しないため、スクリプトを作成する際に便利です。

schema_name

新しい外部スキーマの名前。有効な名前の詳細については、「名前と識別子」を参照してください。

FROM [ DATA CATALOG ] | HIVE METASTORE

外部データベースの場所を示すキーワード。

DATA CATALOG は、外部データベースが Athena データカタログまたは AWS Glue データカタログ 内で定義されていることを示します。

外部データベースが別の AWS リージョンの外部 Data Catalog で定義されている場合は、REGION パラメータが必要です。DATA CATALOG はデフォルトです。

HIVE METASTORE は、外部データベースが Hive メタストアで定義されていることを示します。HIVE METASTORE が指定されている場合は、URI が必要です。

REGION 'aws-region'

外部データベースが Athena データカタログまたは AWS Glue データカタログ 内で定義されている場合にデータベースが存在する AWS リージョン。このパラメータは、データベースが外部 Data Catalog 内で定義されている場合に必要です。

URI 'hive_metastore_uri' [ PORT port_number ]

データベースが Hive メタストアにある場合は、URI を指定し、オプションでメタストアのポート番号を指定します。デフォルトのポート番号は 9083 です。

IAM_ROLE 'iam-role-arn-string'

クラスターが認証と許可に使用する IAM ロールの Amazon リソースネーム (ARN)。少なくとも、IAM ロールには、Amazon S3 バケットで LIST 操作を実行してアクセスを受ける権限と、バケットに含まれる Amazon S3 オブジェクトで GET 操作を実行する権限が必要です。外部データベースが Amazon Athena データカタログまたは AWS Glue データカタログ 内で定義されている場合、CATALOG_ROLE が指定されている場合を除き、IAM ロールには Athena へのアクセス権限が必要です。詳細については、「Amazon Redshift Spectrum 用の IAM ポリシー」を参照してください。以下に ARN が 1 つの場合の IAM_ROLE パラメータ文字列の構文を示します。

IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'

ロールを連鎖することで、クラスターは別のアカウントに属している可能性がある別の IAM ロールを引き受けることができます。最大10 個までのロールを連鎖できます。詳細については、「Amazon Redshift Spectrum で IAM ロールを連鎖する」を参照してください。

注記

連鎖したロールのリストは、空白を含むことができません。

以下に連鎖された 3 つのロールの構文を示します。

IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
CATALOG_ROLE 'catalog-role-arn-string'

クラスターが認証と認可に使用する IAM ロールの Amazon リソースネーム (ARN)。CATALOG_ROLE は Amazon Redshift を指定せず、指定された IAM_ROLE を使用します。カタログロールには、AWS Glue または Athena の Data Catalog へのアクセス許可が必要です。詳細については、「Amazon Redshift Spectrum 用の IAM ポリシー」を参照してください。以下に ARN が 1 つの場合の CATALOG_ROLE パラメータ文字列の構文を示します。

CATALOG_ROLE 'arn:aws:iam::<aws-account-id>:role/<catalog-role>'

ロールを連鎖することで、クラスターは別のアカウントに属している可能性がある別の IAM ロールを引き受けることができます。最大10 個までのロールを連鎖できます。詳細については、「Amazon Redshift Spectrum で IAM ロールを連鎖する」を参照してください。

注記

連鎖したロールのリストは、空白を含むことができません。

以下に連鎖された 3 つのロールの構文を示します。

CATALOG_ROLE 'arn:aws:iam::<aws-account-id>:role/<catalog-role-1-name>,arn:aws:iam::<aws-account-id>:role/<catalog-role-2-name>,arn:aws:iam::<aws-account-id>:role/<catalog-role-3-name>'
CREATE EXTERNAL DATABASE IF NOT EXISTS

指定の外部データベースが存在しない場合に、DATABASE 引数で指定された名前で外部データベースを作成する句。指定の外部データベースが存在する場合、コマンドは変更を加えません。この場合、コマンドは、エラーで終了せず、外部データが存在することを示すメッセージを返します。

注記

CREATE EXTERNAL DATABASE IF NOT EXISTS を HIVE METASTORE と併用することはできません。

使用に関する注意事項

Athena データカタログを使用する場合の制限については、AWS General Referenceの「Athena の制限」を参照してください。

AWS Glue データカタログ を使用する場合の制限については、AWS General Referenceの「AWS Glue の制限」を参照してください 。

これらの制限は、Hive メタストアには適用されません。

次の例では、米国西部 (オレゴン) リージョン の sampledb という名前の Athena データカタログのデータベースを使用して外部スキーマを作成します。

create external schema spectrum_schema from data catalog database 'sampledb' region 'us-west-2' iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole';

次の例は、外部スキーマを作成し、spectrum_db という名前で新しい外部データベースを作成します。

create external schema spectrum_schema from data catalog database 'spectrum_db' iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole' create external database if not exists;

次の例では、hive_db という名前の Hive メタストアデータベースを使って外部スキーマを作成します。

create external schema hive_schema from hive metastore database 'hive_db' uri '172.10.10.10' port 99 iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole';

次の連鎖ロールの例では、Amazon S3 へのアクセスにロール myS3Role を使用し、データカタログへのアクセスには myAthenaRole を使用します。詳細については、「Amazon Redshift Spectrum で IAM ロールを連鎖する」を参照してください。

create external schema spectrum_schema from data catalog database 'spectrum_db' iam_role 'arn:aws:iam::123456789012:role/myRedshiftRole,arn:aws:iam::123456789012:role/myS3Role' catalog_role 'arn:aws:iam::123456789012:role/myAthenaRole' create external database if not exists;