メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012年12月1日)

Amazon Redshift Spectrum 用の外部スキーマの作成

外部テーブルは、CREATE EXTERNAL SCHEMA ステートメントを使用して作成した外部スキーマで作成する必要があります。

注記

一部のアプリケーションでは、データベーススキーマという用語をほぼ同じ意味で使用しています。Amazon Redshift では、用語としてスキーマを使用します。

Amazon Redshift 外部スキーマは、外部データカタログ内の外部データベースを参照します。Amazon Redshift の外部データベースは、Amazon Athenaで、または Amazon EMR などの Apache Hive メタストアで作成できます。Amazon Redshift で外部データベースを作成すると、データベースは Athena データカタログに格納されます。Hive メタストアにデータベースを作成するには、Hive アプリケーションでデータベースを作成する必要があります。

Amazon Redshift には、ユーザーに代わって Athena のデータカタログや Amazon S3 のデータファイルにアクセスするための認証が必要です。この認証を提供するため、最初に AWS Identity and Access Management (IAM) ロールを作成します。その後、ロールをクラスターにアタッチし、Amazon Redshift CREATE EXTERNAL SCHEMA ステートメントのロール用に Amazon リソースネーム (ARN) を提供します。認証の詳細については、「Amazon Redshift Spectrum 用の IAM ポリシー」を参照してください。

注記

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

外部スキーマの作成と同時に外部データベースを作成するには、CREATE EXTERNAL SCHEMA ステートメントで FROM DATA CATALOG を指定して CREATE EXTERNAL DATABASE 句を含めます。

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

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

Athena を使用してデータカタログを管理する場合は、Athena データベース名と Athena データカタログが置かれている AWS リージョンを指定します。

次の例では、Athena データカタログにあるデフォルトの sampledb データベースを使用して外部スキーマを作成します。

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

注記

リージョンパラメータは、Amazon S3 のデータファイルの場所ではなく、Athena データカタログが置かれているリージョンを参照します。

Athena データカタログの使用は次のように制限されています。

  • アカウントあたりのデータベース数の上限: 100.

  • データベースあたりのテーブル数の上限: 100。

  • テーブルあたりのパーティション数の上限: 20,000。

これらの上限は、AWS サポートにリクエストして拡大することができます。

制限を回避するため、Athena データカタログの代わりに Hive メタストアを使用します。

Amazon EMR などの Hive メタストアを使用してデータカタログを管理する場合、セキュリティグループはクラスター間でトラフィックを許可するように設定する必要があります。

CREATE EXTERNAL SCHEMA ステートメントで、FROM HIVE METASTORE を指定し、メタストアの URI とポート番号を含めます。次の例では、hive_db という名前の Hive メタストアデータベースを使って外部スキーマを作成します。

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

クラスターの外部スキーマを表示するには、PG_EXTERNAL_SCHEMA カタログテーブル、あるいは SVV_EXTERNAL_SCHEMAS ビューのクエリを実行します。次の例では、PG_EXTERNAL_SCHEMA と PG_NAMESPACE を結合する SVV_EXTERNAL_SCHEMAS クエリを実行します。

Copy
select * from svv_external_schemas

完全なコマンドの構文と例については、「CREATE EXTERNAL SCHEMA」を参照してください。

Amazon Redshift Spectrum 外部カタログの使用

Amazon Redshift Spectrum データベースと外部データテーブルのメタデータは、外部データカタログに保存されます。デフォルトでは、Redshift Spectrum メタデータは Athena データカタログに保存されます。Redshift Spectrum のデータベースとテーブルは、Athena コンソールで表示して管理できます。

Hive データ定義言語 (DDL)、Athena、またはHive メタストア (Amazon EMR など) を使用して、外部データベースと外部テーブルを作成することもできます。

注記

Amazon Redshift を使用して Redshift Spectrum 外部データベースと外部テーブルを作成および管理することをおすすめします。

Athena の Redshift Spectrum データベースの表示

CREATE EXTERNAL SCHEMA ステートメントの一部として CREATE EXTERNAL DATABASE IF NOT EXISTS 句を含めることで外部データベースを作成すると、外部データベースのメタデータは、Athena データカタログに保存されます。作成した外部テーブルのメタデータも、外部スキーマに修飾され、Athena データカタログに保存されます。

Athena は、それぞれサポートする AWS リージョン用にデータカタログを保持します。テーブルのメタデータを表示するには、Athena コンソールにログオンし、[Catalog Manager] を選択します。次の例は、米国西部 (オレゴン) リージョン 用の Athena Catalog Manager をしめしています。

Athena を使用して外部テーブルを作成および管理する場合は、CREATE EXTERNAL SCHEMA を使用してデータベースを登録します。たとえば、次のコマンドは rsampledb という名前の Athena データベースを登録します。

Copy
create external schema athena_sample from data catalog database 'sampledb' iam_role 'arn:aws:iam::123456789012:role/mySpectrumRole' region 'us-east-1';

SVV_EXTERNAL_TABLES システムビューにクエリを実行すると、Athena sampledb データベースにテーブルが表示されます。また、作成したテーブルは Amazon Redshift にも表示されます。

Copy
select * from svv_external_tables;
schemaname | tablename | location --------------+------------------+-------------------------------------------------------- athena_sample | elb_logs | s3://athena-examples/elb/plaintext athena_sample | lineitem_1t_csv | s3://myspectrum/tpch/1000/lineitem_csv athena_sample | lineitem_1t_part | s3://myspectrum/tpch/1000/lineitem_partition spectrum | sales | s3://awssampledbuswest2/tickit/spectrum/sales spectrum | sales_part | s3://awssampledbuswest2/tickit/spectrum/sales_part 

Apache Hive メタストアデータベースの登録

Apache Hive メタストアで外部テーブルを作成すると、CREATE EXTERNAL SCHEMA を使用してこれらのテーブルを Redshift Spectrum に登録できます。

CREATE EXTERNAL SCHEMA ステートメントで FROM HIVE METASTORE 句を指定し、Hive メタストア URI とポート番号を指定します。IAM ロールには Amazon S3 へのアクセス権限が必要ですが、Athena 権限は必要ありません。次の例では、Hive メタストアを登録します。

Copy
create external schema if not exists hive_schema from hive metastore database 'hive_database' uri 'ip-10-0-111-111.us-west-2.compute.internal' port 9083 iam_role 'arn:aws:iam::123456789012:role/mySpectrumRole';

Amazon Redshift を有効化して Amazon EMR クラスターにアクセスする

Hive メタストアが Amazon EMR にある場合、Amazon Redshift クラスターに Amazon EMR クラスターへのアクセスを許可する必要があります。そのためには、Amazon EC2 セキュリティグループを作成し、Amazon Redshift クラスターのセキュリティグループや Amazon EMR クラスターのセキュリティグループから EC2 セキュリティグループへのすべてのインバウンドトラフィックを許可します。その後、Amazon Redshift クラスターと Amazon EMR クラスターの両方に EC2 セキュリティを追加します。

Amazon Redshift クラスターに Amazon EMR クラスターへのアクセスを有効にするには

  1. Amazon Redshift で、クラスターのセキュリティグループ名をメモします。Amazon Redshift ダッシュボードでクラスターを選択します。[Cluster Properties] グループでクラスターセキュリティグループを見つけます。

  2. Amazon EMR で、EMR マスターノードセキュリティグループ名をメモします。

  3. Amazon EC2 セキュリティグループを作成または変更し、Amazon Redshift および Amazon EMR 間の接続を許可します。

    1. Amazon EC2 ダッシュボードで [Security Groups] を選択します。

    2. [Create Security Group] を選択します。

    3. VPC を使用する場合、Amazon Redshift と Amazon EMR の両方のクラスターが存在する VPC を選択します。

    4. インバウンドルールを追加します。

    5. [Type] で [TCP] を選択します。

    6. [Source] で [Custom] を選択します。

    7. Amazon Redshift セキュリティグループの名前を入力します。

    8. 別のインバウンドルールを追加します。

    9. [Type] で [TCP] を選択します。

    10. [ポート範囲] で [9083] と入力します。

      注記

      EMR HMS のデフォルトのポートは 9083 です。HMS が別のポートを使用する場合、そのポートをインバウンドルールと外部スキーマ定義に指定します。

    11. [Source] で [Custom] を選択します。

    12. Amazon EMR セキュリティグループの名前を入力します。

    13. [Create] を選択します。

  4. 前のステップで作成した Amazon EC2 セキュリティグループを Amazon Redshift クラスターと Amazon EMR クラスターに追加します。

    1. Amazon Redshift でクラスターを選択します。

    2. [Cluster]、[Modify] の順に選択します。

    3. [VPC Security Groups] でCRTL を押しながら新しいセキュリティグループ名を選択し、新しいセキュリティグループを追加します。

    4. Amazon EMR でクラスターを選択します。

    5. [Hardware] でマスターノードのリンクを選択します。

    6. [EC2 Instance ID] 列でリンクを選択します。

    7. [Actions]、[Networking]、[Change Security Groups] を選択します。

    8. 新しいセキュリティグループを選択します。

    9. [Assign Security Groups] を選択します。

このページの内容: