Slide 1

Slide 1 text

Iceberg Definitive Guide輪読会 
 chapter7&8
 Dremio’s SQL EngineとAWS Glue


Slide 2

Slide 2 text

本日話すこと 
 各サービスでのIcebergテーブルの作成と最適化の自動
 DremioのGitライクなデータ操作
 (DMLでの操作とかあんま楽しくなかったから外してしまった・・・)
 
 
 
 
 


Slide 3

Slide 3 text

アジェンダ 
 カタログのおさらい
 Dremio’s SQL Engine
 AWS Glue
 AWS Athena
 まとめ
 
 


Slide 4

Slide 4 text

アジェンダ 
 カタログのおさらい 
 Dremio’s SQL Engine
 AWS Glue
 AWS Athena
 まとめ
 
 


Slide 5

Slide 5 text

カタログの要件 
 以下の要件を満たしていればカタログとして成立する 
 ● Iceberg Catalogは、テーブルのリスト、作成、削除、存在確認、名前変更などの機能 
 ● 現在のテーブルパスをメタデータファイルのファイルパスにマッピングする機能 
 
 
 
 
 


Slide 6

Slide 6 text

カタログがたくさん 
 そのためカタログが世にたくさんある状況 
 それぞれIcebergではあるのだが機能的な差がある
 ● Polarisカタログ
 ● Hiveカタログ
 ● Glueカタログ
 ● Nessieカタログ
 ● Hadoopカタログ
 ● RESTカタログ
 ● etc…
 


Slide 7

Slide 7 text

マネージドなカタログサービス 
 
今回使用するサービスはどちらもマネージドな 
 カタログサービスある 
 Dremio Arctic 
 Nessieカタログをホスティングしている 
 NessieカタログがデータをGitライクに管理することを目指しているのでそれに付随した 
 機能が整っている
 
 AWS Glue Catalog 
 AWS Glue Data CatalogをIcebergカタログのメタデータレポシトリとして使用しており 
 サーバーレスで動作する
 コンパクションの自動設定とかも整ってる 


Slide 8

Slide 8 text

アジェンダ 
 カタログのおさらい
 Dremio’s SQL Engine 
 AWS Glue
 AWS Athena
 まとめ
 
 


Slide 9

Slide 9 text

Dremio SQL Query Engineとは 
 分散SQLクエリエンジン
 Icebergを扱うなら一番速くてコスパ最強を謳っている
 (細かい検証を行った記事等は見つからなかったため真偽不明) 


Slide 10

Slide 10 text

SonarとArctic 
 Dremio Cloud上ではクエリエンジンSonarと
 マネージドなIcebergカタログであるArcticが提供されている


Slide 11

Slide 11 text

DremioでIcebergテーブルを作ってみる 
 Icebergを扱うように作られているので特に指定等なく作れる
 /* Create a new folder in which your table will reside */ CREATE FOLDER "Defenitive_Catalog"."my_folder" /* Create a new table */ CREATE TABLE "Defenitive_Catalog"."my_folder"."nyc_trips" ( pickup_datetime TIMESTAMP, passenger_count INT, trip_distance_mi FLOAT, fare_amount FLOAT, tip_amount FLOAT, total_amount FLOAT) /* copy data from S3 bucket */ COPY INTO "Defenitive_Catalog"."my_folder"."nyc_trips" FROM '@Samples/samples.dremio.com/' FILES ('NYC-taxi-trips.csv')

Slide 12

Slide 12 text

自動コンパクション Dremio cloudのArctic Catalogs上で各テーブルに対して設定が設けられる
 コンパクションをかける周期やターゲットファイズサイズ等を指定可能
 


Slide 13

Slide 13 text

自動VACUUM Dremio cloudのArctic Catalogs上でカタログに対して設定が設けられる
 テーブル単位で実施したい場合はそういうジョブを作成する必要があるらしい
 
 


Slide 14

Slide 14 text

データをGitライクに扱う Nessieカタログのコンセプトにあるように
 Dremio SonarではSQLクエリでブランチを切って作業ができる
 
 
 /* これでカタログのメインからブランチが切れる */ CREATE BRANCH etl_branch IN "Defenitive_Catalog"; /* この場合は特定のコミットからブランチが切れる */ CREATE BRANCH etl_branch AT COMMIT "098a092384fa489283498acdfeffba1411287941"

Slide 15

Slide 15 text

データをGitライクに扱う ブランチごとに違うデータを保持しそれを参照できる
 (この例ではSELECTだが他クエリについても同様に実行可能)
 
 /* mainブランチを参照*/ SELECT COUNT(*) FROM "Defenitive_Catalog"."my_folder"."nyc_trips" AT REF main; /* etl_branchを参照*/ SELECT COUNT(*) FROM "Defenitive_Catalog"."my_folder"."nyc_trips" AT REF etl_branch;

Slide 16

Slide 16 text

データをGitライクに扱う ブランチごとに違うデータを保持しそれを参照できる
 (この例ではSELECTだが他クエリについても同様に実行可能)
 
 /* mainブランチを参照*/ SELECT COUNT(*) FROM "Defenitive_Catalog"."my_folder"."nyc_trips" AT REF main; /* etl_branchを参照*/ SELECT COUNT(*) FROM "Defenitive_Catalog"."my_folder"."nyc_trips" AT REF etl_branch;

Slide 17

Slide 17 text

データをGitライクに扱う 当然のことながらマージも存在し別ブランチで行った
 既存テーブルの更新や新テーブルの追加も可能だった
 
 /* etl_branchをmainブランチにマージして変更を反映 */ MERGE BRANCH etl_branch INTO main IN "Defenitive_Catalog";

Slide 18

Slide 18 text

データをGitライクに扱う ArcticCatalog上から各ブランチの変更履歴を確認できる。


Slide 19

Slide 19 text

Dremio CloudをAWS Glue Data Catalogに繋げる 
 AWS Glue Data CatalogにつないでGlueで作られたIcebergテーブルに対して
 クエリができる(はずなのだがmetadataに対してアクセスできず敗北)


Slide 20

Slide 20 text

アジェンダ 
 カタログのおさらい
 Dremio’s SQL Engine
 AWS Glue 
 AWS Athena
 まとめ
 
 


Slide 21

Slide 21 text

AWS Glueとは 
 多用なデータソースのメタデータをフルマネージドかつサーバーレスで
 管理くれるETLサービス
 
 
 
 下手な説明をするよりBlackBeltのリンクを貼るスタイルGlue Black Belt


Slide 22

Slide 22 text

GlueでIcebergテーブルを作ってみる 
 ETL jobs > Visual ETLで読み込み対象するとするS3を指定し、
 Job details > Advance propertiesから--datalake-formats=icebergを設定
 


Slide 23

Slide 23 text

GlueでIcebergテーブルを作ってみる 
 VisualETLで生成されたScriptにいつも呪文等を追記


Slide 24

Slide 24 text

今はマネジメントコンソールから普通に作れる テーブル作成時のオプションにIcebergがある


Slide 25

Slide 25 text

自動コンパクション Glue Data CatalogからEnable compactionすることによって
 自動で該当テーブルのコンパクションしてくれるようになるらしい
 


Slide 26

Slide 26 text

アジェンダ 
 カタログのおさらい
 Dremio’s SQL Engine
 AWS Glue
 AWS Athena 
 まとめ
 
 


Slide 27

Slide 27 text

AWS Athenaとは 
 S3上にあるデータに対しSQLクエリを発行して簡単に分析できるクエリサービス
 
 
 
 
 下手な説明をするよりBlackBeltのリンクを貼るスタイルAthena Black Belt


Slide 28

Slide 28 text

AthenaでIcebergテーブルを作る アドホックにIcebergテーブルを作りたいだけならAthenaでも可能!
 CREATE TABLE definitive_guide.iceberg_table_test( pickup_datetime TIMESTAMP, passenger_count INT, trip_distance_mi FLOAT, fare_amount FLOAT, tip_amount FLOAT, total_amount FLOAT ) PARTITIONED BY (day(pickup_datetime)) LOCATION 's3://definitive-athena/' TBLPROPERTIES ('table_type'='ICEBERG');

Slide 29

Slide 29 text

AthenaでIcebergテーブルを作る CTASですでにある既存のテーブルからIcebergテーブルを作成できる
 CREATE TABLE ctas_iceberg_parquet WITH (table_type = 'ICEBERG', format = 'PARQUET', location = 's3://definitive-athena/CTAS_Iceberg/' is_external = false, partitioning = ARRAY['day(pickup_datetime)'], ) AS SELECT passenger_count, total_amount, pickup_datetime FROM normal_table;

Slide 30

Slide 30 text

AthenaのIcebegテーブル作成時のオプション Athenaでテーブル作成時にWITH句の中で使用可能な最適化オプション
 ● optimize_rewrite_data_file_threshold 
 ○ データファイルに対するコンパクションの閾値 
 ● optimize_rewrite_delete_file_threshold 
 ○ 削除ファイルに対するコンパクションの閾値 
 ● vacuum_min_snapshots_to_keep 
 ○ メインブランチに保持するスナップショットの最小数 
 ● vacuum_max_snapshot_age_seconds 
 ○ メインブランチに保持するスナップショットの最大保存期間 
 ● vacuum_max_metadata_files_to_keep 
 ○ 保持するメタデータファイルの最大数 


Slide 31

Slide 31 text

アジェンダ 
 カタログのおさらい
 Dremio’s SQL Engine
 AWS Glue
 AWS Athena
 まとめ
 
 


Slide 32

Slide 32 text

まとめ
 Dremio、AWSどちらもともに進化Definitive Guideが
 書かれた時よりも進化していた(2024年9月9日現在)
 
 今後もそれぞれドンドン進化して行くことが予想されるので 
 キャッチアップが欠かせない!