AWS Glue Data Catalog に対するクエリの実行 - Amazon Redshift

AWS Glue Data Catalog に対するクエリの実行

クエリエディタ v2 を使用して、AWS Glue Data Catalog でカタログ化されたデータをクエリできます。デフォルトでは、AWS Glue Data Catalog は、awsdatacatalog という名前のクエリエディタ v2 のデータベースとして表示されます。AWS Glue Data Catalog に対するクエリの実行は、すべての Amazon Redshift AWS リージョンで利用できるわけではありません。この機能が使用可能かどうかは、SHOW コマンドを使用して確認します。AWS Glue の詳細については、AWS Glue デベロッパーガイド の「What is AWS Glue?」を参照してください。

注記

AWS Glue Data Catalog に対するクエリの実行は、Amazon Redshift RA3 のノードタイプのクラスターと Amazon Redshift Serverless でのみサポートされています。

データウェアハウスを設定し、以下の SQL コマンドを使用してカタログ化された AWS Glue データベースのオブジェクトを表示できます。

  • SHOW — 現在接続されているデータウェアハウスに awsdatacatalog がマウントされているかを表示します。例えば、data_catalog_auto_mount パラメータ値を表示するには、次を実行します。

    SHOW data_catalog_auto_mount;

    詳細については、「Amazon Redshift データベース開発者ガイド」の「SHOW」を参照してください。

  • ALTER SYSTEM — data_catalog_auto_mount のシステムレベルの設定を変更します。例えば、data_catalog_auto_mount パラメータ値を on に変更するには、次を実行します。

    ALTER SYSTEM SET data_catalog_auto_mount = on;

    この変更は、プロビジョニングされたクラスターが再起動されるか、サーバーレスワークグループが自動的に一時停止して再開されたときに有効になります。詳細については、「Amazon Redshift データベース開発者ガイド」の「ALTER SYSTEM」を参照してください。

  • SHOW SCHEMAS — スキーマのリストを表示します。awsdatacatalog という名前のデータベース内のスキーマは、AWS Glue Data Catalogでカタログ化されている AWS Glue データベースを表します。例えば、これらのスキーマを表示するには、次を実行します。

    SHOW SCHEMAS FROM DATABASE awsdatacatalog;

    詳細については、「Amazon Redshift データベース開発者ガイド」の「SHOW SCHEMAS」を参照してください。

  • SHOW TABLES — スキーマ内のテーブルを一覧表示します。例えば、スキーマ myglue にある、awsdatacatalog という AWS Glue Data Catalogのデータベース内のテーブルを表示するには、次を実行します。

    SHOW TABLES FROM SCHEMA awsdatacatalog.myschema;

    詳細については、「Amazon Redshift データベース開発者ガイド」の「SHOW TABLES」を参照してください。

  • SHOW COLUMNS – テーブル内の列を一覧表示します。例えば、スキーマ myglue とテーブル mytable にある、awsdatacatalog という AWS Glue Data Catalogのデータベース内の列を表示するには、次を実行します。

    SHOW COLUMNS FROM TABLE awsdatacatalog.myglue.mytable;

    詳細については、「Amazon Redshift データベース開発者ガイド」の「SHOW COLUMNS」を参照してください。

IAM ユーザーまたはロールに対し、AWS Glue Data Catalog にクエリを実行する権限を付与するには、以下の手順に従います。
  1. ツリービューペインで、[データベースのユーザー名とパスワード] による認証方法を使用して、プロビジョニングされたクラスターまたはサーバーレスワークグループの初期データベースに接続します。例えば、クラスターまたはワークグループの作成時に使用した管理者ユーザーとパスワードを使用して、dev データベースに接続します。

  2. エディタタブで以下の SQL ステートメントを実行して、IAM ユーザーに AWS Glue Data Catalog へのアクセス権を付与します。

    GRANT USAGE ON DATABASE awsdatacatalog to "IAM:myIAMUser"

    ここで、IAM:myIAMUser は、AWS Glue Data Catalog に USAGE 権限を付与したい IAM ユーザーです。または、USAGE 権限を、IAM ロールの IAMR:myIAMRole に付与することもできます。

  3. ツリービューペインで、以前に作成したクラスターまたはワークグループへの接続を編集または削除します。次のいずれかの方法で、クラスターまたはワークグループに接続します。

    • クラスターから awsdatacatalog データベースにアクセスするには、認証方法として、[IAM ID を使用した一時的な認証情報] を使用する必要があります。認証方法の詳細については、「Amazon Redshift データベースに接続する」を参照してください。この認証方法を接続ウィンドウに表示するには、クエリエディタ v2 の管理者がアカウントの [アカウント設定] を構成することが必要になる場合があります。

    • ワークグループから awsdatacatalog データベースに接続するには、認証方法として [フェデレーションユーザー] を使用する必要があります。認証方法の詳細については、「Amazon Redshift データベースに接続する」を参照してください。

  4. 権限が付与されたら、IAM ID を使用して、ご自分の AWS Glue Data Catalog に対して SQL を実行できます。

接続後、クエリエディタ v2 を使用して、AWS Glue Data Catalog でカタログ化されたデータをクエリできます。クエリエディタ v2 のツリービューペインで、クラスターまたはワークグループと awsdatacatalog データベースを選択します。エディタまたはノートブックペインで、正しいクラスターまたはワークグループが選択されていることを確認します。選択するデータベースは、最初の Amazon Redshift データベース (dev など) でなければなりません。クエリの作成については、「クエリの作成と実行」と「ノートブックの作成と実行」を参照してください。指定されたデータベース awsdatacatalog は、アカウント内の外部データカタログデータベースを参照するために予約されています。awsdatacatalog データベースに対するクエリは読み取り専用です。SELECT ステートメントでテーブルを参照するには、3 句構成の表記を使用してください。最初の部分はデータベース名、2 番目の部分は AWS Glue データベース名、3 番目の部分は AWS Glue テーブル名です。

SELECT * FROM awsdatacatalog.<aws-glue-db-name>.<aws-glue-table-name>;

AWS Glue Data Catalog データを読み取って Amazon Redshift テーブルにデータを入力するさまざまなシナリオを実行できます。

次の SQL 例では、AWS Glue で定義されている 2 つのテーブルを結合します。

SELECT pn.emp_id, alias, role, project_name FROM "awsdatacatalog"."empl_db"."project_name_table" pn, "awsdatacatalog"."empl_db"."project_alias_table" pa WHERE pn.emp_id = pa.emp_id;

次の SQL 例では、Amazon Redshift テーブルを作成し、2 つの AWS Glue テーブルを結合したデータをそのテーブルに入力します。

CREATE TABLE dev.public.glue AS SELECT pn.emp_id, alias, role, project_name FROM "awsdatacatalog"."empl_db"."project_name_table" pn, "awsdatacatalog"."empl_db"."project_alias_table" pa WHERE pn.emp_id = pa.emp_id;