MoR から CoW への変換のために Spark ジョブを投入する

適用範囲スパークエンジン グルテン加速スパークエンジン

このトピックでは、IcebergテーブルデータをMerge-on-Read( MoR )形式からCopy-on-Write( CoW )形式に同期するSparkジョブの実行方法について説明します。 IcebergのCopy-On-Writeテーブルでは、読み取り操作がより効率的になる。

変換には以下の方法のいずれかを使用できます:

  • Register COW Table: この方法では、Iceberg Register_table APIを使用して、 MoR テーブルの名前付き参照を作成します。この参照は、 MoR テーブルのコンパクト化された一貫性のあるバージョンを指し、 CoW テーブルとして機能します。 この方法が推奨され、費用対効果も高い。
  • チェンジ・データ・キャプチャー(CDC) :この方法では、テーブルのコピーを2つ保持する。 ひとつは更新が行われる MoR テーブル、もうひとつは CoW テーブルで、 MoR テーブルのミラーとして機能する。 Sparkジョブは、 Iceberg CDC プロシージャを使用して、最後に同期されたスナップショットと最新のスナップショットの間の MoR テーブルから変更を取得し、 CoW テーブルにマージします。 この方法は、 MoR テーブルのレプリカを維持するため、レジスタ・テーブル・アプローチよりもコストがかかる。

このタスクについて

COWテーブル・アプローチを登録

Merge-on-Read ( MoR ) テーブルがある場合、必要なパラメータ値を指定し、以下のサンプル・ペイロードを使用して変換ジョブを実行することができます。 このジョブは、 MoR テーブルのIcebergオペレーションを同期し、コンパクトなCowテーブルを生成する。

{
    "application_details": {
        "application": "/opt/ibm/spark/builtin-apps/iceberg/iceberg-apps.jar",
        "class": "com.ibm.iceberg.apps.RegisterCowTable",
        "arguments": [
            "--catalog","<catalog-name>",
            "--database","<database-name>",
            "--mor-table","<mor-table-name>",
            "--cow-table","<cow-table-name>"
        ],
        "conf": {
            "spark.hadoop.wxd.apikey" : "Basic <encoded-api-key>"
        },
    }
}

パラメーター値:

  • <catalog-name>: MoR テーブルがあるアイスバーグのカタログ。
  • <database-name> MoR テーブルが利用可能なデータベース。
  • <mor-table-name> MoR テーブルの名前。
  • <cow-table-name> MoR テーブルと同期する テーブルの名前。 CoW
  • <encoded-api-key>: 値は echo "ibmlhapikey_<ユーザID>:<ユーザのapiキー>" の形式でなければなりません。|. -n base64 ここで、<user_id> は、データバケットへのアクセスに使われる api キーを持つユーザの IBM Cloud ID である。 <IAM_APIKEY> には、Object store バケットにアクセスするユーザの API キーを指定します。 APIキーを生成するには、 watsonx.data コンソールにログインし、Profile > Profile and Settings > API Keys に移動し、新しいAPIキーを生成します。

チェンジ・データ・キャプチャー(CDC)のアプローチ

Merge-on-Read ( MoR ) テーブルがある場合、必要なパラメータ値を指定し、以下のサンプル・ペイロードを使用して変換ジョブを実行することができます。 このジョブは、 MoR テーブルのIcebergオペレーションを同期し、コンパクトなCowテーブルを生成する。

{
    "application_details": {
        "application": "/opt/ibm/spark/builtin-apps/iceberg/iceberg-apps.jar",
        "class": "com.ibm.iceberg.apps.CDCSync",
        "arguments": [
            "--catalog","<catalog-name>",
            "--database","<database-name>",
            "--mor-table","<mor-table-name>",
            "--cow-table","<cow-table-name>",
            "--primary-key","<primary-key>"
        ],
        "conf": {
            "spark.hadoop.wxd.apikey" : "Basic <encoded-api-key>",
        }
    }
}

パラメーター値:

  • <catalog-name>: MoR テーブルがあるアイスバーグのカタログ。
  • <database-name> MoR テーブルが利用可能なデータベース。
  • <mor-table-name> MoR テーブルの名前。
  • <cow-table-name> MoR テーブルと同期する テーブルの名前。 CoW
  • <primary-key> CoW テーブルを作成する際に使用する主キー。
  • <encoded-api-key>: 値は echo "ibmlhapikey_<ユーザID>:<ユーザのapiキー>" の形式でなければなりません。|. -n base64 ここで、<user_id> は、データバケットへのアクセスに使われる api キーを持つユーザの IBM Cloud ID である。 <IAM_APIKEY> には、Object store バケットにアクセスするユーザの API キーを指定します。 APIキーを生成するには、 watsonx.data コンソールにログインし、Profile > Profile and Settings > API Keys に移動し、新しいAPIキーを生成します。