データの取り込み、タイムトラベル、テーブルのロールバック

このチュートリアルでは、watsonx.dataでのデータの取り込み、タイムトラベルの実行、およびテーブルのロールバック操作について説明します。

データの取り込み

データの取り込みとは、watsonx.dataにデータをインポートしてロードするプロセスのことです。 watsonx.dataのデータ取り込みは、以下の方法で実行できます:

  • データマネージャーページファイルからテーブルを作成オプションを使用してデータをインジェストする。
  • SQLクエリを使用してデータを取り込む。
  • IBM-lh コマンドラインツールを使用してデータを取り込む。
  • Sparkエンジンによるデータの取り込み。

詳しくは、データの取り込み を参照。

タイム・トラベル

Apache Iceberg テーブルのタイムトラベル機能により、テーブルの履歴を取得し検査することができます。 タイムトラベル機能をサポートするためにテーブルスナップショットを使用する。 テーブルスナップショットは、特定の時点でのテーブルの状態を表します。 Icebergは、テーブルが作成または変更(挿入、更新、削除)されると、テーブルスナップショットレコードを生成します。 このスナップショットレコードを使用して、テーブルの詳細を見るためにクエリを実行することができます。

Hiveはタイムトラベル機能をサポートしていません。

ロールバック
テーブルロールバック機能では、テーブルスナップショットを使用して、テーブルを以前の時点にロールバックすることができます。

ユースケースシナリオ

あなたが会社のデータ・エンジニアで、会社のデータベースでカーの記録を管理する仕事をしているとしよう。 ストレージ内の既存のデータレコードをアップロードする。 既存のテーブルに新しいデータセットを追加する。 検討の結果、追加された新しいデータセットが適切でないことがわかり、テーブルを以前の状態にロールバックすることにしました。

以下のビデオは、このドキュメントのコンセプトとタスクを学ぶための視覚的な方法を提供します。

目標

  • テーブルを作成し、Sparkエンジンを使用してサンプルデータをテーブルにロードします。
  • cars テーブルにさらにレコードをロードする。
  • テーブルスナップショットを使用してテーブルレコードを取得する。
  • テーブルのロールバック操作を実行する。

開始前に

  • cars.csv ファイルをhttps://ibm.box.com/v/data-cars-csv からダウンロードする。
  • ライトプランのインスタンスがプロビジョニングされている必要があります。
  • Liteプランインスタンスには、実行状態のSparkエンジンとPrestoエンジンが含まれている必要があります。
  • Prestoエンジンとスパークエンジンの両方にカタログを関連付ける。 Apache Iceberg。

手順

テーブルの作成とデータのロード

このセクションでは、Sparkエンジンを使用して、'cars という名前のテーブルを作成し、'cars.csv ファイルにデータをインジェストする手順を説明します。

  1. watsonx.data コンソールにログインします。

  2. ナビゲーションメニューから、 データマネージャーを選択する。

  3. Ingest Data をクリックし、Local System を選択する。 データの取り込み方法の詳細については、ローカルシステムからのデータの取り込み を参照してください。

  4. Browse data タブをクリックする。 Icebergカタログをリフレッシュして、新しいスキーマとデータ付きテーブルを表示します。 テーブルカラム、タイムトラベル、データサンプル、DDLタブが表示されます。

  5. タイムトラベルをクリック。 テーブルには「406 レコードがあることがわかる。

テーブルにさらにレコードをロードする

複数のトランザクション(2 つのトランザクション)を実行し、'cars テーブルを更新する。 最初のトランザクションでは、モデル「TESLA 他の2つの車のレコードを取り込み、2番目のトランザクションでは、モデル Kia Optima 1つのレコードを取り込む。

そのためには

  1. クエリのワークスペースに移動する。

  2. Presto エンジンを選択。

  3. 次のSQLクエリを使用して、最初のデータ・セットを'cars テーブルに挿入する。

    INSERT INTO iceberg_data.automobiles.cars VALUES
    ('Tesla Model S', 102, 0, 0, 670, 4766, 3.1, 2023, 'USA'),
    ('Tesla Model 3', 134, 0, 0, 283, 3582, 5.8, 2023, 'USA');
    
  4. 照会を実行します。 データが追加され、合計レコードは'408 となる。

  5. 次のSQLクエリを使用して、2番目のデータ・セットを'cars テーブルに挿入する。

    INSERT INTO iceberg_data.automobiles.cars VALUES
    ('Kia Optima', 27, 4, 2457, 185, 3200, 8.5, 2023, 'South Korea');
    
  6. 照会を実行します。 データが追加され、合計レコードは「409 なる。

  7. データ・マネージャーに行く。

  8. テーブル cars を選択する。 のセクションから、**タイムトラベル・**タブを選択する。 データトランザクションに対応するスナップショットレコード(SnapshotID付き)を表示できます。

テーブルスナップショットを使用したテーブルレコードの取得。

このセクションでは、テーブルスナップショットを使用してテーブルレコードを取得する手順を説明します。 監査や規制の目的でデータを取得するためにクエリーを実行する。

  1. クエリのワークスペースに移動する。

  2. 以下のクエリを実行して、実行された3つのインサート・トランザクションに対応するスナップショット・レコードを取得する。

    SELECT * FROM iceberg_data.automobiles."cars$snapshots" ORDER BY committed_at;
    

    結果セットには、snapshot_id、日付、時刻、タイムゾーンを持つ3つのスナップショット・レコードが含まれます。 このチュートリアルでは、各トランザクションの「SnapshotID,日付、時刻を「code2」、「code3」、「code4」、「code5」、「code6」、「code7」と呼ぶ: <Tran1Time>、'<Tran1SnapshotID>、'<Tran2Time>、'<Tran2SnapshotID>、'<Tran3Time>、'<Tran3SnapshotID>

    スナップショットの記録は、データマネージャー> 'cars テーブル >タイムトラベルタブからも見ることができます。

  3. 以下のクエリにスナップショットIDまたは時刻を指定してクエリを実行し、その時点のテーブル情報を取得する。

サンプル・シナリオ
シナリオ 照会 結果
スナップショットIDを使って初期状態からデータを取り出す。 SELECT * FROM iceberg_data.automobiles.cars FOR VERSION AS OF <Tran1SnapshotID> ORDER BY Snapshot ID; 結果セクションには406件の記録が表示される。
タイムスタンプを使って初期状態からデータを取り出す。 SELECT * FROM iceberg_data.automobiles.cars FOR TIMESTAMP AS OF CAST('<Tran1Time>' AS TIMESTAMP WITH TIME ZONE) ORDER BY Snapshot ID; 結果セクションには406のレコードが表示される。
スナップショットIDを使用して、2番目のトランザクション後のデータを取得する。 SELECT * FROM iceberg_data.automobiles.cars FOR VERSION AS OF <Tran2SnapshotID> ORDER BY Snapshot ID; 結果セクションには408件の記録が表示される。
タイムスタンプを使用して3番目のトランザクション以降のデータを取得する。 SELECT * FROM iceberg_data.automobiles.cars FOR TIMESTAMP AS OF CAST('<Tran3Time>' AS TIMESTAMP WITH TIME ZONE) ORDER BY Snapshot ID; 結果セクションには409件のレコードが表示される。
2回目と3回目のトランザクションの間の時点からデータを取得する。 SELECT * FROM iceberg_data.automobiles.cars FOR TIMESTAMP AS OF CAST('Choose-a-time-between-<Tran2Time>-and-<Tran3Time>' AS TIMESTAMP WITH TIME ZONE) ORDER BY Snapshot ID; 結果セクションには408件の記録が表示される。
テーブルが作成される前の時間からデータを取得する(失敗が予想される)。 SELECT * FROM iceberg_data.automobiles.cars FOR TIMESTAMP AS OF CAST('2024-01-01 00:00:00.000 UTC' AS TIMESTAMP WITH TIME ZONE) ORDER BY Snapshot ID; 記録は見つからなかった。

テーブルロールバックの実行

watsonx.dataでは、スナップショットを使用してテーブルを以前の時点にロールバックできます。

テーブル・データを以前のスナップショットにロールバックするには、以下のようにします:

  1. データ・マネージャーに行く。

  2. テーブル cars を選択する。 のセクションから、**タイムトラベル・**タブを選択する。 スナップショットレコード(SnapshotID付き)を表示できます。

  3. 2番目のスナップショット(2番目のスナップショットには408レコードが含まれます)の行の最後にあるオーバーフローメニューをクリックし、 スナップショットへのロールバックをクリックします。 スナップショットへのロールバックの確認ウィンドウが開きます。 スナップショットにロールバックをクリックします。 データのロールバックは成功した。 さて、テーブルには408のレコードがなければならない。

  4. ロールバックを確認するには、以下のクエリを実行して、3番目のトランザクションに対応する行が削除されているかどうかをチェックする。

    • テーブルにレコード「Kia Optima」が含まれていないことを確認するためのサンプル・クエリ。
    SELECT * FROM iceberg_data.automobiles.cars WHERE car IN ('Kia Optima', 'Tesla Model S', 'Tesla Model 3');
    

    その結果、「Tesla Model S」と「Tesla Model 3」に対応するデータレコードのみがリストアップされる。 テーブルが2番目のスナップショットにロールバックされたため、テーブルには「Kia Optima」(3番目のトランザクション)に対応するレコードがありません。

    • テーブルの総行数をカウントするサンプルクエリ。
    SELECT COUNT(*) FROM iceberg_data.automobiles.cars;
    

    408行のカウントが表示されなければならない。これは、テーブルで2番目のトランザクションを実行したときのカウントと一致する。 テーブルは以前の状態(2番目のトランザクション)に戻る。