140 lines
5.6 KiB
Markdown
140 lines
5.6 KiB
Markdown
# データ収集
|
||
|
||
## コンポーネントについて
|
||
|
||
| コンポ―ネント | 内容 |
|
||
| ---------------- | ---------------------------------------------------------------------- |
|
||
| 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
|
||
|
||
|
||
|
||
|
||
|