- カテゴリ:
CHANGES¶
CHANGES 句を使用すると、明示的なトランザクションオフセットでテーブルストリームを作成しなくても、指定された時間間隔でテーブルまたはビューの変更追跡メタデータをクエリできます。複数のクエリにより、異なるトランザクションの開始と終了の間で変更追跡メタデータを取得できます。
注釈
ソーステーブルまたはソースビューとその基になるテーブルで変更追跡を有効にする必要があります。詳細については、使用上の注意 (このトピック内)をご参照ください。
クエリでは、 FROM 句で CHANGES 句が指定されています。
オプションの END キーワードは、変更間隔の終わりを指定します。結果はエンドマーカーを含みます。
構文¶
パラメーター¶
INFORMATION => { DEFAULT | APPEND_ONLY }それぞれに記録されたメタデータに基づいて返す、変更追跡データの型を指定します。
DEFAULT挿入、更新、削除(テーブルの切り捨てを含む)を含む、ソースオブジェクトに対するすべての DML の変更を返します。この変更追跡の型は、変更セットで挿入および削除された行を比較して、行レベルのデルタを提供します。たとえば、実質的な効果として、テーブル内の2つのトランザクションポイントの間に挿入されてから削除された行は、デルタで削除されます(つまり、クエリ結果内に返されない)。
APPEND_ONLY追加された行のみを返します。したがって、結合は実行されません。その結果、追加のみの変更のクエリは、行の挿入のみに依存する抽出、ロード、変換(ELT)および類似したシナリオの標準(デフォルト)変更のクエリよりも、はるかにパフォーマンスが高くなる可能性があります。
TIMESTAMP => timestampTime Travelに使用する正確な日付と時刻を指定します。値は明示的に TIMESTAMP にキャストする必要があることに注意してください。
OFFSET => time_differenceTime Travelに使用する現在の時刻との差を秒単位で
-Nの形式で指定します。Nは整数または数式です(例:-120は120秒、-30*60は1800秒または30分)。STATEMENT => idTime Travelの参照ポイントとして使用するステートメントのクエリ ID を指定します。このパラメーターは、次のいずれかのタイプのステートメントをサポートします。
DML (例: INSERT、 UPDATE、 DELETE)
TCL (BEGIN、 COMMIT トランザクション)
SELECT
STREAM => 'name'クエリされたテーブルまたはビューの既存のストリームに対する識別子(つまり、名前)を指定します。ストリーム内の現在のオフセットは、ソースオブジェクトの変更データを返すための
AT時点として使用されます。
使用上の注意¶
CHANGESディレクトリテーブル :emph:`` または 外部テーブル の変更(変更追跡メタデータを使用して解決)をクエリする場合、 :doc:` 句はサポート </user-guide/tables-external-intro>されません`。
現在、テーブルの変更追跡メタデータが記録される前に、次の 少なくとも1つ がtrueである必要があります。
CHANGES でクエリされた間隔のテーブルまたはビューで、変更追跡が有効になります。
テーブルにストリームが作成されます。
変更追跡は、 ALTER TABLE コマンドを使用して明示的に、またはストリームやテーブルの作成時に暗黙的に有効にすることができます。
どちらのオプションも、変更追跡メタデータを保存する非表示の列をテーブルに追加します。列は少量のストレージを消費します。
ビューの変更データをクエリするには、ソースビューとその基になるテーブルで変更追跡を有効にする必要があります。手順については、:ref:`label-enabling_change_tracking_views`をご参照ください。さらに、ビューにはビュー上のストリームと同じ制限が適用されます。詳細については、:ref:`label-streams_views`をご参照ください。
AT | BEFORE 句は必須であり、変更追跡メタデータの現在のオフセットを設定します。
オプションの END 句は、変更間隔の終了タイムスタンプを設定します。END 値が指定されていない場合、現在のタイムスタンプが変更間隔の終了として使用されます。
END 句は、変更追跡メタデータをクエリする目的で CHANGES 句と組み合わせる場合にのみ有効であることに注意してください(つまり、他のオブジェクトの履歴データをクエリするためにTime Travelを使用する場合、この句を AT|BEFORE と組み合わせることはできない)。
TIMESTAMP または OFFSET の値は定数式でなければなりません。
TIMESTAMP の最小時間解像度はミリ秒です。
要求されたデータがTime Travel保持期間(デフォルトは1日)を超えている場合、ステートメントは失敗します。
さらに、要求されたデータがTime Travel保持期間内にあるが、履歴データが利用できない場合(保持期間が延長された場合など)、ステートメントは失敗します。
CHANGES 句は、耐久性のある オフセットストア を維持することなく、指定された間隔での変更を計算します。詳細については、 CHANGES clause: Read-only alternative to streams をご参照ください。
例¶
次の例では、テーブルの標準(デルタ)、および追加のみの変更追跡メタデータをクエリします。END()値が指定されていないため、現在のタイムスタンプがトランザクション時間のエンドポイントとして使用されます。
次の例では、テーブルから行が削除される前のトランザクションの時点から、テーブルの追加のみの変更を使用します。
次の例は、前述の例と似ています。この例では、ソーステーブルからの変更データを新しいテーブルに入力するための開始点として、ソーステーブルのストリームに対する現在のオフセットを使用します。ストリームはソースオブジェクトで作成されるため、オブジェクトで変更の追跡を明示的に有効にする必要はありません。