Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Iceberg Definitive Guide輪読会 Chapter7&8

tanisushi
October 31, 2024

Iceberg Definitive Guide輪読会 Chapter7&8

tanisushi

October 31, 2024
Tweet

More Decks by tanisushi

Other Decks in Technology

Transcript

  1. マネージドなカタログサービス 
 
今回使用するサービスはどちらもマネージドな 
 カタログサービスある 
 Dremio Arctic 
 Nessieカタログをホスティングしている

    
 NessieカタログがデータをGitライクに管理することを目指しているのでそれに付随した 
 機能が整っている
 
 AWS Glue Catalog 
 AWS Glue Data CatalogをIcebergカタログのメタデータレポシトリとして使用しており 
 サーバーレスで動作する
 コンパクションの自動設定とかも整ってる 

  2. 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')
  3. データをGitライクに扱う Nessieカタログのコンセプトにあるように
 Dremio SonarではSQLクエリでブランチを切って作業ができる
 
 
 /* これでカタログのメインからブランチが切れる */ CREATE

    BRANCH etl_branch IN "Defenitive_Catalog"; /* この場合は特定のコミットからブランチが切れる */ CREATE BRANCH etl_branch AT COMMIT "098a092384fa489283498acdfeffba1411287941"
  4. Dremio CloudをAWS Glue Data Catalogに繋げる 
 AWS Glue Data CatalogにつないでGlueで作られたIcebergテーブルに対して


    クエリができる(はずなのだがmetadataに対してアクセスできず敗北)

  5. 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');
  6. 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;
  7. 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 
 ◦ 保持するメタデータファイルの最大数