Snowflakeでのストアドプロシージャの使用

Snowflakeでのストアドプロシージャの使用

  • オーケストレーション
6分で読めます 更新日 Oct 29, 2020

ポイント: Snowflakeのストアドプロシージャは、ユーザーがコマンドのシーケンスを実行し、バッチ処理やイベントハンドリングを行うことを可能にします。JavaScriptを使用して変数管理とエラーハンドリングを行うチュートリアルが、注文価格を更新するためのプロシージャを作成する方法を示しています。

  • ストアドプロシージャはバッチのような操作を促進します。
  • Snowflakeでストアドプロシージャを作成するにはJavaScriptが必要です。

Snowflakeはストアドプロシージャをサポートしています。ストアドプロシージャを使用すると、一連のコマンドを記述し、後で使用するために保存できます。

ストアドプロシージャを使用するタイミング

以前、ユーザー定義関数(UDF)をカラムに適用する方法を説明しました。ストアドプロシージャは独自に実行されます。言い換えれば、テーブルを更新するなどの「何かを行う」ために実行されます。これがストアドプロシージャがバッチのようなアクションに優れている理由です。また、データベースイベントにストアドプロシージャを条件付きで結びつけることもできます。他のデータベース製品でトリガーと呼ばれるものと似ています。データエンジニアはストアドプロシージャを使ってデータパイプラインを作成することもできます。(このトピックは今後の投稿で詳しく探求します。)

ストアドプロシージャのためのJavaScript

SnowflakeのストアドプロシージャはJavaScriptで記述する必要があります。変数の割り当てをサポートしていないため、SQL以外のプログラミング言語を使用しなければならないのは理にかなっています。計算を実行するための変数を作成します。JavaScriptを知らなくても心配しないでください。ボイラープレートコードをコピーして、適切な場所にSQLを置くことができます。SQLはほとんどの場合唯一変わる部分です。したがって、理解する必要があることはあまりありません。SnowflakeのJavaScriptは基本的なJavaScriptです。言語の外部にあるライブラリをインポートすることはできません。したがって、配列、変数、単純なオブジェクトを作成でき、エラーハンドリングもあります。ただし、Mathライブラリの数学関数を使用することはできません。

行ごとのチュートリアル: ストアドプロシージャ

ここに一つの簡単な例を示し、コードの各行を説明します。(サンプルデータは必要ありません。)以下の関数を見てください。以下の点に注意してください:

  • 関数にパラメータを追加しますfunctionname(parameters type)
  • 関数を呼び出すにはcall functionname(parameters)と書きます。
  • 関数は何らかの値を返す必要があります。たとえそれが更新を行うだけであっても。そうしないと、NULL非nullableカラムでエラーが発生します。これは、Snowflakeのワークシートエディタが表示するための何かを必要とするためです。たとえそれがnull(NaN)値であっても。
  • 基本的な手順はexecute()を使用して、文字列に保存されたSQLコードを実行することです。データベースプログラマーは、これが結果セットを作成することを知っています。したがって、最初に返された値をスコープに取り込むには、next()を呼び出す必要があります。select文、delete、insert、さらにはupdateでも結果セットが生成されます。これらが値を返すことは予期しないかもしれません。
  • SQL文が複数の行を返す場合(SELECTのように)、(rs.next())を使用して結果をループ処理します。
  • 何らかの理由で、パラメータは小文字で構いませんが、JavaScriptコード内では大文字である必要があります。小文字の文字を使用しようとするとエラーが発生します。
    create or replace procedure setprice(ORDERNUMBER varchar(100))
    returns float 
    not null
    language javascript
    as
    $$
  
     
    sql_command = "update orders set price = 2 where ordernumber = " + ORDERNUMBER   ;
    
   
    var stmt = snowflake.createStatement(
           {
           sqlText: sql_command
           }
        );
    var res = stmt.execute();
    res.next()
    
    price = res.getColumnValue(1);
    return price;
     
  
    $$
    ;
 
 call setprice(489)

追加リソース

このようなチュートリアルをさらに探求するには、次のリソースを探索してください:

これらの投稿は私自身のものであり、必ずしもBMCの立場、戦略、または意見を代表するものではありません。

オーケストレーションの関連記事

The Briefを購読する

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ありがとう

あなたはThe Briefに登録されました
The Briefはメインフレームとエンタープライズオーケストレーション—BMC AMIとControl-M—および、両者に関するアナリストの研究、顧客の展開、イベントをカバーしています。