CREATE EXTERNAL SCHEMA - Amazon Redshift

CREATE EXTERNAL SCHEMA

現在のデータベースに新しい外部スキーマを作成します。この外部スキーマを使用して、Amazon RDS for PostgreSQL または Amazon Aurora PostgreSQL 互換エディションデータベースに接続できます。また、AWS Glue や Athena などの外部データカタログ内のデータベース、あるいは Amazon EMR などの Apache Hive メタストアにあるデータベースを参照する、外部スキーマを作成することもできます。

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

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

注記

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

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

Syntax

次の構文は、外部データカタログを使用してデータを参照するために使用する CREATE EXTERNAL SCHEMA コマンドを示しています。詳細については、「Amazon Redshift Spectrum を使用した外部データのクエリ」を参照してください。

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

次の構文は、RDS POSTGRES または Aurora PostgreSQL への横串検索を使用してデータを参照するために使用する CREATE EXTERNAL SCHEMA コマンドを示しています。詳細については、「Amazon Redshift での横串検索を使用したデータのクエリの実行」を参照してください。

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM POSTGRES
DATABASE 'federated_database_name' [SCHEMA 'schema_name']
URI 'hostname' [ PORT port_number ] 
IAM_ROLE 'iam-role-arn-string'
SECRET_ARN 'ssm-secret-arn'             
以下は、プレビューリリースにある Amazon Redshift 用 MySQL 機能への横串検索のプレリリースドキュメントです。ドキュメントと機能はどちらも変更されることがあります。この特徴は、本番環境ではなくテストクラスターでのみ使用することをお勧めします。プレビューの契約条件については、AWS のサービス条件の「ベータサービスへの参加」を参照してください。

次の構文は、RDS MySQL または Aurora MySQL への横串検索を使用してデータを参照するために使用する CREATE EXTERNAL SCHEMA コマンドを示しています。詳細については、「Amazon Redshift での横串検索を使用したデータのクエリの実行」を参照してください。

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM MYSQL
DATABASE 'federated_database_name' 
URI 'hostname' [ PORT port_number ]
IAM_ROLE 'iam-role-arn-string'
SECRET_ARN 'ssm-secret-arn'             

次の構文は、クロスデータベースクエリを使用してデータを参照するために使用する CREATE EXTERNAL SCHEMA コマンドを示しています。

CREATE EXTERNAL SCHEMA local_schema_name
FROM  REDSHIFT
DATABASE 'redshift_database_name' SCHEMA 'redshift_schema_name'

Parameters

IF NOT EXISTS

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

local_schema_name

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

FROM [ DATA CATALOG ] | HIVE METASTORE

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

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

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

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

POSTGRES は、外部データベースが RDS PostgreSQL または Aurora PostgreSQL で定義されていることを示します。

(プレビュー) MYSQL は、外部データベースが RDS MySQL または Aurora MySQL で定義されていることを示します。

FROM REDSHIFT

データベースが Amazon Redshift にあることを示すキーワード。

DATABASE 'redshift_database_name' SCHEMA 'redshift_schema_name'

Amazon Redshift データベースの名前。

redshift_schema_name は、Amazon Redshift のスキーマを示します。デフォルトの redshift_schema_namepublic です。

DATABASE 'federated_database_name'

サポートされている PostgreSQL または MySQL データベースエンジンの外部データベースの名前を示すキーワード。

[SCHEMA 'schema_name']

schema_name は、サポートされている PostgreSQL データベースエンジンのスキーマを示します。デフォルトの schema_namepublic です。

サポートされている MySQL データベースエンジンへの横串検索を設定する場合、SCHEMA を指定することはできません。

REGION 'aws-region'

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

URI 'hive_metastore_uri' [ PORT port_number ]

サポートされている PostgreSQL または MySQL データベースエンジンのホスト名 URI と port_number。hostname は、レプリカセットのヘッドノードです。エンドポイントは、Amazon Redshift クラスターから到達可能 (ルーティング可能) である必要があります。デフォルトの port_number は 5432 です。

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

URI にはプロトコル仕様 ("http://") が含まれていません。有効な URI の例: uri '172.10.10.10'

注記

サポートされている PostgreSQL または MySQL データベースエンジンは、Amazon Redshift クラスターと同じ VPC 内に存在する必要があります。Amazon Redshift と RDS PostgreSQL または Aurora PostgreSQL を関連付けるセキュリティグループを作成します。

IAM_ROLE 'iam-role-arn-string'

クラスターが認証と認可に使用する IAM ロールの Amazon リソースネーム (ARN)。少なくとも、IAM ロールには、Amazon S3 バケットで LIST 操作を実行してアクセスを受ける権限と、バケットに含まれる Amazon S3 オブジェクトで GET 操作を実行する権限が必要です。外部データベースが Amazon Athena データカタログまたは AWS Glue Data Catalog内で定義されている場合は、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 ロールの連鎖」を参照してください。

この IAM ロールに次のような IAM アクセス許可ポリシーをアタッチします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AccessSecret", "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword", "secretsmanager:ListSecrets" ], "Resource": "*" } ] }

フェデレーションクエリで使用する IAM ロールを作成するステップについては、「フェデレーテッドクエリを使用するためのシークレットと 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>'
SECRET_ARN 'ssm-secret-arn'

AWS Secrets Manager を使用して作成された、(サポート対象の) PostgreSQL または MySQL データベースエンジンシークレットの、Amazon リソースネーム (ARN)。シークレットの ARN を作成および取得する方法については、AWS Secrets Manager ユーザーガイドの「シークレットを作成する」および「Retrieving the Secret Value Secret」を参照してください。

CATALOG_ROLE 'catalog-role-arn-string'

クラスターがデータカタログの認証と認可に使用する IAM ロールの ARN。CATALOG_ROLE は Amazon Redshift を指定せず、指定された IAM_ROLE を使用します。カタログロールには、AWS Glue あるいは Athena のデータカタログへのアクセス許可が必要です。詳細については、「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 と併用することはできません。

AWS Lake Formation が有効になっているデータカタログで、CREATE EXTERNAL DATABASE IF NOT EXISTS を使用するには、データカタログに対し CREATE_DATABASE を実行する許可が必要です。

使用に関する注意事項

Athena データカタログを使用する場合の制限については、AWS 全般のリファレンスの「Athena Limits」を参照してください。

AWS Glue Data Catalogを使用する場合の制限については、AWS 全般のリファレンスの「AWS Glue Limits」を参照してください。

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

スキーマの登録を解除するには、DROP SCHEMA コマンドを使用します。

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

Examples

次の例では、米国西部 (オレゴン) リージョンの 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;

次の例では、Aurora PostgreSQL データベースを参照する外部スキーマを作成します。

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] myRedshiftSchema FROM POSTGRES DATABASE 'my_aurora_db' SCHEMA 'my_aurora_schema' URI 'endpoint to aurora hostname' PORT 5432 IAM_ROLE 'arn:aws:iam::123456789012:role/MyAuroraRole' SECRET_ARN 'arn:aws:secretsmanager:us-east-2:123456789012:secret:development/MyTestDatabase-AbCdEf'

次の例では、コンシューマクラスターにインポートされた Sales_db を参照する外部スキーマを作成します。

CREATE EXTERNAL SCHEMA Sales_schema FROM REDSHIFT DATABASE 'Sales_db' SCHEMA 'public';

次の例では、Aurora MySQL データベースを参照する外部スキーマを作成します。

CREATE EXTERNAL SCHEMA [IF NOT EXISTS] myRedshiftSchema FROM MYSQL DATABASE 'my_aurora_db' URI 'endpoint to aurora hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/MyAuroraRole' SECRET_ARN 'arn:aws:secretsmanager:us-east-2:123456789012:secret:development/MyTestDatabase-AbCdEf'