top of page
検索
  • a k

データ状態によりSQLを異常終了させたい

はじめに

夜間バッチのデータ更新等では、入力テーブルが0件などのデータの状態によってSQLを継続実行せず、エラー終了したいケースがあります。

出力テーブルが0件で作成されると、後続の参照処理大きな障害を引き起こしかねないケースで、中断することで前日状態を維持したい場合です。

例えば、全件洗いがえのマスター系データが障害により0件で連携されたなど、夜間バッチの障害では時々出会う事象です。


前提

SQLの実行エラーは呼び出し元で検出し、エラー通知と必要な後処理(リトライ、中断、無視して継続)が組み込まれている必要があります。

バッチ処理はシンプルに複数SQLの連続実行で成り立たせて、1文ずつの実行結果判定は行わず、一気に一群のSQLを実行するバッチ形式が対象です。

1文ずつ呼び出し元で結果判定する仕組みの場合は呼び出し元で判定できるので、このお話はお役に立ちません。


どうしたいのか

本当はベタの複数SQL文の途中に「この状態ならエラー終了」が書きたいのです。

そして、プロシージャは(色々条件があるので)使いたくないのです。


どうすれば好きなとことでエラーにできるでしょう

条件を指定してSQL文の実行エラーを発生させます。

SQL実行エラーは0割り算を使うと簡単に発生させることが出来ます。

あとは、特定条件で0の値になる式を書くだけです。

select 1 / case when 条件 then 0 else 1 end

簡単ですね。

条件に入力テーブルの件数を入れても良いし、データの中身で許容できないものを式にするなど、結構好きな条件でSQLエラーを発生させることが出来ます。


終わりに

今回は特定条件でエラーを発生させて処理を中断するお話でしたが、場合によっては条件により処理内容を変えたいケースがあります。

条件が真の場合はAのテーブルからデータを取得、偽の場合はBのテーブルからデータを取得などは時々やりたくなります。

次はこのあたりの実装方法について書きたいと思います。


閲覧数:17回0件のコメント

最新記事

すべて表示

データ状態により異なるSQLを実行させたい

はじめに 近頃担当する業務は夜間バッチでのデータ更新処理が多く、特にDWH的にテーブル再構築(TRUNCATE/INSERT)のパターンを多く使用しています。 その中でSQLで処理を組み上げる時、エラー処理などで条件分岐で異なるSQLを実行したくなる事は珍しくありません。 多くのシステムでは呼び出し側でSQLの実行結果を参照し、次に実行するSQLを選択/実行していると思います。 また、SQLだけで

Quick Sightの分析のクロスアカウントコピー

はじめに 今回のブログではQuick Sightで作成した分析をクロスアカウントコピーするための方法を紹介します。 開発環境で作成した分析を本番環境にコピーしたい時などにこの方法が使えるのではないかと思います。 前提 コピー先アカウントとコピー元アカウントで同じ形のデータセットが存在する。 コピー元ではそのデータセットから作られた分析が存在する。 実施環境 今回のブログで紹介する手順はcloud9

Comentarios


bottom of page