- カテゴリ:
TASK_HISTORY¶
このテーブル関数を使用して、指定した日付範囲内の タスク の使用履歴をクエリできます。この関数は、Snowflakeアカウント全体、指定されたタスク、またはタスクグラフの使用履歴を返します。
構文¶
TASK_HISTORY(
[ SCHEDULED_TIME_RANGE_START => <constant_expr> ]
[, SCHEDULED_TIME_RANGE_END => <constant_expr> ]
[, RESULT_LIMIT => <integer> ]
[, TASK_NAME => '<string>' ]
[, ERROR_ONLY => { TRUE | FALSE } ]
[, ROOT_TASK_ID => '<string>'] )
引数¶
すべての引数はオプションです。
SCHEDULED_TIME_RANGE_START => constant_expr
、 .SCHEDULED_TIME_RANGE_END => constant_expr
タスクの実行がスケジュールされた過去7日以内の時間範囲( TIMESTAMP_LTZ 形式)。時間範囲が過去7日以内に収まらない場合、エラーが返されます。
SCHEDULED_TIME_RANGE_END
が指定されていない場合、関数は既に完了したタスク、現在実行中のタスク、または将来スケジュールされるタスクを返します。SCHEDULED_TIME_RANGE_END
が CURRENT_TIMESTAMP の場合、関数は既に完了したタスクまたは現在実行中のタスクを返します。現在時刻の直前に実行されるタスクは、スケジュール済みとして識別される可能性があることに注意してください。既に完了したタスクまたは現在実行中のタスクのみをクエリするには、フィルターに
WHERE query_id IS NOT NULL
を含めます。TASK_HISTORY 出力の QUERY_ID 列は、タスクの実行が開始されたときにのみ入力されます。
注釈
開始時刻または終了時刻が指定されていない場合、指定された RESULT_LIMIT 値までの最新のタスクが返されます。
RESULT_LIMIT => integer
関数によって返される行の最大数を指定する数です。
一致する行の数がこの制限よりも大きい場合、指定された制限まで、最新のタイムスタンプを持つタスク実行が返されます。
範囲:
1
~10000
デフォルト:
100
。TASK_NAME => string
タスクを指定する、大文字と小文字を区別しない文字列。非修飾タスク名のみがサポートされています。指定されたタスクの実行のみが返されます。複数のタスクが同じ名前を持っている場合、関数はこれらの各タスクの履歴を返します。
ERROR_ONLY => TRUE | FALSE
TRUE に設定すると、この関数は失敗したかキャンセルされたタスク実行のみを返します。
ROOT_TASK_ID =>string
タスクグラフ内にあるルートタスクの一意の識別子。この ID は、同じタスクの SHOW TASKS 出力にある ID 列の値と一致します。ルートタスクとタスクグラフの一部である子タスクの履歴を表示するには、 ROOT_TASK_ID を指定します。
使用上の注意¶
この関数は、 ACCOUNTADMIN ロール、タスク所有者、または MONITOR EXECUTION グローバル権限を持つロールの結果のみを返します。ロールが、 MONITOR EXECUTION 権限に加えて、タスクを保存するデータベースとスキーマに対する USAGE 権限を持つ場合以外は、出力の DATABASE_NAME および SCHEMA_NAME 値は NULL であることに注意してください。
この関数は、
RESULT_LIMIT
引数値に設定されている行数を返します。最大値は10,000行です。デフォルト値は100
です。この制限を回避するには、 TASK_HISTORY ビュー (Account Usage)を使用します。TASK_HISTORY 関数がクエリされると、そのタスク名、時間範囲、および結果制限引数が 最初 に適用され、指定されている場合はそれぞれ WHERE 句と LIMIT 句が続くことに注意してください。さらに、 TASK_HISTORY 関数は SCHEDULED_TIME の降順で記録を返します。SUCCEEDED、 FAILED、または CANCELLED の状態のタスクは通常、早めにスケジュールされているため、検索結果では一般的に後に返されます。
実際には、アカウントで多数のタスクを実行している場合、関数によって返される結果には、想定より少ない数の完了したタスクまたはスケジュールされたタスクのみが含まれる可能性があります。すでに実行されているタスクの履歴をクエリするには、
SCHEDULED_TIME_RANGE_START => constant_expr
とSCHEDULED_TIME_RANGE_END => constant_expr
引数の組み合わせを使用します。Information Schemaテーブル関数を呼び出す場合、セッションには使用中の INFORMATION_SCHEMA スキーマ または 完全修飾の関数名が必要です。詳細については、 Snowflake Information Schema をご参照ください。
この関数は、過去7日以内に実行されたすべての実行または次の8日以内にスケジュールされた実行を返すことができます。
クラウドサービスの障害時のタスク実行は、この関数の結果に重複して表示されることがあります。クラウドサービスの障害時に、Snowflakeがタスクを再実行して、そのタスクに異なるタスク SCHEDULED_TIME がある2つの UUIDs が付与される可能性があります。 TASK_HISTORY ビュー は、再実行されたタスクの最後の UUID のみを表示します。
タスクグラフ内のすべてのタスク実行は、同じタスク履歴出力を表示します。
出力¶
この関数は、次の列を返します。
列名 |
データ型 |
説明 |
---|---|---|
QUERY_ID |
TEXT |
タスクによって実行された SQL ステートメントのID です。ステートメントまたはストアドプロシージャの実行に関する追加の詳細は、 QUERY_HISTORY ビューと結合できます。 |
NAME |
TEXT |
タスクの名前。 |
DATABASE_NAME |
TEXT |
タスクを含むデータベースの名前です。 |
SCHEMA_NAME |
TEXT |
タスクを含むスキーマの名前。 |
QUERY_TEXT |
TEXT |
SQL ステートメントのテキスト。 |
CONDITION_TEXT |
TEXT |
実行するかどうかを決定するときにタスクが評価する WHEN 条件のテキスト。 |
STATE |
TEXT |
タスクのステータス:
|
ERROR_CODE |
NUMBER |
ステートメントがエラーを返した場合のエラーコードです。 |
ERROR_MESSAGE |
TEXT |
ステートメントがエラーを返した場合のエラーメッセージです。 |
SCHEDULED_TIME |
TIMESTAMP_LTZ |
タスクが実行を開始する/スケジュールされた時刻です。絶対精度を確保するために最善を尽くしますが、保証は、スケジュールされた時間の 前 にタスクが実行されないようにすることのみに限定されます。 |
QUERY_START_TIME |
TIMESTAMP_LTZ |
タスク定義内のクエリの実行が開始された時刻、または SCHEDULED_TIME が未来の場合、または現在スケジュールされている実行がまだ開始されていない場合は NULL。このタイムスタンプは、 QUERY_HISTORY によって返されるクエリの開始時間と一致します。 |
NEXT_SCHEDULED_TIME |
TIMESTAMP_LTZ |
SCHEDULED_TIME 時刻に開始されたスタンドアロンタスクまたはタスクグラフの現在の実行が時間内に完了すると仮定して、スタンドアロンタスクまたはルートタスク(タスクの タスクグラフ 内)が次に実行を開始するようにスケジュールされる時刻。 |
COMPLETED_TIME |
TIMESTAMP_LTZ |
タスクが完了した時刻、または SCHEDULED_TIME が将来の場合、またはタスクがまだ実行中の場合は NULL になります。 |
ROOT_TASK_ID |
TEXT |
タスクグラフ内にあるルートタスクの一意の識別子。この ID は、同じタスクの SHOW TASKS 出力にある ID 列の値と一致します。 |
GRAPH_VERSION |
NUMBER |
実行済み、または実行予定のタスクグラフのバージョンを識別する整数。値の増分の増加は、タスクグラフ内のタスクに対する1つ以上の変更を表します。ルートタスクが( CREATE OR REPLACE TASK を使用して)再作成された場合、バージョン番号は1から再開します。 |
RUN_ID |
NUMBER |
タスクグラフ 内のスタンドアロンタスクまたはルートタスクが本来実行を開始するようにスケジュールされている、またはされていた時間。形式はエポック時間(単位:ミリ秒)です。 . . 元の スケジュール時間とは、システムが同じタスクを再スケジュールして異なる時間に実行し、再試行またはロードのリバランスを行うまれなインスタンスを指します。その場合、RUN_IDは元のスケジュールされた実行時間を表示し、SCHEDULED_TIMEは再スケジュールされた実行時間を表示します。 . . RUN_ID は、再試行前に実行された現在のタスク/グラフの一意な識別子ではない可能性があります。RUN_ID の代わりとして、 GRAPH_RUN_GROUP_ID 列を使用することができます。 |
RETURN_VALUE |
TEXT |
タスクグラフ内の先行タスクに設定された値。戻り値は、先行タスクで SYSTEM$SET_RETURN_VALUE 関数を呼び出すことにより、明示的に設定されます。 |
SCHEDULED_FROM |
TEXT |
次のいずれか:
タスクグラフにある子タスクの実行の場合、列はルートタスクの実行と同じ値を返します。 |
ATTEMPT_NUMBER |
NUMBER |
このタスクの実行を試行した回数を表す整数。初期値は1。 |
CONFIG |
TEXT |
ルートタスクに設定されている場合はグラフレベルの構成を表示します。それ以外の場合は NULL を表示します。 |
QUERY_HASH |
TEXT |
正規化された SQL テキストに基づいて計算された ハッシュ値。 |
QUERY_HASH_VERSION |
NUMBER |
|
QUERY_PARAMETERIZED_HASH |
TEXT |
パラメーター化されたクエリに基づいて計算された ハッシュ値。 |
QUERY_PARAMETERIZED_HASH_VERSION |
NUMBER |
|
GRAPH_RUN_GROUP_ID |
NUMBER |
グラフ実行の識別子。グラフ実行に複数のタスク実行がある場合、各タスク実行は同じ GRAPH_RUN_GROUP_ID を表示します。GRAPH_RUN_GROUP_ID、および ATTEMPT_NUMBER の組み合わせは、グラフの実行を一意に識別するために使用できます。 |
BACKFILL_INFO |
OBJECT |
今後の使用のために予約されています。すべての行に対して返される値は NULL です。 |
例¶
アカウントで、最新のタスク実行(完了、実行中、または将来のスケジュール)100個のを取得します。関数によって返される行の最大数は、デフォルトで100に制限されていることに注意してください。
SELECT * FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY()) ORDER BY SCHEDULED_TIME;
アカウントにある、過去7日以内に指定された30分単位のタスクの実行履歴を取得します。
SELECT * FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY( SCHEDULED_TIME_RANGE_START=>TO_TIMESTAMP_LTZ('2018-11-9 12:00:00.000 -0700'), SCHEDULED_TIME_RANGE_END=>TO_TIMESTAMP_LTZ('2018-11-9 12:30:00.000 -0700')));
過去1時間以内にスケジュールされた、指定されたタスクの最新の実行(完了、実行中、または将来のスケジュール)10個を取得します。
SELECT * FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY( SCHEDULED_TIME_RANGE_START=>DATEADD('hour',-1,current_timestamp()), RESULT_LIMIT => 10, TASK_NAME=>'mytask'));注釈
完了または実行中のタスクのみを取得するには、
WHERE query_id IS NOT NULL
を使用してクエリをフィルターします。RESULT_LIMIT
が返される結果を既に減らした 後に このフィルターが適用されるため、1つのタスクがスケジュールされていてもまだ開始されていない場合、クエリは9つのタスクを返す可能性があります。
指定されたルートタスクのタスクグラフ内にあるすべてのタスクの実行履歴を取得します。
SELECT * FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(ROOT_TASK_ID=>'d4b89013-c942-465c-bcb8-e7037a932b04'));
最近クエリされたルートタスクのタスクグラフ内にあるすべてのタスクの実行履歴を取得します。
DESC TASK my_task SET task_id=(SELECT "id" FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))); SELECT * FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(ROOT_TASK_ID=>$task_id));