論理的な削除の概要
データ プラットフォームとして、Azure Data Explorer は、個々のレコードを削除する機能がサポートしています。 レコードの削除は、通常、次のいずれかの方法を使用して行われます。
- これらのレコードを含むストレージ成果物も削除されることを保証するシステムを使用してレコードを削除するには、
.purge
- このような保証なしでレコードを削除するには、この記事の説明に従って を使用
.delete
します。このコマンドはレコードを削除済みとしてマークしますが、必ずしもストレージ成果物からデータを削除するとは限りません。 この削除方法は、消去よりも高速です。
コマンドの使用方法については、「構文」を参照してください。
ユース ケース
この削除方法は、個々のレコードの計画外の削除にのみ使用する必要があります。 たとえば、IoT デバイスで破損したテレメトリが一部の時間報告されている場合は、この方法を使用して破損したデータを削除することを検討する必要があります。
重複除去または更新のためにレコードを頻繁に削除する必要がある場合は、具体化されたビューを使用することをお勧めします。 「データの重複除去について具体化されたビューか論理的な削除のいずれかを選択する」を参照してください。
削除プロセス
論理的な削除プロセスは、次の手順を使用して実行されます。
- 述語クエリの実行: テーブルがスキャンされ、削除するレコードを含むデータ エクステントが識別されます。 識別されるエクステントは、述語クエリによって返される 1 つ以上のレコードを持つエクステントです。
- エクステントの置換: 識別されたエクステントは、元のデータ BLOB を指す新しいエクステントに置き換えられ、レコードごとに削除されたかどうかを示す
bool
型の新しい非表示列を持っています。 完了後、新しいデータが取り込まれなかった場合に、もう一度実行しても述語クエリからレコードは返されません。
制限と考慮事項
削除プロセスは最終処理であり、元に戻すことはできません。 操作後にストレージ成果物が削除されない場合もありますが、このプロセスを元に戻したり、削除されたデータを復旧したりすることはできません。
ネイティブ テーブルと具体化されたビューでは、論理的な削除がサポートされています。 外部テーブルではサポートされていません。
論理的な削除を実行する前に、クエリを実行し、結果が予想される結果と一致しているかどうかを確認して、述語を検証します。 コマンドをモードで
whatif
実行することもできます。これは、削除される予定のレコードの数を返します。同じテーブルに対して複数の論理的な削除を並列で実行しないでください。これにより、一部またはすべてのコマンドでエラーが発生するおそれがあります。 ただし、異なるテーブルに対して複数の論理的な削除操作を並列で実行することはできます。
同じテーブルに対して、論理的な削除および消去コマンドを並列で実行しないでください。 最初に 1 つのコマンドが完了するまで待ち、もう一方のコマンドを実行します。
論理的な削除は、クラスター URI に対して実行されます。
https://[YourClusterName].[region].kusto.windows.net
このコマンドを実行するには、関連するデータベースに対するデータベース管理者のアクセス許可が必要です。具体化されたビューのソース テーブルであるテーブルからレコードを削除すると、 具体化されたビューに影響を与える可能性があります。 削除されたレコードが 具体化サイクルによってまだ処理されていない場合、これらのレコードは処理されないため、ビューに表示されません。 同様に、レコードが既に処理されている場合、削除は具体化されたビューに影響しません。
述語の制限事項:
- 少なくとも 1 つの演算子を
where
含む必要があります。 - レコードの削除元となるテーブルのみを参照できます。
- 使用できるのは
extend
、、take
order
project
およびwhere
の各演算子のみです。 内toscalar()
では、summarize
演算子も使用できます。
- 少なくとも 1 つの演算子を
削除のパフォーマンス
削除プロセスのパフォーマンスに影響する可能性がある主な考慮事項は次のとおりです。
- 述語クエリの実行: この手順のパフォーマンスは、述語自体のパフォーマンスと非常に似ています。 述語によっては若干速かったり遅かったりする場合がありますが、違いは重要ではないと予想されます。
- エクステントの置換: この手順のパフォーマンスは、次の条件によって異なります。
- クラスター内のデータ エクステント全体のレコード分布
- クラスター内のノードの数
.purge
とは異なり、.delete
コマンドにより、データは再び取り込まれません。 述語クエリによって返されたレコードが削除済みとしてマークされるだけなので、はるかに高速になります。
削除後のクエリのパフォーマンス
レコードの削除後に、クエリのパフォーマンスが大きく変化することは想定されません。
削除されたレコードを除外するすべてのクエリに自動的に追加されるフィルターが効率的であるため、パフォーマンスの低下は予想されません。
ただし、クエリのパフォーマンスが向上する保証もありません。 一部の種類のクエリではパフォーマンスの向上が行われる可能性があります。一部のクエリではパフォーマンスが向上しない場合があります。 クエリのパフォーマンスを向上させるために、ほとんどのレコードが削除されるエクステントは、削除されていないレコードのみを含む新しいエクステントに置き換えることによって定期的に圧縮されます。
COGS (売却済商品の原価) への影響
ほとんどの場合、レコードを削除しても COGS は変更されません。
- 実際にはレコードが削除されないので、減少はありません。 レコードは、
bool
型の非表示列を使用して削除済みとしてマークされるだけで、そのサイズはごくわずかです。 - ほとんどの場合、
.delete
操作で追加のリソースをプロビジョニングする必要はないので、増加はありません。 - 場合によって、大部分のレコードが削除されるエクステントは、削除されていないレコードのみを含む新しいエクステントに置き換えることで、定期的に圧縮されます。 これにより、削除されたレコードが多数含まれる古いストレージ成果物が削除されます。 新しいエクステントはより小さいため、ストレージ アカウントとホット キャッシュの両方で消費容量は少なくなります。 ただし、ほとんどの場合、COGS に対するこの影響はごくわずかです。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示