Slide 1

Slide 1 text

Redshift内のデータの活⽤を Athenaにオフロードしてみた 2021/11/12(⾦) AKIBA.AWS Online #7 データアナリティクス事業部 鈴⽊ 那由太 1

Slide 2

Slide 2 text

2 ⾃⼰紹介 鈴⽊ 那由太 - nayuts クラスメソッド 株式会社 データアナリティクス事業本部 ⼊社: 2021/05 好きなサービス:Athena、Kinesis、Glue

Slide 3

Slide 3 text

3 本⽇お話しすること

Slide 4

Slide 4 text

4 本⽇お話しすること LTの技術的な要点 • RedshiftからS3へのアンロード時にCLEANPATHオプションが便利 • アンロード後にAthenaからデータを検索する際、パーティション射影が便利 想定視聴者 • Redshiftのデータに対して分析処理を⾏いたい。 • Athenaへのオフロードを考えている。

Slide 5

Slide 5 text

5 LTのテーマ Redshiftのデータを Athenaで処理したい

Slide 6

Slide 6 text

6 はじめの構成 BIツールなど Amazon Redshift RedshiftにBIツールなどがアクセスするような構成から…

Slide 7

Slide 7 text

7 ⽬標の構成 BIツールなど Amazon Athena AWS Glue Data Catalog Amazon S3 Amazon Redshift アンロード 検索 S3にアンロードしたデータにAthenaを通してアクセスするような構成にしたい。

Slide 8

Slide 8 text

8 ⽬標の構成 BIツールなど Amazon Athena AWS Glue Data Catalog Amazon S3 Amazon Redshift アンロード 検索 <ϝϦοτ> "UIFOBͷϑΣσϨʔςουɾ ΫΤϦͰ༷ʑͳαʔϏεʹԣஅ తʹݕࡧͰ͖ΔͳͲ S3にアンロードしたデータにAthenaを通してアクセスするような構成にしたい。

Slide 9

Slide 9 text

9 ⽬標の構成 ① ② BIツールなど Amazon Athena AWS Glue Data Catalog Amazon S3 Amazon Redshift アンロード 検索 <ϝϦοτ> "UIFOBͷϑΣσϨʔςουɾ ΫΤϦͰ༷ʑͳαʔϏεʹԣஅ తʹݕࡧͰ͖ΔͳͲ S3にアンロードしたデータにAthenaを通してアクセスするような構成にしたい。

Slide 10

Slide 10 text

10 Redshift内のデータ ※各カラムの説明 year:年(2021または2022) month:年⽉( 112021から012022 ) type:AまたはBまたはC ほかは省略… 以下のようなデータをRedshiftにロードしておく。

Slide 11

Slide 11 text

11 “⽬標の構成"のしくみ

Slide 12

Slide 12 text

12 ①アンロード Amazon Redshift cm-nayuts-unload/month_example ├── month=012022 │ └── 0000_part_00.parquet ├── month=112021 │ └── 0000_part_00.parquet └── month=122021 └── 0000_part_00.parquet Amazon S3 UNLOADコマンドにより、SQLでRedshiftのデータをS3にエクスポートできる。

Slide 13

Slide 13 text

13 ②検索 ※パーティション分割するケース例> • 積み上げられるデータ(トランザクションデータなど) • パーティションを作成する AthenaからS3のデータに対してSQLでクエリを実⾏できる。スキャン量で課⾦。 データを 1. パーティション分割し、2. 列指向データフォーマットにして、コストを改善できる。 cm-nayuts-unload ├── month=012022 │ └── 0000_part_00.parquet ├── month=112021 │ └── 0000_part_00.parquet └── month=122021 └── 0000_part_00.parquet SELECT col1 , col2 FROM table1 WHERE month = xxxx AWS Glue Data Catalog など Amazon S3 Amazon Athena <1について>

Slide 14

Slide 14 text

14 基本的な考え⽅のポイント Amazon Athena AWS Glue Data Catalog Amazon S3 Amazon Redshift UNLOADで実現する。 オプションにより、 パーティション分割済 み・列指向な形式でエ クスポートできる。 パーティションごとに検 索してコスト削減できる。

Slide 15

Slide 15 text

15 基本的な考え⽅のポイント Amazon Athena AWS Glue Data Catalog Amazon S3 Amazon Redshift UNLOADで実現する。 オプションにより、 パーティション分割済 み・列志向な形式でエ クスポートできる。 パーティションごとに検 索してコスト削減できる。 再アンロードしたく なったときに、そのま ま再実⾏してしまって いいの? どうやって追加する の? 無料で⾃動でやってく れるの?

Slide 16

Slide 16 text

16 アンロードのポイント

Slide 17

Slide 17 text

17 CLEANPATHオプション Amazon Redshift cm-nayuts-unload ├── month=012022 │ ├──0000_part_00.parquet (旧) │ └──0000_part_01.parquet (旧) └── month=022022 └── 0000_part_00.parquet Amazon S3 cm-nayuts-unload ├── month=012022 │ └── 0000_part_00.parquet (新) └── month=022022 └── 0000_part_00.parquet Amazon S3 2022/1のパーティションに アンロード 〜イメージ〜 TO句で指定したS3パスにある既存のファイルを削除してから、指定した場所にファイルをアンロードできる。 PARTITION BY句と組み合わせると、指定したパーティションのみファイルが削除される。 WHERE句を変えるだけで、容易に差分変更ができる。 ⽐較)ALLOWOVERWRITE

Slide 18

Slide 18 text

18 CLEANPATHオプションのメリット ■2回⽬のアンロード処理 ■ 2回⽬の結果 ■1回⽬のアンロード処理 ■ 1回⽬の結果 アンロード対象のパーティションに関しては、Redshift内のデータと⼀致する。

Slide 19

Slide 19 text

19 検索のポイント

Slide 20

Slide 20 text

20 検索するパーティションの決め⽅ ① Athena側で計算する • パーティション射影 ② Glueデータカタログに登録・参照する • SQLから追加する • ADD PARTITION • MSCK REPAIR TABLE • Glueクローラーを実⾏する など… Athenaから検索対象のパーティションを決めるには、以下のような⽅法がある。 AWS Glue Data Catalog ① ② 検索

Slide 21

Slide 21 text

21 パーティション射影 <メリット> • 検索前にGlueデータカタログに問い合わせしないので⾼速化が期待できる。 • Glueデータカタログにパーティションメタデータを追加する必要がない。 <注意点> • AWS Glue Data Catalog または Hive メタストア内のテーブルに登録された既存のパーティションメタデータ は無視される。 テーブルにパーティションキーのルールやフォーマットを設定することで、Athenaで パーティション値を計算できる。

Slide 22

Slide 22 text

22 パーティション射影の型 型 概要 ⽇付型 ⽇付の範囲とフォーマットを定義し、値を⽇付として解釈する。 整数型 整数の範囲を定義し、値を整数として解釈する。 列挙型 列挙のメンバーを定義し、値を解釈する。 挿⼊型 クエリの WHERE 句で単⼀の値を指定する。 パーティション射影の型には各々の特徴がある。

Slide 23

Slide 23 text

23 パーティション射影~⽇付型~ <テーブル定義> <検索結果> ⽇付の範囲とフォーマットを定義し、値を⽇付として解釈する。

Slide 24

Slide 24 text

24 パーティション射影 ~列挙型~ <テーブル定義> <検索結果> ※データは事前にtypeをパーティションキーにしてUNLOADする 列挙のメンバーを定義し、値を解釈する。

Slide 25

Slide 25 text

25 パーティション射影 ~挿⼊型~ <テーブル定義> <検索結果> ※データは事前にtypeをパーティションキーにしてUNLOADする クエリの WHERE 句で単⼀の値を指定する。

Slide 26

Slide 26 text

26 列挙型と挿⼊型の違い 挿⼊型はWHERE句で指定される値が単⼀である必要がある。 列挙型は単⼀である必要はないが、メンバーが増えるとDDLを修正する必要がある。 パーティション射影の型の特徴を考慮して設計する。

Slide 27

Slide 27 text

27 まとめ

Slide 28

Slide 28 text

28 まとめ • Redshiftでのアンロード時にCLEANPATHオプションを指定すると アンロード先のパーティションのデータが、Redshift のデータと整 合する。 • Athenaでアンロードされたデータを検索する際はパーティション射 影を使うとメタデータを管理する必要がなくなる。 • パーティション射影の型には各々の特徴があり、設計時に考慮する 必要がある。

Slide 29

Slide 29 text

29