Apache Iceberg テーブルの作成 - AWS Lake Formation

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

Apache Iceberg テーブルの作成

AWS Lake Formation は、Amazon S3 にあるデータ AWS Glue Data Catalog で の Apache Parquet データ形式を使用する Apache Iceberg テーブルの作成をサポートします。 Amazon S3 Data Catalog のテーブルは、データストア内のデータを表すメタデータ定義です。デフォルトでは、Lake Formation は Iceberg v2 テーブルを作成します。v1 テーブルと v2 テーブルの違いについては、Apache Iceberg ドキュメントの「形式バージョンの変更」を参照してください。

Apache Iceberg は、非常に大規模な分析データセット用のオープンテーブル形式です。Iceberg では、スキーマの変更 (スキーマ進化とも呼ばれます) を簡単に行うことができます。つまり、基になるデータを中断することなく、データテーブルの列を追加、名前変更、または削除できます。Iceberg はデータのバージョニングもサポートしているため、データの変更を経時的に追跡できます。これにより、タイムトラベル機能が有効になるため、過去のバージョンのデータにアクセスしてクエリを実行し、更新と削除の間に行われたデータの変更を分析できます。

Lake Formation コンソールまたは AWS Glue API の CreateTableオペレーションを使用して、データカタログに Iceberg テーブルを作成できます。詳細については、「 CreateTable アクション (Python: create_table)」を参照してください。

Data Catalog に Iceberg テーブルを作成する場合、読み取りと書き込みを実行できるように、Amazon S3 でテーブル形式とメタデータファイルのパスを指定する必要があります。

Lake Formation を使用して、Amazon S3 データロケーションを に登録するときに、きめ細かなアクセスコントロール許可を使用して Iceberg テーブルを保護できます AWS Lake Formation。Amazon S3 のソースデータと Lake Formation に登録されていないメタデータの場合、アクセスは Amazon S3 の IAM アクセス許可ポリシーと AWS Glue アクションによって決まります。詳細については、「Lake Formation 許可の管理」を参照してください。

注記

Data Catalog は、パーティションの作成と Iceberg テーブルプロパティの追加をサポートしていません。

前提条件

Data Catalog に Iceberg テーブルを作成し、Lake Formation のデータアクセス許可を設定するには、次の要件を満たす必要があります。

  1. Lake Formation にデータが登録されていない状態で Iceberg テーブルを作成するために必要なアクセス許可。

    Data Catalog にテーブルを作成するために必要なアクセス許可に加えて、テーブル作成者には次のアクセス許可が必要です。

    • リソース arn:aws:s3:::{bucketName} での s3:PutObject

    • リソース arn:aws:s3:::{bucketName} での s3:GetObject

    • リソース arn:aws:s3:::{bucketName} での s3:DeleteObject

  2. Lake Formation にデータが登録されている状態で Iceberg テーブルを作成するために必要なアクセス許可:

    Lake Formation を使用してデータレイク内のデータを管理および保護するには、テーブルのデータを含む Amazon S3 ロケーションを Lake Formation に登録します。これは、Lake Formation が Athena、Redshift Spectrum、Amazon EMR などの AWS 分析サービスに認証情報を提供してデータにアクセスできるようにするためです。Amazon S3 ロケーションの登録の詳細については「データレイクへの Amazon S3 ロケーションの追加」を参照してください。

    Lake Formation に登録されている、基盤となるデータを読み書きするプリンシパルには、次のアクセス許可が必要です。

    • lakeformation:GetDataAccess

    • DATA_LOCATION_ACCESS

      ロケーションに対するデータロケーション許可を持つプリンシパルは、すべての子ロケーションに対するロケーション許可も持っています。

      データロケーション許可の詳細については、「基盤となるデータのアクセスコントロール」を参照してください。

圧縮を有効にするには、Data Catalog 内のテーブルを更新するアクセス許可を持つ IAM ロールを、サービスが引き受ける必要があります。詳細については、「 テーブル最適化の前提条件 」を参照してください。

Iceberg テーブルの作成

Iceberg v1 および v2 テーブルは、Lake Formation コンソールを使用するか、このページに記載されている AWS Command Line Interface ように作成できます。 AWS Glue コンソールまたは を使用して Iceberg テーブルを作成することもできます AWS Glue クローラー。詳細については、「 AWS Glue デベロッパーガイド」の「Data Catalog とクローラー」を参照してください。

Iceberg テーブルを作成するには

Console
  1. にサインインし AWS Management Console、https://console.aws.amazon.com/lakeformation/ で Lake Formation コンソールを開きます。

  2. Data Catalog で [テーブル] を選択し、[テーブルの作成] ボタンを使用して次の属性を指定します。

    • テーブル名: テーブルの名前を入力します。Athena を使用してテーブルにアクセスする場合は、「Amazon Athena ユーザーガイド」の命名に関するヒントを使用します。

    • データベース: 既存のデータベースを選択するか、新しいデータベースを作成します。

    • 説明: テーブルの説明。テーブルの内容を理解しやすくするために説明を記入できます。

    • テーブル形式: [テーブル形式] として、[Apache Iceberg] を選択します。

      [圧縮を有効にする] オプションで選択した Apache Iceberg テーブルオプション。
    • 圧縮を有効にする: [圧縮を有効にする] を選択すると、テーブル内の小さな Amazon S3 オブジェクトが圧縮されてより大きなオブジェクトにまとめられます。

    • IAM ロール: 圧縮を実行する場合、サービスはユーザーに代わって IAM ロールを引き受けます。IAM ロールは、ドロップダウンを使用して選択できます。圧縮を有効にするために必要なアクセス許可がロールにあることを確認します。

      必要なアクセス許可の詳細については、「 テーブル最適化の前提条件 」を参照してください。

    • ロケーション: メタデータテーブルを保存する Amazon S3 内のフォルダへのパスを指定します。Iceberg が読み取りと書き込みを実行するには、メタデータファイルと Data Catalog 内のロケーションが必要です。

    • スキーマ: [列の追加] を選択して、列と、列のデータ型を追加します。空のテーブルを作成して、後でスキーマを更新することもできます。Data Catalog は Hive データ型をサポートしています。詳細については、「Hive データ型」を参照してください。

      Iceberg では、テーブルを作成した後でスキーマとパーティションを進化させることができます。[Athena クエリ] を使用してテーブルスキーマを更新し、[Spark クエリ] を使用してパーティションを更新できます。

AWS CLI
aws glue create-table \ --database-name iceberg-db \ --region us-west-2 \ --open-table-format-input '{ "IcebergInput": { "MetadataOperation": "CREATE", "Version": "2" } }' \ --table-input '{"Name":"test-iceberg-input-demo", "TableType": "EXTERNAL_TABLE", "StorageDescriptor":{ "Columns":[ {"Name":"col1", "Type":"int"}, {"Name":"col2", "Type":"int"}, {"Name":"col3", "Type":"string"} ], "Location":"s3://DOC_EXAMPLE_BUCKET_ICEBERG/" } }'