データカタログにアクセスする
AWS Glue Data Catalog (データカタログ) を使用すると、データを検出してこれを理解することができます。データカタログは、スキーマの定義、データ型、場所などのメタデータを一貫して維持する方法を提供します。次の方法を使用してデータカタログにアクセスできます。
AWS Glue コンソール – ウェブベースのユーザーインターフェイスである AWS Glue コンソールからデータカタログにアクセスして管理できます。コンソールでは、データベース、テーブル、および関連するメタデータを参照および検索したり、メタデータ定義を作成、更新、削除したりできます。
AWS Glue クローラー – クローラーは、データソースを自動的にスキャンし、データカタログにメタデータを入力するプログラムです。クローラーを作成して実行し、Amazon S3、Amazon RDS、Amazon DynamoDB、Amazon CloudWatch、および MySQL や PostgreSQL などの JDBC 準拠のリレーショナルデータベース、Snowflake や Google BigQuery などのいくつかの非 AWS ソースからのデータを検出してカタログ化できます。
AWS Glue API - AWS Glue API を使用してプログラムでデータカタログにアクセスできます。これらの API を使用すると、プログラムでデータカタログを操作し、自動化と他のアプリケーションやサービスとの統合が可能になります。
-
AWS Command Line Interface (AWS CLI) – AWS CLI を使用して、コマンドラインからデータカタログにアクセスして管理できます。CLI には、メタデータ定義の作成、更新、削除、メタデータ情報のクエリと取得のためのコマンドが用意されています。
-
他の AWS サービスとの統合 – データカタログは他のさまざまな AWS サービスと統合されるため、カタログに保存されているメタデータにアクセスして利用できます。たとえば、Amazon Athena を使用してデータカタログのメタデータを使用してデータソースをクエリし、AWS Lake Formation を使用してデータカタログリソースのデータアクセスとガバナンスを管理できます。
AWS Glue Iceberg REST エンドポイントを使用したデータカタログへの接続方法
AWS Glue の Iceberg REST エンドポイントは、Apache Iceberg REST 仕様で指定された API オペレーションに対応しています。Iceberg REST クライアントを使用すると、分析エンジンで実行されているアプリケーションをデータカタログでホストされている REST カタログに接続することができます。
エンドポイントは、Apache Iceberg テーブル仕様の両方 (v1 と v2) をサポートしており、デフォルトでは v2 に設定されています。Iceberg テーブル v1 仕様を使用する場合は、API コールで v1 を指定する必要があります。API オペレーションを使用すると、Amazon S3 オブジェクトストレージと Amazon S3 テーブルストレージの両方に保存されている Iceberg テーブルにアクセスできます。
設定の詳細
Endpoint : https://glue.us-east-1
.amazonaws.com/iceberg
Iceberg クライアントを使用して Spark などの分析エンジンをサービスエンドポイントに接続する場合は、次のアプリケーション設定を指定する必要があります。
catalog_name ="mydatacatalog"
aws_account_id ="123456789012"
aws_region = "us-east-1" spark = SparkSession.builder \ ... \ .config("spark.sql.defaultCatalog", catalog_name) \ .config(f"spark.sql.catalog.{catalog_name}", "org.apache.iceberg.spark.SparkCatalog") \ .config(f"spark.sql.catalog.{catalog_name}.type", "rest") \ .config(f"spark.sql.catalog.{catalog_name}.uri", "https://glue.{aws_region}.amazonaws.com/iceberg") \ .config(f"spark.sql.catalog.{catalog_name}.warehouse", "{aws_account_id}") \ .config(f"spark.sql.catalog.{catalog_name}.rest.sigv4-enabled", "true") \ .config(f"spark.sql.catalog.{catalog_name}.rest.signing-name", "glue") \ .config(f"spark.sql.catalog.{catalog_name}.rest.signing-region", "{aws_region}") \ .config(f"spark.sql.catalog.{catalog_name}.io-impl", "org.apache.iceberg.aws.s3.S3FileIO") \ .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \ .getOrCreate()
AWS Glue Iceberg REST 拡張エンドポイントを使用したデータカタログへの接続
AWS Glue Iceberg REST 拡張エンドポイントは、Apache Iceberg REST 仕様には含まれていない追加の API と、サーバー側のスキャン計画機能を提供します。これらの追加の API は、Amazon Redshift マネージドストレージに保存されているテーブルにアクセスするときに使用します。エンドポイントには、Apache Iceberg AWS Glue Data Catalog 拡張機能ライブラリを使用して、アプリケーションからアクセスすることができます。
Endpoint : https://glue.us-east-1
.amazonaws.com/extensions
catalog_name ="myredshiftcatalog"
aws_account_id ="123456789012"
aws_region = "us-east-1" spark = SparkSession.builder \ .config("spark.sql.defaultCatalog", catalog_name) \ .config(f"spark.sql.catalog.{catalog_name}", "org.apache.iceberg.spark.SparkCatalog") \ .config(f"spark.sql.catalog.{catalog_name}.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \ .config(f"spark.sql.catalog.{catalog_name}.io-impl", "org.apache.iceberg.aws.s3.S3FileIO") \ .config(f"spark.sql.catalog.{catalog_name}.client.region", "{aws_region}") \ .config(f"spark.sql.catalog.{catalog_name}.glue.id", "{aws_account_id}:redshiftnamespacecatalog/redshiftdb") \ .config(f"spark.sql.catalog.{catalog_name}.glue.endpoint", "https://glue.us-east-1.amazonaws.com/extensions") \ .config(f"spark.sql.catalog.{catalog_name}.glue.extensions.debug-enabled", "true") \ .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \ .getOrCreate()
AWS Glue サービスエンドポイントへのアクセスの認証と承認
AWS Glue Data Catalog エンドポイントへの API リクエストは、AWS Signature Version 4 (SigV4) を使用して認証されます。AWS SigV4 の詳細については「API リクエストに対する AWS Signature Version 4」のセクションを参照してください。
AWS Glue サービスエンドポイントと AWS Glue メタデータにアクセスする場合、アプリケーションは glue:getCatalog
IAM アクションを必要とする IAM ロールを引き受けます。
REST オペレーション | REST パス | AWS Glue IAM アクション | CloudTrail EventName | Lake Formation 許可 |
---|---|---|---|---|
GetConfig | GET /config | GetCatalog | 不要 | |
ListNamespaces | GET /namespaces | GetDatabases | GetDatabases | ALL, DESCRIBE, SELECT |
CreateNamespace | POST /namespaces | CreateDatabase | CreateDatabase | ALL, CREATE_DATABASE |
LoadNamespaceMetadata | GET /namespaces/{ns} | GetDatabase | GetDatabase | ALL, DESCRIBE, SELECT |
UpdateProperties | POST /namespaces/{ns}/properties | UpdateDatabase | UpdateDatabase | ALL, ALTER |
DeleteNamespace | DELETE /namespace/{ns} | DeleteDatabase | DeleteDatabase | ALL, DROP |
ListTables | GET /namespaces/{ns}/tables | GetTables | GetTables | ALL, SELECT, DESCRIBE |
CreateTable | POST /namespaces/{ns}/tables | CreateTable | CreateTable | ALL, CREATE_TABLE |
LoadTable | GET /namespaces/{ns}/tables/{tbl} | GetTable | GetTable | ALL, SELECT, DESCRIBE |
TableExists | HEAD /namespaces/{ns}/tables/{tbl} | GetTable | GetTable | ALL, SELECT, DESCRIBE |
UpdateTable | POST /namespaces/{ns}/tables/{tbl} | UpdateTable | UpdateTable | ALL, ALTER |
DeleteTable | DELETE /namespaces/{ns}/tables/{tbl} | DeleteTable | DeleteTable | ALL, DROP |
IAM、AWS Lake Formation、Lake Formation のいずれかのハイブリッドモードのアクセス許可を使用することで、デフォルトのカタログデータとそのオブジェクトへのアクセスを管理できます。
AWS Glue Data Catalog のフェデレーティッドカタログには、Lake Formation に登録されたデータロケーションがあります。Lake Formation は Data Catalog と統合されているため、カタログオブジェクトへのユーザーアクセスを管理するデータベーススタイルのアクセス許可を利用できます。Lake Formation では、データの作成、挿入、削除に使用する IAM ユーザーまたはロールにアクセス許可を設定する必要があります。これらのアクセス許可は、既存の AWS Glue テーブルに対するものと同じものです。
-
CREATE_CATALOG – カタログの作成に必要
CREATE_DATABASE – データベースの作成に必要
CREATE_TABLE – テーブルの作成に必要
DELETE – テーブルからのデータの削除に必要
DESCRIBE – メタデータの読み取りに必要
DROP – テーブルまたはデータベースのドロップ/削除に必要
INSERT: プリンシパルがデータをテーブルに挿入する必要がある場合に必要
SELECT: プリンシパルがテーブルからデータを選択する必要がある場合に必要
詳細については、「AWS Lake Formation デベロッパーガイド」の「Lake Formation permissions reference」を参照してください。
スタンドアロンの Spark アプリケーションからデータカタログへの接続
Apache Iceberg コネクタを使用することで、スタンドアロンのアプリケーションからデータカタログに接続することができます。
Spark アプリケーションの IAM ロールを作成します。
-
Iceberg コネクタを使用して AWS Glue Iceberg Rest エンドポイントに接続します。
# configure your application. Refer to https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html for best practices on configuring environment variables. export AWS_ACCESS_KEY_ID=$(aws configure get appUser.aws_access_key_id) export AWS_SECRET_ACCESS_KEY=$(aws configure get appUser.aws_secret_access_key) export AWS_SESSION_TOKEN=$(aws configure get appUser.aws_secret_token) export AWS_REGION=us-east-1 export REGION=us-east-1 export AWS_ACCOUNT_ID = {specify your aws account id here} ~/spark-3.5.3-bin-hadoop3/bin/spark-shell \ --packages org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.6.0 \ --conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \ --conf "spark.sql.defaultCatalog=spark_catalog" \ --conf "spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkCatalog" \ --conf "spark.sql.catalog.spark_catalog.type=rest" \ --conf "spark.sql.catalog.spark_catalog.uri=https://glue.us-east-1.amazonaws.com/iceberg" \ --conf "spark.sql.catalog.spark_catalog.warehouse = {AWS_ACCOUNT_ID}" \ --conf "spark.sql.catalog.spark_catalog.rest.sigv4-enabled=true" \ --conf "spark.sql.catalog.spark_catalog.rest.signing-name=glue" \ --conf "spark.sql.catalog.spark_catalog.rest.signing-region=us-east-1" \ --conf "spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO" \ --conf "spark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.SimpleAWSCredentialProvider"
-
データカタログのデータをクエリします。
spark.sql("create database myicebergdb").show() spark.sql("""CREATE TABLE myicebergdb.mytbl (name string) USING iceberg location 's3://
bucket_name
/mytbl
'""") spark.sql("insert into myicebergdb.mytbl values('demo') ").show()
Amazon Redshift と Apache Iceberg 間のデータマッピング
Redshift と Iceberg は、さまざまなデータ型をサポートしています。次の互換性マトリクスは、この 2 つのデータシステム間でデータをマッピングする際のサポートと制限の概要を示しています。各データシステムでサポートされているデータ型の詳細については、「Amazon Redshift データ型」と「Apache Iceberg Table Specifications
Redshift データ型 | エイリアス | Iceberg データ型 |
---|---|---|
SMALLINT | INT2 | 整数 |
INTEGER | INT、INT4 | 整数 |
BIGINT | INT8 | long |
DECIMAL | NUMERIC | decimal |
REAL | FLOAT4 | フロート |
REAL | FLOAT4 | フロート |
DOUBLE PRECISION | FLOAT8、FLOAT | double |
CHAR | CHARACTER, NCHAR | string |
VARCHAR | CHARACTER VARYING, NVARCHAR | string |
BPCHAR | string | |
TEXT | string | |
DATE | date | |
TIME | TIME WITHOUT TIMEZONE | 時間 |
TIME | TIME WITH TIMEZONE | サポート外 |
TIMESTAMP | TIMESTAMP WITHOUT TIMEZONE | TIMESTAMP |
TIMESTAMPZ | TIMESTAMP WITH TIMEZONE | TIMESTAMPZ |
INTERVAL YEAR TO MONTH | サポートされていません | |
INTERVAL DAY TO SECOND | サポートされていません | |
BOOLEAN | BOOL | ブール |
HLLSKETCH | サポートされていません | |
SUPER | サポートされていません | |
VARBYTE | VARBINARY、BINARY VARYING | バイナリ |
GEOMETRY | サポートされていません | |
GEOGRAPHY | サポートされていません |
AWS Glue Iceberg REST Catalog API を使用する際の考慮事項と制限事項
Apache Iceberg REST Catalog データ定義言語 (DDL) オペレーション動作を使用する際の考慮事項と制限事項は次のとおりです。
考慮事項
-
DeleteTable API の動作 — DeleteTable API はパージオプションをサポートしています。パージが
true
に設定されている場合、テーブルデータは削除されます。設定されていない場合は削除されません。Amazon S3 のテーブルの場合、このオペレーションでテーブルデータが削除されることはありません。テーブルが Amazon S3 とpurge = TRUE,
に保存されている場合、このオペレーションは失敗します。テーブルが Amazon Redshift マネージドストレージに保存されている場合、Amazon Redshift での
DROP TABLE
の動作と同様に、このオペレーションによりテーブルデータは削除されます。テーブルが Amazon Redshift とpurge = FALSE
に保存されている場合、このオペレーションは失敗します。 -
CreateTable API の動作 –
CreateTable
API オペレーションはオプションstate-create = TRUE
をサポートしていません。 -
RenameTable
API の動作 –RenameTable
オペレーションは Amazon Redshift のテーブルではサポートされていますが、Amazon S3 のテーブルではサポートされていません。 -
Amazon Redshift の名前空間とテーブルの DDL オペレーション – Amazon Redshift の名前空間とテーブルの作成、更新、削除のオペレーションは、Amazon Redshift のマネージドワークグループがいつ利用可能か、および競合する DDL と DML トランザクションが進行中かどうかに依存し、オペレーションはロックを待機してから変更のコミットを試みる必要があるため、非同期オペレーションとなります。
作成、更新、削除のオペレーション中に、エンドポイントは次のペイロードを含む 202 レスポンスを返します。
{ "transaction-context": "
operation/resource
", "transaction-id": "data-api-request-id:crypto-hash-signature(operation, resource, data-api-uuid)
" }例えば、エンドポイントは UpdateTable オペレーションに対して次のレスポンスを返します。
{ "transaction-context": "UpdateTable/arn:aws:glue:us-east-1:123456789012:table/123456789012/cat1/db1/tbl1", "transaction-id": "b0033764-20df-4679-905d-71f20a0cdbe7:ca8a95d54158793204f1f39b4971d2a7" }
このトランザクションの進行状況を追跡するには、
CheckTransactionStatus
API を次の形式で使用します。POST /transactions/status Request: { "transaction-context": "UpdateTable/arn:aws:glue:us-east-1:123456789012:table/123456789012/cat1/db1/tbl1", "transaction-id": "transaction-id": "b0033764-20df-4679-905d-71f20a0cdbe7:ca8a95d54158793204f1f39b4971d2a7" } Response: { "status": "IN_PRORESS|SUCCEEDED|FAILED|CANCELED", "error": "message" // if failed }
制限
-
Apache Iceberg REST 仕様の View API は、AWS Glue Iceberg REST Catalog ではサポートされていません。