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

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

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

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

注記

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

Amazon Redshift 外部スキーマは、外部データカタログ内の外部データベースを参照します。外部データベースは、Amazon Redshift、Amazon AthenaAWS Glue データカタログ、または Apache Hive メタストア (Amazon EMR など) で作成できます。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 ポリシー」を参照してください。

注記

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

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

次の例では、外部データベース spectrum_schema を使用して 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;

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

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

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

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

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

CREATE EXTERNAL SCHEMA ステートメントで、FROM HIVE METASTORE を指定し、メタストアの URI とポート番号を含めます。次の例では、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'

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

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 カタログマネージャを示しています。

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

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 で作成したテーブルも表示されます。

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 メタストアを登録します。

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 用の新しいコンソールが利用可能です。使用しているコンソールに基づき、[新しいコンソール] または [元のコンソール] の手順を選択します。新しいコンソールの手順はデフォルトで開いています。

    新しいコンソール

    セキュリティグループを表示するには、以下を実行します。

    1. AWS マネジメントコンソールにサインインし、Amazon Redshift コンソール (https://console.aws.amazon.com/redshift/) を開きます。

    2. ナビゲーションメニューで [CLUSTERS] を選択し、リストからクラスターを選択してその詳細を開きます。[Properties (プロパティ)] を選択し、[Network and security (ネットワークとセキュリティ)] セクションを確認します。

    3. [VPC security group (VPC セキュリティグループ)] で、セキュリティグループを探します。

    元のコンソール

    Amazon Redshift コンソールで、クラスターを選択します。[クラスターのプロパティ] グループでクラスターセキュリティグループを見つけます。

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

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

    1. Amazon EC2 ダッシュボードで [セキュリティグループ] を選択します。

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

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

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

    5. [タイプ] で [TCP] を選択します。

    6. [ソース] で [カスタム] を選択します。

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

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

    9. [タイプ] で [TCP] を選択します。

    10. [Port Range (ポート範囲)] に、「9083」と入力します。

      注記

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

    11. [ソース] で [カスタム] を選択します。

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

    13. [作成] を選択します。

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

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

    2. [クラスター]、[変更] の順に選択します。

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

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

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

    6. [EC2 インスタンス ID] 列のリンクを選択します。

    7. [アクション] では、[Networking (ネットワーク)]、[Change Security Groups (セキュリティグループの変更)] を選択します。

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

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