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のテーブルからデータを取得などは時々やりたくなります。

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


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

最新記事

すべて表示

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

はじめに 今回のブログではQuick Sightで作成した分析をクロスアカウントコピーするための方法を紹介します。 開発環境で作成した分析を本番環境にコピーしたい時などにこの方法が使えるのではないかと思います。 2024/07/12追記 QuickSightでアセット(データセット・分析・ダッシュボードなど)を管理する機能が追加されました。この機能を使って、アセットを複製する記事はこちらで紹介され

Amazon Redshiftのクエリがなぜかたまに遅くなる原因

始めに 弊社では、膨大なデータの夜間バッチ処理にRedshiftを採用しています。 適材適所でサービスを選択しており、夜間以外はお役御免で停止しておき、費用面を抑えるよう工夫しています。 メンテナンスウィンドウも設けて運用していて概ね問題なく稼働しています。 しかし、稀に全体的にクエリが遅くなってしまう謎の事象に悩まされていました。 今回この事象の原因を突き止めたので、その内容を共有したいと思いま

Comments


bottom of page