ユーザー定義関数(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文で関数を呼び出すだけです。
select array_find('What have you been up to these days?' , ['abc','edf','day'] );
この例では3つの文字列(’abc’、’edf’、’day’)を配列として指定しています。
まとめ
この記事では、UDFの引数として配列を指定する方法を説明しました。
UDFの引数として配列を指定することは、引数の型をarrayとするだけで実現できます。
一方処理の記載については、Python言語をある程度している必要があり、Python言語を知らない方であると難易度が少し高いです。
コメント