Amazon Athenaのユーザー定義関数(UDF)のPreview版を試してみた
Amazon Athenaが遂にユーザー定義関数(UDF)をサポートするようです。
Amazon Athena Adds support for User Defined Functions (UDF)
独自に関数を作成する事で、ビルトイン関数では不可能な処理を実現できるようになります。
Preview版が公開されたので使い勝手を確かめてみました。
まとめ
- UDFはJava言語のAthena Query Federation SDKで開発し、AWS Lambdaに登録する
- Athenaから利用する際の構文は以下
USING EXTERNAL FUNCTION <function name>(col1 <type>) RETURNS <type>
LAMBDA '<lambda name>'
SELECT ...
- 1回のLambda関数で複数のレコードがまとめて処理される為、リクエスト料金面の問題は現時点ではなさそう
Amazon Athenaとは
USING EXTERNAL FUNCTION <function name>(col1 <type>) RETURNS <type>
LAMBDA '<lambda name>'
SELECT ...
Amazon S3内のデータを標準SQLを用いて分析できるサービスです。
試してみた
2019/11/27現在、Preview版のUDFはus-east-1リージョンでのみ利用可能です。
UDFの作成はJava言語のAthena Query Federation SDKを用いて行います。
既存ソースコードに以下の関数を追加して、jarファイルをビルドします。
public Long increment(Long input)
{
System.out.println("input:" + input);
return input + 1;
}
作成したUDF(athena-udfs-1.0.jar)をus-east-1リージョンのAWS Lambdaに登録します。
AthenaでPreview版のUDFを利用する為に、"AmazonAthenaPreviewFunctionality"という名称のワークグループを作成し、作成したワークグループに切り替えます。
以下のクエリを実行します。
USING EXTERNAL FUNCTION increment(col1 BIGINT) RETURNS BIGINT
LAMBDA 'athena_udfs_test'
SELECT v,increment(v) AS v_
FROM UNNEST(SEQUENCE(1,10000)) AS t(v)
結果
LambdaのCloudWatchログを見る限り、1回のLambda関数で多数の行がまとめて処理されている様子でした。1レコード毎にLambda関数が実行されるとリクエスト料金が跳ね上がる事を懸念していたのですが、その懸念は(あまり)なさそうです。
所感
待ちに待った機能が遂に出た、という印象です。これでビルトイン関数だけでは手が届かなかった事を実現できるようになります。
現時点での不満は、都度UDFを宣言するのに手間がかかる事でしょうか。この点は事前登録する機能が今後リリースされる事に期待します。
Author And Source
この問題について(Amazon Athenaのユーザー定義関数(UDF)のPreview版を試してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/navitime_tech/items/8de8f40f22e824849325著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .