0
1

More than 1 year has passed since last update.

AthenaからDeltatableのデータをReadする その2

Posted at

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に変更しします。

Screenshot 2023-03-29 at 20.08.52.jpg

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を指定してもらえればと思います。

Screenshot 2023-03-29 at 20.11.50.jpg

もうあとはQueryを実行するだけです。

Screenshot 2023-03-29 at 20.13.23.jpg

Athena側からもデータがちゃんと読めることが確認できました。

また、以前の方式はgenerate symlinkを使ってDelta tableの更新を行わないと、Athena側で
古いデータが見えてしまっていたのですが、今回のAWS様のupdateによりgenerate symlinkの更新作業は不要となりました。

更新前の件数

Screenshot 2023-03-29 at 20.19.50.jpg

既存tableへのappend

df.write.format('delta').mode('append').save('s3://XXXXXX/external_bike')

更新後の件数

Screenshot 2023-03-29 at 20.20.02.jpg

まとめ

DeltaのtableをAthenaからReadしやすくなったので、幅が広がったかなと思います。
また、Delta tableの統計情報を利用してのqueryになるので、無駄なファイルのscanをskipするなどの機能も享受できますので、ぜひお試しを。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1