CREATE EXTERNAL SCHEMA - Amazon Redshift

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

CREATE EXTERNAL SCHEMA

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

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

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

注記

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

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

Syntax

次の構文は、外部データカタログを使用してデータを参照するために使用する CREATE EXTERNAL SCHEMA コマンドを示しています。詳細については、「Querying external data using 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 データカタログ内で定義されていることを示します。

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

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

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

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

REDSHIFT から

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

データベース 'database_name'スキーマ'schema_name'

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

-schema_nameAmazon Redshift のスキーマを示します。デフォルトのschema_namepublic

データベース 'database_name'

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

[スキーマ 'schema_name']

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

サポートされている MySQL データベースエンジンへのフェデレーションクエリを設定する場合、SCHEMA を指定することはできません。

REGION 'aws-region'

外部データベースが Athena データカタログまたは AWS Glue データカタログ内で定義されている場合にデータベースが存在する 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 データカタログで定義されている場合、CATALOG_ROLE が指定されている場合を除き、IAM ロールには Athena へのアクセス権限が必要です。詳細については、「IAM policies for Amazon Redshift Spectrum」を参照してください。以下に ARN が 1 つの場合の IAM_ROLE パラメータ文字列の構文を示します。

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

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

この 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 ユーザーガイド

CATALOG_ROLE 'catalog-role-arn-string'

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

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

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

注記

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

以下に連鎖された 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 EXISTS を使用するにはCREATE_DATABASEデータカタログの権限を付与します。

使用に関する注意事項

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

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

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

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

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

Examples

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

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';

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

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'