0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Snowflake】数ヶ月分のデータ連携をループ処理で自動化する方法

0
Last updated at Posted at 2026-04-14

本記事は個人開発環境(Snowflake等)での検証結果であり、特定の業務環境を示すものではありません。

目次

はじめに

普段業務で大量のデータを扱うことが多く、またデータを分析ツールへ投入することもあり、その中で「これは自動化できそう」と感じる場面がありました。
そこで今回は学習も兼ねて実際に個人環境で検証を行い、自動化に成功したため自動化の実装方法を紹介したいと思います。

概要

通常、数ヶ月〜数年分のデータを遡って連携する際、対象のストアドプロシージャを呼び出すコマンドを"連携日数分"手動で叩くケースがあります。
(現場によっては異なる可能性があります。)
しかし、実行コマンドを手動で作成・実行するのは、工数がかかるだけでなく、実行漏れや重複投入といった操作ミスのリスクも孕んでいます。
(まあコマンド作成は最悪Excel関数で時短できますが...。)
加えて複数ストアドプロシージャがあり、まとめて実行・投入+実行Warehouse(以降WHで表記)の切替の場合だと余計にミスを誘発しやすいです。
そこで今回はループ処理を活用した自動で投入してくれる、WHも切り替えてくれるSQLの実装例を紹介したいと思います。

前提

  • 対象ストアドプロシージャが合計5個
  • 投入データの対象期間2025-01~2025-06の半年分
  • ストアド1,3,4,5 実行WH:X-Small 実行時間:11秒
  • ストアド2 実行WH:Medium 実行時間:3分
  • ストアド1,2,3,4,5 投入期間:2025-01~2025-06まで
    ※コストについてはまた次回まとめます。

使用するループ操作(While文)

//WHILE ループは、条件がtrue 間、反復
WHILE ( <condition> ) { DO | LOOP }
  <statement>;
  [ <statement>; ... ]
END { WHILE | LOOP } [ <label> ] ;

実装例(サンプルSQL)

//2025-01~2025-06までのループ処理
execute immediate $$
declare
    start_date date default null;
    end_date date default null;
begin
    start_date := '2025-01-01'::date; --開始時期
    end_date := '2025-06-30'::date; --終了時期

    //while処理(end_dateまで1日ずつ追加して中の処理を繰り返し実行していく。)
    while (start_date <= end_date) do
        //Mediumに設定
        execute immediate 'use warehouse Medium(※実際はWH名)';

        //ストアド2
        call "ストアド2"(:start_date);

        //X-Smallで設定
        execute immediate 'use warehouse X-Small(※実際はWH名)';

        //ストアド1,3,4,5
        call "ストアド1"(:start_date);
        call "ストアド3"(:start_date);
        call "ストアド4"(:start_date);
        call "ストアド5"(:start_date);

        //1日追加
        start_date := dateadd('day',1,start_date);

    end while;

    return '分析データ投入完了';
end;
$$
;

上記のサンプルSQLのようにWhile文を活用することで終了時期まで繰り返し1日日数を追加して処理をしていくことで、手動で「コマンド実行→投入」をしなくても自動で「コマンド実行→投入」をすることができます。
ただ注意点としては、投入する期間が長ければ長いほど実行時間も長くなるので、実行前に設定されているタイムアウトを確認する必要があります。
また一度に全ての期間を投入しなくても、1ヶ月ごととか1週間ごととか状況に応じて変えて実行することも可能です。

まとめ

今回は「複数のストアドプロシージャを実行しデータを投入する必要があり、その際に一部実行時間が長くコスト最適化のため実行WHを切り替える必要がある」場合の自動化について紹介しました。
まだ実務での活用はできておらず、またテスト段階なので、エラーが発生した際の例外処理も今後実装していけれたらなと思います。

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?