キュー テーブルの属性
キュー テーブルは、通常の基本テーブルによく似ていますが、非同期先入れ先出し(FIFO)キューのような動作をする点が異なります。
キュー表の最初の列には、キュー挿入タイムスタンプ(QITS)値が含まれます。CREATE TABLEリクエストでは、最初の列を以下のデータ型および属性で定義する必要があります。
TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)
行のQITS値は、その行がキュー テーブルに挿入された時間を示します(ユーザー提供によって別の値が挿入されない限り)。
キュー テーブルの行における適切なFIFO順序
以下の理由により、各行のFIFO順は厳密なものではありません。
- MPPシステムのノードのシステム クロックは同期が取られていない。
- 現時刻のタイムスタンプとは異なるユーザー指定の値がQITS列に挿入されることがある。
- トランザクションまたはリクエストのロールバックのため、すでに消費された行よりも古いQITSの値の行が復元される可能性がある。
- 1つの複数文リクエストに含まれる複数のINSERT文でデフォルト値が使用される場合、複数の行がQITS列に同じ値を使用します。
- Teradataワークロード分析管理ソフトウェアのルールのため、SELECT AND CONSUME文が遅延されることがあります。たとえば、ルールが定義されているユーザー、アカウント、またはその他のオブジェクトを文が参照する場合、文はそのルールに従います。現在実行中のリクエストが完了するまで遅延するような含まれるリクエストの属性に対して、Teradata動的ワークロード管理ソフトウェア スロットルがあると、遅延が発生する場合があります。
最善の方法は、SELECT AND CONSUME文を実行するセッションにTeradataワークロード アナライザ制約を適用しないことです。
ワークロード管理ルールの作成に関する詳細は、<Teradata® Workload Analyzerユーザー ガイド、B035-2514>を参照してください。
FIFOのpop操作のようなSELECT AND CONSUME文操作
SELECT AND CONSUME文は、以下の方法でFIFOのpopのように動作します。
- 指定されたキュー テーブルのQITS列のうち値が最も古い行のデータが返されます。
- キュー テーブルからその行が削除されます。それにより、行は1度しか処理されないことが保証されます。