【Snowflake】ユーザー定義関数(UDF)の引数に配列を指定する方法。

分析

ユーザー定義関数(UDF)の引数には、文字列や数値を指定することができますが、配列の引数も指定できます。

引数に配列を使うことで、UDFで実現できる処理の幅も広がります。

なおUDFの基本について知りたい場合は、こちらの記事を参照ください。

この記事では、UDFで引数に配列を指定する方法について説明します。

UDFで引数に配列を指定する方法

UDFで引数を配列にする際のポイントは2つとなります。

  • ①引数の型をarray指定
  • ②処理部分はPtyhon言語で記述

以下がサンプルコードとなります。

// ① 型をarrayで指定
CREATE OR REPLACE  FUNCTION array_find(sss string,search array)
RETURNS number(1,0)
LANGUAGE PYTHON
RUNTIME_VERSION = '3.8'
HANDLER = 'array_find'
as
$$

def array_find(sss, search):

    # ②処理部分はPython言語で記述
    # 欠損は0
    if sss is None:
        return 0

    # any()を使って検索
    if any(search_string in sss for search_string in search):
        return 1
    else:
        return 0

$$;

上記はarray_findという名前のUDFを作成します。UDFの引数は、文字列sssと配列searchの2つで、関数の動作としては、文字列sssの中に、配列searchで指定した文字列が含まれている場合1を返し、含まれていない場合0を返します。

以下ポイントを詳細に説明します。

①引数の型をarray指定

引数の型を配列にするには、CREATE FUNCTION句で引数の型をarrayと記述します。

②処理部分はPython言語で記述

UDFの引数を配列とした場合、処理部分はPython言語で記述します。

Pythonで配列を定義する場合、[]で囲んだ中に要素を記載、各要素は「,(カンマ)」で区切ります。

また配列へのアクセスは、配列変数[n](nは0から始まる配列の番号)でアクセスします。

# seachという配列を定義、要素は AとBとCCという3つの文字列
seach = ['A','B','CC']

#配列へのアクセスは[n] nは0~
s1=seach[0]
s2=seach[1]
s3=seach[2]

今回のサンプル関数では、any()関数、in 句 for 句を使って、文字sssの中に 配列searchで指定した文字列が含まれているかを処理しています。

UDFの呼び出し方法について

UDFの呼び出しはselect文で関数を呼び出すだけです。

配列の引数を指定する場合、Python言語と同じく、[]で囲んだ中に要素を記載、各要素は「,(カンマ)」で区切ります。

select array_find('What have you been up to these days?' , ['abc','edf','day'] );

この例では3つの文字列(’abc’、’edf’、’day’)を配列として指定しています。

まとめ

この記事では、UDFの引数として配列を指定する方法を説明しました。

UDFの引数として配列を指定することは、引数の型をarrayとするだけで実現できます。

一方処理の記載については、Python言語をある程度している必要があり、Python言語を知らない方であると難易度が少し高いです。

コメント

タイトルとURLをコピーしました