RedshiftのUDF(ユーザー定義関数)をAWS Lambdaで実装できるようになりました

まさか、RedshiftのUDFがAWS Lambdaで実装できる日がくるなんて
2020.10.27

はじめに

好物はインフラとフロントエンドのかじわらゆたかです。 社内のAWS Big Data Blog のRSSを流してくれるSlackを見ていたら以下の記事が配信されており、びっくりしたのでその勢いでブログを書いています。

タイトルにも書いてありますが、RedshiftのUDF(ユーザー定義関数)をAWS Lambdaで実装できるようになったとのことです。

UDF(ユーザー定義関数)がAWS Lambdaで実装できると何が嬉しいの?

まず、UDFの概要については以下のブログを確認してください。

UDFはRedshiftが自前の関数では対応できない処理に対して、Pythonでの実装を行うことでユーザー独自の関数を作ることができる機能になります。

たとえば、私が昔に実装した例だとSHA2のハッシュ値を求めるといった実装をしていましたが、この当時のUDFはRedshiftの内部での処理の拡張であり、なにか外部のAPIからのレスポンスを受け取るといったことはできませんでした。 *1またPython以外で実装すると言ったことは一切できませんでした。

ですが、今回のアップデートでLambdaで処理が行える様になると機能の紹介ブログにも有りましたが、RedshiftからDynamoDBにアクセスするといった事もできますし、C#やRuby等UDFで扱うことのできなかった言語での実装も行えることになります。 実装言語についてはLambdaにはカスタムランタイムという機能があるので、言語の制約は殆どなくなったと言えるかと思います。

あとは、社内でこの話をしたときに出てきたのは、UDF経由でSagemakerの機械学習モデルを利用するといったことができるのではないかと言った話も出ました。 内容としては下記の玉井のSnowflakeのネタになるのですが、Redshiftで行う場合は、API Gatewayを建てること無く使えることになるので、そういった点もメリットになりそうです。

いつから使えるの?

フォーラムよるとアップデートが適用された後、クラスタのバージョンが1.0.19506 か 1.0.19884 もしくは 1.0.20091になることで利用可能になるとのことです。

手元のRedshiftで確認してみました

$ aws redshift describe-clusters  --cluster-identifier xxxxxxxxxxxxx |  jq '.Clusters[] | .ClusterVersion, .ClusterRevisionNumber'
"1.0"
"20091"

早速使えそうなので、いろいろ動かして検証してみたい思います。

結論

Lambda大好きな自分としてはこんな形のアップデートが来るとは思っていませんでした。 これによりRedshiftの活用のケースがものすごく増えることになりそうです。

脚注

  1. なお、当該機能はすでにRedshiftで実装ずみになります。