Delta tableのデータをAthenaからreadする
DeltaのデータをAthenaからreadする方法はこちらの記事でもご紹介いただいていますが、方式にupdateがあったので、shareさせていただければと思います。
設定項目
項目としてはシンプルで
- AthenaのEngineをv3に変更
- Glue catalogにExternal tableとしてDelta tableを登録
という方式になります。
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/delta-lake-tables.html
それではやってみましょう。
実践
何はともあれ、delta tableをまず作成します。
Delta tableの作成
# サンプルデータの読み込み
df = spark.read.format('csv').option('header', True).load('/databricks-datasets/bikeSharing/data-001')
# external tableとして書き込み
df.write.format('delta').save('s3://XXXXXX/external_bike')
Athena側の設定
AWSコンソールから、AthenaのWorkgroup設定に移動して、Query Engine versionをv3に変更しします。
Query EditorからDelta tableのあるS3パスをLOCATION句にセットして実行します。
※以前はQueryの際に、LOCATIONにsymlinkの設定や、SERDE Formatの設定が必要でしたが不要になりました。
CREATE EXTERNAL TABLE
suda_default.suda_delta_test_exv3
LOCATION 's3://XXXXXXX/external_bike/'
TBLPROPERTIES ('table_type' = 'DELTA')
実行すると、Glue Catalog側にtableの定義が入ります。すべてのcolumnがSTRINGになっていますが、実際やるときはちゃんとcolumn typeを指定してもらえればと思います。
もうあとはQueryを実行するだけです。
Athena側からもデータがちゃんと読めることが確認できました。
また、以前の方式はgenerate symlinkを使ってDelta tableの更新を行わないと、Athena側で
古いデータが見えてしまっていたのですが、今回のAWS様のupdateによりgenerate symlinkの更新作業は不要となりました。
更新前の件数
既存tableへのappend
df.write.format('delta').mode('append').save('s3://XXXXXX/external_bike')
更新後の件数
まとめ
DeltaのtableをAthenaからReadしやすくなったので、幅が広がったかなと思います。
また、Delta tableの統計情報を利用してのqueryになるので、無駄なファイルのscanをskipするなどの機能も享受できますので、ぜひお試しを。