スキップしてコンテンツを表示

データレイク以外のテーブルを Iceberg テーブルに移行する方法を教えてください。

所要時間2分
0

データレイク以外のテーブルを Apache Iceberg テーブルに移行したいです。

簡単な説明

堅牢なデータレイクアーキテクチャにより、さまざまなデータソースを 1 つの場所に統合して簡単にアクセスできます。その後、データ管理ツールと従来のデータウェアハウスシステムの ACID トランザクションを使用するとコストを削減できます。

解決策

Iceberg テーブルは、インプレース移行とシャドウ移行の 2 種類の移行をサポートしています。詳細については、Iceberg のウェブサイトで「インプレースマイグレーションシャドウマイグレーション」を参照してください。

Apache Spark セッションを Iceberg 設定で初期化する

AWS Glue で新しいノートブックを作成します。ノートブックを作成するときには、正しいアクセス許可を持つ AWS Identity and Access Management (IAM) ロールを使用してください。

次の手順を実行します。

  1. AWS Glue コンソールにログインします
  2. Glue ノートブックを作成し、次のパラメータを設定します。
    %glue_version 4.0
    %idle_timeout 60
    %number_of_workers 5
    %worker_type G.1X
    %%configure
    {
      "--conf": "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
      "--datalake-formats": "iceberg"
    }
    from pyspark.sql import SparkSession
    spark = SparkSession.builder \
        .config(f"spark.sql.catalog.glue_catalog", "org.apache.iceberg.spark.SparkCatalog") \
        .config(f"spark.sql.catalog.glue_catalog.warehouse","s3://bucket_name/prefix/") \
        .config(f"spark.sql.catalog.glue_catalog.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \
        .config(f"spark.sql.catalog.glue_catalog.io-impl", "org.apache.iceberg.aws.s3.S3FileIO") \
        .getOrCreate()

インプレース移行を使用してデータレイク以外のテーブルを移動する

インプレース移行では、ソーステーブルのデータファイルはそのまま残され、新しい Iceberg テーブルに追加されます。このプロセスでは、ターゲットテーブルのメタデータのみが作成されます。移行中に発生したエラーでは、メタデータの書き換えのみが必要となります。データファイル自体を書き換える必要はありません。

テーブルを移行するには、次の手順を実行します。
注: Parquet データには** add_files** を使用します。

  1. ソーステーブルと同じ構造の、空の Iceberg テーブルを作成します。

    query = f"""
    CREATE TABLE IF NOT EXISTS glue_catalog.dbname.target_iceberg_tablename USING iceberg  LOCATION 's3://bucket_name/prefix/' AS
    SELECT * FROM dbname.source_tablename LIMIT 0
    """
    spark.sql(query)
  2. add_files プロシージャを実行します。

    query = f"""
    
    CALL glue_catalog.system.add_files(table => 'dbname.target_iceberg_tablename', source_table => 'dbname.source_tablename')
    
    """
    
    spark.sql(query).show(truncate=False)
  3. データファイルが、ソースの場所における以前のデータファイルを指していることを確認します。新しい場所で作成されたメタデータファイルのみが Iceberg テーブルに属します。

    query = f"""
    
    SELECT file_path FROM glue_catalog.dbname.target_iceberg_tablename.files
    
    """
    
    spark.sql(query).show(10, truncate=False)

シャドウ移行を使用してデータレイク以外のテーブルを移動する

シャドウ移行プロセスでは、ソーステーブルのデータを再宣言します。移行中にデータを検証できます。構成ごとに新しいテーブルを作成して、さまざまな構成をテストすることもできます。

衝突を避けるため、このタイプの移行では、ターゲットデータファイルをソースデータファイルとは別の場所に配置します。このプロセスでは、問題からすばやく回復する方法として、ロールバックを使用してターゲットテーブルを削除することもできます。

テーブルを移行するには、次の手順を実行します。

  1. 既存のテーブルのデータを使用して Iceberg テーブルを作成します。

    query = f"""
    CREATE TABLE IF NOT EXISTS glue_catalog.dbname.target_iceberg_tablename USING iceberg  LOCATION 's3://bucket_name/prefix/' AS
    SELECT * FROM dbname.source_tablename
    """
    spark.sql(query).show(truncate=False)
  2. データファイルが新しい場所に移動されたことを確認します。新しい場所に作成されたメタデータファイルは、Iceberg テーブルに属しています。

    query = f"""
    SELECT file_path FROM glue_catalog.dbname.target_iceberg_tablename.files
    """
    spark.sql(query).show(10, truncate=False)

関連情報

AWS Glue で Iceberg フレームワークを使用する

AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ