Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Iceberg Definitive Guide輪読会 Chapter9
Search
tanisushi
November 11, 2024
Technology
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Iceberg Definitive Guide輪読会 Chapter9
tanisushi
November 11, 2024
More Decks by tanisushi
See All by tanisushi
Iceberg Definitive Guide輪読会 Chapter7&8
tanisuhi
0
210
Other Decks in Technology
See All in Technology
JSONataとAWS Step Functionsで目指すRuntimelessな世界
mu7889yoon
1
530
CI/CDではもう遅い - 人とAIが迂回しないDevSecOps Verify基盤の再設計 -
kintotechdev
1
360
AIに会社の文脈を理解させる技術~上流工程・非エンジニアにも広げるハーネスエンジニアリング実践~
ochtum
0
150
IR Today: Theory, Practice, and Agents
dtunkelang
0
140
いちAWSエンジニアのAI活用を振り返る #devio2026 / devio osaka 2026 kawahara
masahirokawahara
1
210
AI感のないAWS構成図をAIエージェントに描かせたい!
sagochiko
2
460
なぜAI任せのゲームは面白くならないのか?
hirohasuyoutube
0
210
高負荷プロダクション環境におけるAWS Lambdaのリアル 〜スケールとコストを左右する実行ライフサイクルの技術仕様〜
maimyyym
2
730
OpenClawでAzure DevOpsのWiki更新を自動化する - クラウドAIだけでは届かない場所へ
yutakaosada
0
110
spanner-autoscalerに学ぶ CRD設計パターン 〜自動化と緊急時対応を両立する Kubernetesコントローラーの作り方〜
tkuchiki
0
190
AIに賢く動いてもらうためのコンテキスト〜Snowflake女子会 vol.8
snowwmn0824
0
190
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
7
790
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Amusing Abliteration
ianozsvald
1
320
Product Roadmaps are Hard
iamctodd
55
13k
sira's awesome portfolio website redesign presentation
elsirapls
0
420
GitHub's CSS Performance
jonrohan
1033
470k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.9k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Abbi's Birthday
coloredviolet
4
10k
Embracing the Ebb and Flow
colly
88
5.2k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Transcript
Iceberg Definitive Guide輪読会 Chapter9 Appache Flink
アジェンダ Flinkの概要とIcebergと使う利点 FlinkでのDDL Flinkでのデータ読み込み Flinkでのデータ書き込み まとめと所感
Apache Flinkとは ストリーム処理、バッチ処理どちらも低レイテンシで実行できる 分散エンジン 他とストリーム処理できるサービスと比べてexactly-onceへの対応が早かったり クラスタの設定が楽なのでストリームデータの処理ではよく使われているらしい
Flinkアーキテクチャ クラスタ全体を制御するJobManagerとJobManagerが割り振ったTaskを実際に遂行する TaskManagerに役割を分離することで大規模なストリーム処理と分散処理を効率的に実行
なぜFlinkとIcebergを一緒に使うのか ストリーミングデータに対して様々な恩恵を得られるから • トランザクションの一貫性を保証 • スキーマエボリューションが容易になる
• ログ生成からのレイテンシの向上 • 従来システムからの簡略化 • インクリメンタルなデータ読み込みによる処理の高速化 参考:LINEがログパイプラインにFlink+Icebergを採用している事例
環境のセットアップ Definitive Guideではローカルでセットアップする手順が記載されているが 面倒なのでFlink+Hadoopカタログを触れるコンテナイメージを利用するのが おすすめ https://github.com/gordonmurray/apache_flink_and_iceberg
FlinkでのIcebergテーブルの作成 Iceberg実行のランタイムがセットアップされていれば 簡単にIcebergのカタログを作れる CREATE
CATALOG <catalog_name> WITH ( 'type'='iceberg', 'catalog-type'=<values> <config_key>=<config_value> );
DBとテーブルの作成 テーブル作成時にWITHでコネクターの指定をしている以外は一般的なSQLで 書ける (WITH句内では他のIcebergのテーブルプロパティを指定できる) CREATE DATABASE
iceberg_db; USE iceberg_db; CREATE TABLE employee ( id BIGINT,role STRING,department STRING,salary FLOAT,region STRING ) WITH ( 'connector'='iceberg' );
Flinkでのパーティション作成 パーティションを作成したい時もWITHでコネクターの指定をしている 以外は一般的なSQLで書ける ※ 隠れパーティション非対応 CREATE
TABLE emp_partitioned_table ( id BIGINT, role STRING, ) PARTITIONED BY (role) WITH ( 'connector'='iceberg' );
ALTER TABLE テーブルプロパティを変更したい時も特殊な操作は必要ない ALTER TABLE employee SET ('write.format.default'='avro'); ALTER
TABLE employee RENAME TO emp_new; テーブル名の変更 テーブルの書き込みフォーマットの変更
バッチ読み込み SELECT文の実行前にランタイムの実行方法をbatchに指定することでジョブ実 行時にバッチでデータを読み込むことができる SET execution.runtime-mode =
batch; SELECT * FROM employee;
ストリーミング読み込み ランタイムをstreamingに指定、更にOPTIONS以下の部分で SQLプランナーの実行計画に対して追加で情報を指定することで インクリメンタルなデータに対してのクエリも実現 (※OPTIONSの部分をSQLヒントと呼ぶらしい)
SET execution.runtime-mode = streaming; SELECT * FROM employee /*+ OPTIONS('streaming'='true', 'monitor-interval'='1s')*/ ;
メタデータに対するアクセス 主要なメタデータに対するアクセスは以下の通り ※その他のメタデータに対するアクセスはリンクを参照inspecting-tables
SELECT * FROM `catalog`.`database`.`table`$history; テーブル履歴へのアクセス メタデータファイル履歴へのアクセス スナップショットへのアクセス SELECT * FROM `catalog`.`database`.`table`$metadata_log_entries; SELECT * FROM `catalog`.`database`.`table`$snapshots;
INSERT INTO 特別な処理は必要なく一般的なクエリでデータを挿入することができる バッチ処理、ストリーミング処理どちらでも実行可能 INSERT INTO employee VALUES (1,
'Software Engineer', 'Engineering', 25000, 'NA'); 値を指定して挿入するケース 他テーブルから値を挿入するケース INSERT INTO employee SELECT id, role from emp_new;
INSERT OVERWRITE 既にテーブルにあるデータを書き換えたいときに使用する IcebergのAtomicな操作のおかげでこのようなクエリを実行しても データの一貫性を保つことが可能 (※バッチモードのみ対応) INSERT OVERWRITE
employee VALUES (1, 'Software Tester', 'Engineering', 23000,'NA'); 指定された行を全て指定の値で上書きする INSERT OVERWRITE employee PARTITION(department='Engineering') SELECT * FROM updated_emp_data WHERE department='Engineering'; 指定されたパーティション値のみを上書きする
UPSERT INSERTとUPDATEの組み合わせで以下のような挙動をする (SparkやDremioのMERGE INTOと同じような操作) • レコードがある場合→更新 •
レコードがない場合→新しいレコードを挿入 実行のためにはテーブルが以下の条件が満たされている必要がある • テーブルスキーマでプライマリキーが指定されている
UPSERT INTOの実例 UPSERTその1(テーブル作成時にオプション指定) CREATE TABLE employee (
`id` INT UNIQUE, `role` STRING NOT NULL, `department` STRING NOT NULL, `salary` FLOAT, `region` STRING NOT NULL, PRIMARY KEY(`id`) NOT ENFORCED ) WITH ('format-version'='2', 'write.upsert.enabled'='true'); INSERT INTO employee VALUES (1, 'Director', 'Product', 33000, 'APAC'); UPSERTその2(INSERT操作の時にオプション指定) INSERT INTO employee /*+ OPTIONS('upsert-enabled'='true') */ VALUES (3, 'Manager', 'Engineering', 26000, 'NA');
まとめと所感 まとめ ストリーミングデータを扱うような場合でもIcebergの恩恵を得られることがわかった 所感 kafkaとか実際にストリーミングデータを処理してみないとここらへんの嬉しさわからないかも・・・