# データ収集 ## コンポーネントについて | コンポ―ネント | 内容 | | ---------------- | ---------------------------------------------------------------------- | | Parquet | 列指向のバイナリ形式のデータファイル | | DuckDB | 手元で動く小さなDWH / Parquet/CSVに強い(ローカル向け) | | BigQuery | マネージド型の DWH(データウェアハウス) | | ClickHouse | 列指向DBの代表格(超高速集計、リアルタイム分析) | | Apache Druid | 時系列分析やダッシュボード用途に強い / Supersetと相性がよい | | Apache Pinot | Druidに似ていて、リアルタイム分析に特化(広告配信やA/Bテスト分析など) | | Jupyter Notebook | | | Metabase | | | Superset | | ### DuckDB(クエリエンジン) 軽量・組み込み型の分析データベース SQLiteが「小さなトランザクションDB」なら、DuckDBは「小さなOLAPエンジン」。 イメージとしては以下の通りです。 SQLite:小さなアプリ用に最適化されたトランザクションDB DuckDB:データ分析のために最適化された組み込みエンジン * サーバ不要 * 1つのライブラリ/プロセスで動く。インストールもシンプル(Python, CLI, R, C/C++など) * 列指向ストレージ:大量データのスキャンや集計に強い。 * 外部ファイルを直接クエリできるのが大きな特徴。 **ユースケース** * 毎月の CSVやParquetを置くだけで分析 * Jupyter NotebookやPythonスクリプトの中で 即席SQLエンジンとして活用 * BIツール(Metabase / Superset / Tableau)に接続して レポート化 ### Parquet Parquet(パーケイ) は列指向のバイナリ形式のデータファイル です。 Apache が開発したオープンフォーマットで、ビッグデータ処理や分析用に広く使われています。 * Parquet のファイル拡張子は .parquet(例: `logs_2025_09.parquet`) * 列指向フォーマット * 圧縮効率が高い * 列ごとに同じ型・似た値が並ぶため、圧縮(Snappy/Zstd/Gzipなど)が効きやすい * CSVは全部テキスト扱いだが、Parquetはカラムごとに「整数」「浮動小数」「日付」などの型を保持 * park / Hive / Presto / BigQuery / Snowflake / DuckDB / Pandas など、ほとんどの分析基盤がネイティブ対応 **CSV(行)** ```csv id,name,age 1,Alice,24 2,Bob,30 3,Charlie,28 ``` **Parquet (列指向・バイナリ)** ``` id: [1,2,3] name:[Alice,Bob,Charlie] age: [24,30,28] ``` ### BigQuery マネージド型の DWH(データウェアハウス)で 提供元はGoogle Cloudです * サーバ運用不要(完全マネージド) * データを GCS に置いて「外部テーブル」でクエリも可能 * 料金は ストレージ+スキャンしたデータ量に応じて課金。 * 同時接続や大規模並列処理が強く、Looker StudioなどBIツールと相性抜群。 * 無料プラン * 毎月ストレージ部分で少量(例 10GB)まで無料の枠がある。 * クエリ処理も、毎月一定量(例 1TB の処理量)まで無料。 **ユースケース** * 数百GB〜PB規模のデータをクラウドでガッツリ分析したいとき。 * 運用を省きたいとき ### ClickHouse 列指向DBの代表格(超高速集計、リアルタイム分析) ログ分析、イベントデータ処理に強い。 ## システム構成 ### 1. CSV PoCならCSVのみで運用することも多々あります 運用ルールとしてよくあるのは以下のようなものです * ディレクトリは y=YYYY/m=MM[/d=DD] のHive風で粒度を切る * ファイル名は 日付+ソース+バージョン を含める `例: events_2025-09-13_sourceA_v1.csv` * スキーマ/品質 * スキーマ表用意(列名・型・必須/NULL・説明) * 区切り・エンコーディング(UTF-8)・改行コード(LF) を固定 * ヘッダ1行固定、列順は変えない(変えるなら列マップを同梱) * NULLは "" or 明示トークン(NULL)で統一 * タイムスタンプは ISO 8601 (UTC推奨):2025-09-13T00:00:00Z ### 2. CSV + DuckDB + (Parquet) 運用する際にディレクトリ構成に設計が必要になります。 ディレクトリ設計例 ``` data/ raw_csv/ y=2025/m=09/*.csv # “年/月”で月次パーティション parquet/ y=2025/m=09/*.parquet # 変換先(後述のバッチで作る) duckdb/ lake.duckdb # メタ・ビュー定義だけを持つDBファイル ``` ### 3. (列指向DWH) ClickHouse/Apache Druid/Apache Pinot ClickHouse / Apache Druid / Apache Pinot は、CSV以外のフォーマットや ストリームからそのまま取り込みできますし、直接INSERTや外部ファイルを直接クエリも可能です 基本は直接で速い・型が保てる・圧縮効率がよく・読み取りコスト低い ### 4. GCSのCSV/Parquet + BigQuery