データ共有へのデータレイクテーブルの追加
データ共有では、データプロデューサーは、スキーマやテーブルなどのきめ細かなデータベースオブジェクトを、同じまたは異なる AWS アカウントのコンシューマーと安全に共有できます。プロデューサーは、リージョン間でオブジェクトを共有することもできます。このトピックでは、データレイク、特に AWS Glue データカタログから、データ共有にオブジェクトを追加する方法について説明します。ここでは、次の 2 つのユースケースを対象としています。
-
データレイクからテーブルを参照するデータ共有に遅延バインディングビューを追加する – Lake Formation などの外部ソースデータに対するアクセス許可の定義などの事前設定がすでに完了している可能性があるため、これはコンシューマーにとって便利です。さらに、データ共有に追加されたビューは、データレイクのテーブルを Redshift ネイティブテーブルと結合できるという利点もあります。
-
外部スキーマからデータ共有にテーブルを直接追加する – これにより、コンシューマーは、追加のレイヤーやロジックなしでデータレイクからのオブジェクトを利用できます。コンシューマーは、テーブルをクエリするか、コンシューマーのテーブルに結合できます。
これらのケースは、CREATE EXTERNAL SCHEMA を使用して Redshift の AWS データカタログからテーブルを参照した後に適用されます。AWS データカタログのすべてのテーブルをソースとすることができます。
注記
データ共有に追加するデータレイクテーブルには、Lake Formation に登録されたテーブルと AWS Glue データカタログテーブルを含めることができます。
外部スキーマと外部テーブルの作成
以下のセクションのデータ共有に追加する外部スキーマと外部テーブルを作成します。これらは事前ステップです。すでにこれらのステップを完了している場合、スキップすることができます。
-
プロデューサーで、Amazon S3 に保存されているデータレイクデータを参照する外部スキーマを作成します。外部スキーマは AWS Glue データカタログを参照します。サンプル内のロールとリージョンの例は次のとおりです。
CREATE EXTERNAL SCHEMA external_schema_name FROM DATA CATALOG DATABASE 'glue_database_name' IAM_ROLE 'arn:aws:iam::123456789012:role/sample-role' REGION 'us-east-1';
-
外部スキーマにデータレイクテーブルを作成します。
CREATE EXTERNAL TABLE external_schema_name.sales( salesid INTEGER, sellerid INTEGER, buyerid INTEGER, saledate DATE, pricepaid DECIMAL(8,2)) ROW FORMAT delimited FIELDS TERMINATED BY '\t' STORED AS textfile LOCATION 's3://redshift-downloads/tickit/spectrum/sales/';
サンプルは
LOCATION
を含みます。s3://{bucket_name}/{folder}/
の形式でフォルダを指定する必要があります。フォルダの長さは 1 文字以上である必要があります。オプションで、サブフォルダを含めることができます。データレイクにテーブルを作成する他の例については、CREATE EXTERNAL TABLE の「例」を参照してください。注記
共有は、プロデューサーの IAM ロールが SELECT アクセスを持つテーブルでのみサポートされます。
データレイクテーブルを参照する遅延バインディングビューをデータ共有に追加する
AWS データカタログから外部スキーマに基づいてテーブルを作成し、データ共有に追加する最も一般的な方法は、作成したテーブルを参照する Redshift 遅延バインディングビューを追加することです。これには、データレイクからのデータが含まれます。以下にそのステップを示します。
-
作成済みの外部テーブルを参照する遅延バインディングビューを作成します。
CREATE VIEW lbv AS select * from external_schema_name.sales, other_schema.t1 WITH NO SCHEMA BINDING;
-
データ共有にビュースキーマを追加します。これは、遅延バインディングビューを含むローカルスキーマです。
ALTER DATASHARE dsx_datashare ADD SCHEMA public;
-
遅延バインディングビューによって参照されるテーブルを含むスキーマをデータ共有に追加します。スキーマの追加は、スキーマにローカルデータベースオブジェクトまたはデータレイクからのオブジェクトが含まれているかどうかにかかわらず、データ共有に追加されるビューで参照されるすべてのベーステーブルに必要です。遅延バインディングビューを追加する前に、このスキーマを追加する必要があることに注意してください。
ALTER DATASHARE dsx_datashare ADD SCHEMA external_schema_name; ALTER DATASHARE dsx_datashare ADD SCHEMA other_schema;
-
SQL コマンドを使用して、データ共有にビューを追加します。テーブル名にはスキーマプレフィックスが含まれていることに注意してください。
ALTER DATASHARE my_datashare ADD TABLE public.lbv;
-
ビューとスキーマがデータ共有に正常に追加されていることを確認します。
SELECT * FROM svv_datashare_objects WHERE share_name = 'my_datashare';
-
コンシューマー管理者は、データ共有からデータベースを作成し、コンシューマーユーザーに使用許可を付与します。
これらのステップを完了すると、データ共有ビューにアクセスできるデータベースコンシューマーユーザーはデータをクエリできます。
データレイクテーブルをデータ共有に直接追加する
外部スキーマテーブルのデータ共有への追加は、ビューの追加と似ています。これは、コンシューマーがデータレイクテーブルを元の状態でクエリする場合や、テーブルをコンシューマーがコンシューマーデータウェアハウスのテーブルに結合する場合に適しています。以下の手順では、SQL を使用してデータ共有にデータレイクテーブルを追加する方法を示します。
-
このトピックの最初のセクションの説明に従って、外部スキーマと外部テーブルを作成します。
-
外部スキーマ内の既存のテーブルを検出して、作成したテーブルが使用可能であることを確認します。
SELECT * FROM svv_external_tables WHERE schemaname = 'external_schema_name';
-
データ共有に外部スキーマを追加します。
ALTER DATASHARE my_datashare ADD SCHEMA external_schema_name;
-
データ共有に外部テーブルを追加します。テーブル名にはスキーマプレフィックスが含まれていることに注意してください。
ALTER DATASHARE my_datashare ADD TABLE external_schema_name.sales;
-
テーブルがデータ共有に正常に追加されていることを確認します。
SELECT * FROM svv_datashare_objects WHERE share_name = 'my_datashare';
詳細については、「AWS アカウント内のデータへの読み取りアクセスの共有」を参照してください。
-
共有データを受信するデータベースであるコンシューマーでは、管理者はデータ共有を関連付けて、ユーザーがクエリできるようにします。このステップの実行方法の詳細については、「他のアカウントからのコンシューマーとしてのデータ共有の管理」を参照してください。
管理者がこれらのステップを完了すると、コンシューマーのデータベースユーザーは、共有テーブルからデータを取得するためのクエリを書き込み、コンシューマーの他のテーブルに結合できるようになります。
データ共有にデータレイクオブジェクトを追加する際の注意事項
データ共有でデータレイクからのテーブルとビューを使用する場合、注意すべき項目がいくつかあります。
-
AWS CloudTrail でのログ記録 — データプロデューサーアカウントは、AWS CloudTrail ログを使用して、データ共有を介して共有されたデータレイクテーブルがいつアクセスされたかを監査できます。
-
ログデータを使用してデータアクセスを制御する — CloudTrail ログには、Redshift データ共有プロデューサーとコンシューマーの両方を含む、共有テーブルにアクセスするユーザーに関する詳細が記録されます。識別子は、
AssumeRole
CloudTrail ログのExternalId
フィールドで確認できます。データ所有者は、アクションを使用して IAM ポリシーのデータアクセスに対する追加の制限を設定できます。ポリシーによるデータアクセスの定義の詳細については、「第三者が所有する AWS アカウントへのアクセス」を参照してください。
-
-
セキュリティとコンシューマーのアクセス許可 – Lake Formation に登録されたテーブルの場合、Amazon S3 リソースは Lake Formation によって保護され、Lake Formation が提供する認証情報によって利用可能になります。
データ共有にデータレイクオブジェクトを追加する際の請求に関する考慮事項
以下は、データ共有内のデータレイクオブジェクトの保存とスキャンにかかるコストの詳細です。
-
コンシューマーがデータレイクから共有オブジェクトをクエリすると、スキャンのコストがコンシューマーに請求されます。
-
コンシューマーがプロビジョニングされたクラスターの場合、Redshift は Redshift Spectrum を使用して Amazon S3 データをスキャンします。そのため、Spectrum のコストはコンシューマーアカウントに請求されます。
-
コンシューマーが Amazon Redshift Serverless ワークグループの場合、Spectrum に追加の料金はかかりません。
-
-
バケットの一覧表示などのストレージとオペレーションの Amazon S3 コストは、各 Amazon S3 バケットを所有するアカウントに請求されます。
Amazon Redshift Serverless の請求の詳細については、「Amazon Redshift Serverless での請求」を参照してください。請求と料金の詳細な情報については、「Amazon Redshift の料金