🐈

Amazon Athenaで正規表現をサクッと使う

2022/05/10に公開

はじめに

背景

AWS Athenaで正規表現を使おうと、下記のクエリを叩いたら、エラーが表示されました。

SELECT * FROM "reviews"."test" where REGEXP("asin", '^B[0-9A-Z]{8}0') limit 10;


また、REGEXP_EXTRACTを使ったところ,Queries of this type are not supportedのエラーが出現。
なので、Athenaで正規表現を使うにはどうしたらよいか調べます。

実践

そもそも、AmazonAthenaのクエリは、Prestoに基づいているとのこと。

Athena の DML クエリステートメントは、Athena エンジンバージョン 1 では Presto 0.172、Athena エンジンバージョン 2 では Presto 0.217 に基づいています。

エンジンバージョン1,2で依存しているPrestoのバージョンが異なるので、まずは、Athenaエンジンバージョンを調べます。

Athenaエンジンバージョンを調べる

Amazon Athena > ワークグループ

「Athena engine version 2」だったため、Presto 0.217で調べていきます。

正規表現を使う

ドキュメント(https://prestodb.io/docs/0.217/functions/regexp.html)をみていくと、regexp_likeが使えそう。

regexp_like(string, pattern) → boolean
Evaluates the regular expression pattern and determines if it is contained within string.

正規表現を使ってクエリを叩いてみる。

SELECT * FROM "reviews"."test" WHERE regexp_like("asin", '^B[0-9A-Z]{8}0') LIMIT 10;

結果

できた!

参考記事

https://docs.aws.amazon.com/ja_jp/athena/latest/ug/functions-operators-reference-section.html
https://prestodb.io/docs/0.217/functions/regexp.html

Discussion