Amazon Redshiftチームは絶好調です。彼らはお客様のフィードバックに耳を傾け、新しい機能を常にリリースし続けています!以下は、強く待ち望まれていた強力な新機能についてのアナウンスです。
— Jeff;
Amazon Redshiftはペタバイトまでスケール可能なデータウェアハウスを簡単に起動する事ができます。Amazon Redshift側でインフラを管理してくれるため、ユーザは運用を気にすることなく、$1,000/テラバイト/年以下の安価な利用費用で分析に集中することができます。Amazon Redshiftの価格とパフォーマンスは、お客様が多様なデータを分析することを可能にし、お客様自身のビジネスの理解を深めることを手助けします。Yelp、AmplitudeやCakeのブログに書かれているように、私達のお客様は、データウェアハウスをスケールさせる事によって可能になる範囲を広げ続けています。
Amazon Redshiftの利便性を向上させ、お客様の新しいインサイト(洞察)をより簡単に得られるようにする機能として、Amazon Redshiftにユーザ定義関数(user-defined functions: UDF)を発表できることを嬉しく思います。PostgreSQLのUDFと同じシンタックスで、カスタム版Python 2.7を使ってスカラーファンクションを作成することができ、クラスターの中で並列に実行することができます。
以下がUDFを作成する際のひな形です:
CREATE [ OR REPLACE ] FUNCTION f_function_name
( [ argument_name arg_type, ... ] )
RETURNS data_type
{ VOLATILE | STABLE | IMMUTABLE }
AS $$
python_program
$$ LANGUAGE plpythonu;
スカラーUDFはビルトイン関数のROUNDやSUSTRING等と同様に、1つの結果をそれぞれのインプットに対して返します。一度定義するだけで、任意のSQLの中でビルトイン関数と同様にUDFを利用可能になります。
独自のUDFを作成する際にはPythonライブラリーにある膨大なPython関数を活用してSQLで記述することが難しい処理を容易に記述することが可能です。またユーザ自身のカスタムライブラリーをS3やWebから直接追加して利用することも可能です。Amazon RedshiftのUDFには、最初からPython標準ライブラリ(※訳注:日本語ドキュメントはこちら)が用意されており、準備作業無しで使うことが可能です。さらに、標準ライブラリ以外の以下のライブラリを含んでいます:
- NumPy, SciPy:これらは数学的な処理を提供します。多次元オブジェクトを作成し、行列処理をし、最適化アルゴリズムを実装し、統計処理を実行することができます。
- Pandas:NumPyとSciPyの上に構築されたハイレベルデータ操作ツール。データ分析やエンドツーエンドのモデリングワークフローを実行することができます。
- DeteutilとPytz:これらは日付とタイムゾーンの操作を容易にします(例えば、次のうるう年での復活祭(Easter)まで何ヶ月あるか、といった計算が可能です)。
UDFは複雑な操作をシンプルに実装できます。例えば、URLからホスト名を抽出したい場合、以下のように正規表現を利用することができます:
SELECT REGEXP_REPLACE(url, '(https?)://([^@]*@)?([^:/]*)([/:].*|$)', ‘\3') FROM table;
もしくは、PythonのURLパースライブラリであるURLParseモジュールをインポートしてホスト名を抽出する関数を書くこともできます:
CREATE FUNCTION f_hostname(url VARCHAR)
RETURNS varchar
IMMUTABLE AS $$
import urlparse
return urlparse.urlparse(url).hostname
$$ LANGUAGE plpythonu;
こうすることでSQLで以下のように記述が出来るようになります:
SELECT f_hostname(url)
FROM table;
お客様はご存知のように、Amazon Redshiftはセキュリティをとても重視しています。UDFは、完全に分離された制限付きのコンテナの中で実行されています。つまり、UDFによってクラスターを異常停止させたり、不正な処理でパフォーマンスにネガティブなインパクトを与えることは出来ないようになっています。加えて、関数の中からファイルやネットワークにアクセスすることは出来ないようになっています。このように強い管理状態に置かれているにも関わらず、UDFはAmazon RedshiftのMPP(massively parallel processing:超並列処理)を活用でき、各ノードで並列実行されることにより、パフォーマンスを最大化します。
UDFの作成方法や使い方を知るには、オフィシャルのドキュメントをご覧ください。またAWS Big Data blogの詳細な投稿も参考にしてください。また、APNパートナーのLookerが書いたハウツーガイドも参照してください。もし、作成したUDFを他のお客様とシェアしたいということであれば、ぜひredshift-feedback@amazon.comまでご連絡ください。APNパートナーのPeriscopeはすでに複数の有用なスカラーUDFを作成してこちらで公開しています。
これから2週間にかけて、クラスターにこの新機能が順次展開されていく予定で、いつ適用されるかはご利用のリージョンとメンテナンスウィンドウのセッティングに依存します。新機能が利用可能になったクラスターはバージョン1.0.991になります。私達は多くの方々がUDFを心待ちにしていただいていた事を知っていますし、辛抱強くお待ちいただいた事に感謝いたします。引き続きフィードバックをredshift-feedback@amazon.comにてお待ちしております。
— Tina Adams, Senior Product Manager
(付記)このUDFを事前にご評価していただいていた日本のお客様からエンドースを頂いていますので、ここで紹介します。
Amazon RedshiftのUDFは待望の機能です。
UDFが追加されたことでテキストマイニングやパス分析のような高度な分析が可能になるでしょう。
UDFによってRedshiftの果たす役割は大きく拡大するはずです。
クックパッド株式会社
エンジニア
青木 峰郎 様
なお、上記翻訳にあるようにこの新機能はこれから2週間かけて各リージョンに展開されていく予定で、東京リージョンには本稿執筆時点ではまだ展開されていません。しかし他リージョン、例えばオレゴン(US-WEST-2)にはすでに展開されていますので、オレゴンで新しくクラスターを立てていただければUDFを作成する事が出来ます。ぜひお試しください!
翻訳:下佐粉 昭
原文:https://aws.amazon.com/jp/blogs/aws/user-defined-functions-for-amazon-redshift/