目次
1.はじめに
皆さんこんにちは。
データ変更に伴う共通の課題に次の通り直面しています。
データ変更の監査: 特に大規模なデータセットでは、時間の経過に伴うデータの変更を追跡するのが困難な場合があります。 これにより、データの問題解決、データ規則への準拠確認で苦労している可能性があります。
実験とレポートの再現: データ サイエンティストやアナリストが実験を実行したりレポートを生成したりする場合、最初に使用したのと同じデータにアクセスする必要があります。 ただし、実験またはレポートが最初に実行された後のデータが変更されている場合、結果を再現することが困難になる可能性があります。
ロールバック: データ パイプラインが不正なデータを書き込んだ場合、変更のロールバックで苦労している可能性があります。時に、データを更新または削除するパイプラインでは、これらの変更を元に戻すのが難しいです。
Azure Databricksのタイムトラベル、テーブルのリストアを使用すると、上記の問題を解決できます。監査、誤った書き込みや削除があった場合のデータのロールバック、実験とレポートの再現を実装しやすくなります。
今回は、 Azure Databricksのタイムトラベル、テーブルのリストアについて機能、および利用目的を説明していきます。実行の手順は次の通りです。
・ データを初期化する。
・ データを編集し、データの履歴バージョンを表示して、加えられた変更を確認する。
・ データバージョンを以前の状態にロールバックする。
2.前提要件
実施する際の前提条件は以下の通りです。
・操作ユーザーは Azure Databrick ワークスペースにアクセス権があること。
・操作ユーザーはノートブックの作成・実行権があること。作成していない場合、管理者に権限を付与してもらう様に依頼してください。
3.データの初期化
① Databricksワークスペースにログインします。
② Databricks画面のサイドバーで「新規」をクリックして「ノートブック」を選択します。
③ 新規作成したノートブック画面が表示されます。ノートブックに名前を付けて、デフォルトの言語として SQL を選択します。
④ 以下のコマンドをノートブックの 1 行目にコピぺして、Delta テーブルを作成して、そこにデータを挿入します。
※ 文法
1 2 3 4 |
CREATE CATALOG [IF NOT EXISTS] catalog_name; USE CATALOG catalog_name; CREATE SCHEMA [IF NOT EXISTS] catalog_name.schema_name; CREATE TABLE [IF NOT EXISTS] catalog_name.schema_name.table_name ( column_specification ) |
※ 例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
CREATE CATALOG IF NOT EXISTS democatalog; USE CATALOG democatalog; CREATE SCHEMA IF NOT EXISTS demoschema; CREATE TABLE democatalog.demoschema.department ( deptcode INT, deptname STRING, location STRING ); INSERT INTO democatalog.demoschema.department VALUES (10, 'FINANCE', 'EDINBURGH'), (20, 'SOFTWARE', 'PADDINGTON'), (30, 'SALES', 'MAIDSTONE'), (40, 'MARKETING', 'DARLINGTON'), (50, 'ADMIN', 'BIRMINGHAM'); |
⑤「Shift」+「Enter」キーを押して、コマンドを実行します。
実行後、指定したカタログとスキーマにテーブルが作成され、データもテーブルに挿入されます。
4.Azure Databricks のタイムトラベル
Delta テーブルを変更するたびに、テーブルの新規バージョンが作成されます。履歴情報、およびタイムトラベルを使用することで、特定の時点での操作を監査して、テーブルをロールバックすることができます。
次のコマンドを実行すると、Delta テーブルへの各書き込みごとに操作、ユーザー、タイムスタンプなど等の情報を取得できます。
以下のコマンドをノートブックにコピぺして、「Shift+Enter」を押して実行します。
※ 文法
1 |
DESCRIBE HISTORY catalog_name.schema_name.table_name |
※ 例
1 2 |
-- get the full history of the table DESCRIBE HISTORY democatalog.demoschema.department |
操作の出力には次の列があります。
ここでテーブルに2つのレコードを追加します。
以下のコードをノートブックにコピぺし、「Shift+Enter」を押して実行します。
※ 文法
1 2 3 4 |
INSERT { OVERWRITE | INTO } [ TABLE ] table_name [ PARTITION clause ] [ ( column_name [, ...] ) | BY NAME ] query |
※ 例
1 2 3 |
INSERT INTO democatalog.demoschema.department VALUES (60, 'FI', 'EDIN'), (70, 'WARE', 'SONNY') |
テーブルに対して DESCRIBE HISTORY ステートメントを再実行すると、テーブルにデータを挿入することで別の操作を実行した後、新規バージョンが表示されます。
タイム トラベルは、DESCRIBE HISTORY の出力から取得できるタイムスタンプまたはテーブル バージョンに基づいて、以前のテーブル バージョンのクエリをサポートします。
タイム トラベルでDelta テーブルをクエリーするには、テーブル名の指定の後に句を追加します。
例えば、指定されたバージョンを使用してDeltaテーブルをクエリします。
以下のコマンドをノートブックにコピぺし、「Shift+Enter」を押して実行します。
完了した後、そのバージョンのテーブルのデータが表示されます。
※ 文法
1 |
table_identifier VERSION AS OF version |
※ 例
1 |
SELECT * FROM democatalog.demoschema.department VERSION AS OF 1 |
また、以下の通りに指定された「timestamp_expression」を使用してDelta テーブルをクエリすることもできます。
※ 文法
1 |
table_identifier TIMESTAMP AS OF timestamp_expression |
※ 例
1 |
SELECT * FROM democatalog.demoschema.department TIMESTAMP AS OF '2023-08-18T03:40:32.000+0000' |
5.Azure Databricks のリストア
RESTORE コマンドを使用して、Delta テーブルを以前の状態に復元できます。
Delta テーブルは、以前の状態に復元できるようにテーブルの履歴バージョンを内部的に保持します。
以前の状態に対応するバージョンまたは、以前の状態が作成された時のタイムスタンプが、RESTORE コマンドのオプションとしてサポートされます。
例えば、指定されたバージョンに従ってテーブルを復元します。
以下のコマンドをノートブックにコピぺし、「Shift+Enter」を押して実行します。
※ 文法
1 2 3 4 5 |
RESTORE [ TABLE ] table_name [ TO ] time_travel_version time_travel_version { TIMESTAMP AS OF timestamp_expression | VERSION AS OF version } |
※ 例
1 |
RESTORE TABLE democatalog.demoschema.department TO VERSION AS OF 1 |
また、次のように指定したタイムスタンプに従って Delta テーブルを復元できます。
※ 文法
1 2 3 4 5 |
RESTORE [ TABLE ] table_name [ TO ] time_travel_version time_travel_version { TIMESTAMP AS OF timestamp_expression | VERSION AS OF version } |
※ 例
1 |
RESTORE TABLE democatalog.demoschema.department TO TIMESTAMP AS OF '2023-08-18T07:07:37.000+0000' |
コマンドの実行後、指定したタイムスタンプに従って Delta テーブルのデータが復元されます。
6.まとめ
Azure Databricksのタイムトラベル、テーブルのリストアについて機能、及び利用目的を説明しました。
今回の記事が少しでもDatabricksを知るきっかけや、業務のご参考になれば幸いです。
日商エレクトロニクスでは、Azure Databricksの環境構築パッケージを用意しています。
Azure DatabricksやAzure活用、マイクロソフト製品の活用についてご相談事がありましたらぜひお問い合わせください!
・Azure Databricks連載シリーズはこちら
この記事を読んだ方へのオススメコンテンツはこちら
この記事を書いた人
- phongcq