Technical Blog テクニカルブログ
  1. HOME
  2. テクニカルブログ
  3. BigQueryのUDF(User Defined Function)を使ってみた

BigQueryのUDF(User Defined Function)を使ってみた

投稿者:上野 一樹

BigQueryのUDF(User Defined Function)を使ってみた

日本情報通信の上野です。
今回はBigQueryでユーザーが自由に関数を定義できる機能であるUDF(User Defined Function)について紹介します。
UDFを用いることで、フォーマット処理のような汎用性が高くて煩雑な処理を定義して使いまわすことができます。

UDFの種類

UDFには「一時的UDF」と「永続的UDF」の2種類があります。
それぞれの特徴と作成方法は以下の通りです。

一時的UDF

一次的なUDFはそのクエリ内でしか使用しない関数を定義します。
サンプルとしてdate型の引数を渡すと曜日を返すUDFを作成してみました。
さらに、SELECT文で現在の東京の日付を入れて関数を呼び出しています。

スクリーンショット (7).png

実行結果は以下の通りです。ちゃんと曜日が返ってきました。

スクリーンショット (8).png

関数のTEMPの部分はTEMPORARYと書いても問題はないですが、書く量が増えるだけなのでお勧めしません。

永続型UDF

永続的なUDFはどのQUERRYからもアクセスできる関数を定義します。
永続的なUDFは汎用的に使用する共通機能を定義することが多いです。
こちらもサンプルとして先ほどの日付を引数に曜日をかえす関数を永続型UDFで作成してみました。

スクリーンショット (10).png

一次的UDFとの違いは、TEMPの部分がなくなり関数名の前にデータセット名が入ります。
関数を呼び出すときにも、一次的UDFと違い関数名の前にデータセット名を入れます。
また、永続型UDFは関数の作成だけでなく、関数の上書きや削除もクエリで行えます。

  • CREATE FUNCTION→関数の新規作成
  • DELETE FUNCTION→関数の削除
  • REPLACE FUNCTION→関数の上書き更新

CREATE OR REPLACE FUNCTIONとすると、指定したデータセット内に同じ名前の関数があれば上書き更新を行い、なければ新規作成を行うので便利です。
作成した永続型UDFの詳細は、指定したデータセットのルーティンから確認することができ、ここから関数の編集や削除も行えます。
さらに、「ルーティンの詳細を編集」から関数に説明を付けることができます。

スクリーンショット (14).png

関数への説明の付与は、クエリからも行うことができます。

スクリーンショット (16).png

これで、作成した複数の関数に対してどの関数がどのような機能であるかを一目で確認できるようになります。
スクリーンショット (18).png

まとめ

UDFを使うことで、汎用性が高くて煩雑な処理を何度も書く手間をなくし、より可読性の高いクエリを作成することができます。皆さんもぜひ試してみてください。

ページのトップへ