Amazon S3上のParquetファイルをDuckDBでクエリする事例
株式会社ナイルワークス / chokkoyamada
メンバー / バックエンドエンジニア / 従業員規模: 11名〜50名 / エンジニア組織: 11名〜50名
利用プラン | 利用機能 | ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
---|---|---|---|---|
特になし | S3 API | 10名以下 | 2024年6月 | B to B B to C |
利用プラン | 特になし |
---|---|
利用機能 | S3 API |
ツールの利用規模 | 10名以下 |
ツールの利用開始時期 | 2024年6月 |
事業形態 | B to B B to C |
アーキテクチャ
アーキテクチャの意図・工夫
リアルタイムデータはAurora PostgreSQLで、過去データはS3 + Parquet + DuckDBで管理するというAuroraとDuckDBを組み合わせたハイブリッドアプローチ。PostgreSQLに置くのは直近のデータだけです。
S3にある1つ1つのファイルが大きすぎる場合には、Lambdaを使ってS3ファイルの前処理や変換も行っています。
データ形式としてはParquet、Iceberg(予定)を採用し、時系列データの中長期での蓄積に対応できるようにしています。
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
IoTデータの保存方法とクエリ方法に課題がありました。 ドローンから送信されるリアルタイムログ(例: 意図しない着陸や不審な挙動の検知)を保存・監視する要件がありました。 初期段階ではRedisを使用していましたが、分析クエリや時系列比較に対応できていませんでした。 Aurora(PostgreSQL)への移行後も、膨大なデータ量によるパフォーマンス劣化に直面しました。
どのような状態を目指していたか
ニアリアルタイムでデータを保存し、数秒以内にクエリ可能な状態とする 時系列の前後データ比較による監視とSlackアラート送信ができること 過去データの効率的な分析環境の構築
比較検討したサービス
- Amazon Athena
- BigQuery
- Snowflake
- Amazon Redshift(Serverless)
- Timestream
- Amazon DynamoDB
比較した軸
複雑な技術・プロダクトを避ける(学習・運用コスト低減)。 リアルタイムクエリ頻度の高さと、過去データ参照の頻度のバランス。 コストの低さ。
選定理由
DuckDBのシンプルさとローカル環境利用によるコスト削減。 S3やParquetなどファイルベースデータとの親和性。 マルチコア活用による優れたクエリ性能。
導入の成果
改善したかった課題はどれくらい解決されたか
RedisやPostgreSQLで抱えていた課題がDuckDBによって解決。
どのような成果が得られたか
コスト効率の高いデータ保存と分析基盤を構築できた。 リアルタイム監視と過去データ分析の両立を実現できた。
導入時の苦労・悩み
FirehoseやGlueを介したスキーマ定義の手間。 リアルタイムクエリ用のPostgreSQLとの連携方法。
導入に向けた社内への説明
上長・チームへの説明
データはParquet形式でS3に置いた状態で、DuckDBはクエリエンジンとしての利用だったため、使い始めることの障壁やデメリットはなくすぐに使い始められたので、特に事前の説明はしていません。
活用方法
アドホックな分析をしたいときに活用しています。
よく使う機能
S3上のParquetファイルの読み書きとSQLによるデータ抽出・データ分析
ツールの良い点
- 学習コストの低さ。
- 高いクエリ性能とコスト効率。
- クライアントベースでの自由度。
ツールの課題点
データのアクセス権に関する機能は乏しいためセンシティブな情報の管理には向いていない。
ツールを検討されている方へ
DuckDBは中小規模のデータマネジメントに取り入れやすいツールです。
大規模分析にはメインで使うことは難しいので、他ツールとの組み合わせを検討するのがよいと思います。
今後の展望
Iceberg(S3 Tables)の活用。
Lambdaとのさらなる連携強化。
株式会社ナイルワークス / chokkoyamada
メンバー / バックエンドエンジニア / 従業員規模: 11名〜50名 / エンジニア組織: 11名〜50名
株式会社ナイルワークス / chokkoyamada
メンバー / バックエンドエンジニア / 従業員規模: 11名〜50名 / エンジニア組織: 11名〜50名
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法