基本的なデータの更新と削除
メニューを表示するにはスワイプしてください
標準的なデータレイクでは、単一行の更新や削除は、データセット全体を書き換えない限りほぼ不可能です。Delta Lakeはトランザクションログを使用しているため、標準SQLのUPDATEおよびDELETEコマンドをサポートし、テーブルに対して正確な修正が可能です。
前のセクションでは、データの読み取りと要約に注力しました。しかし、データはほとんどの場合静的ではありません。ダイヤモンドのレコードの一部に誤った価格が含まれていたり、特定の「cut」タイプをレポートから除外する必要が生じることがあります。
このdiamondsテーブルはDeltaテーブルであるため、従来のデータベースと同様に修正が可能です。
1. レコードの更新
UPDATEコマンドは、条件を満たす特定の行の値を変更するために使用します。例えば、すべての"Fair"カットのダイヤモンドの価格を10%増加させる場合:
UPDATE workspace.workshop.diamonds
SET price = price * 1.1
WHERE cut = 'Fair'
- SET — 列の新しい値の定義
- WHERE — 重要。
WHERE句がない場合、テーブル内のすべてのダイヤモンドの価格が更新されます。
2. レコードの削除
DELETE コマンドは、テーブルから行を完全に削除します。データが不要になった場合や誤って取り込まれた場合に使用します。
DELETE FROM workspace.workshop.diamonds
WHERE carat > 5.0
このコマンドは、5カラットを超えるすべてのダイヤモンドを特定し、テーブルのアクティブバージョンから削除します。
3. 変更後の検証
更新や削除を実行した後は、操作が期待通りに行われたかを確認するために、SELECT count などの簡単なクエリで必ず検証します。
-- Verify how many 'Fair' diamonds are left (count should be the same, but prices changed)
SELECT count(*) FROM workspace.workshop.diamonds WHERE cut = 'Fair'
4. Delta更新の安全性
DELETE や UPDATE を実行しても、Delta Lake は古いファイルから直接データを消去しません。代わりに、次の3段階のプロセスを実行します。
- 古いファイルを「無効」としてマークする
- 更新後のデータを含む新しいファイルを書き込む
- 変更内容をトランザクションログに記録する
このため、削除後でも Time Travel が機能します。履歴が手動でパージされるまで、古いデータはテーブルファイルの過去バージョンに残り続けます。
5. ベストプラクティス:SELECTによるテスト
DELETE や UPDATE を実行する前に、必ず SELECT でフィルター条件をテストすること。
- 例(誤った手順):
DELETE FROM diamonds WHERE color = 'J' - まず試すべき手順:
SELECT * FROM diamonds WHERE color = 'J'
SELECT の結果が削除したいデータと一致していれば、安全に DELETE コマンドを実行可能。
1. WHERE句なしでUPDATEコマンドを実行するとどうなりますか?
2. DeltaテーブルでDELETEコマンドを実行すると、基盤となるクラウドストレージからデータは即座に完全に消去されますか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください