# Schéma ClickHouse — ja4-platform

Ce répertoire contient les 13 fichiers SQL définissant le schéma complet
de la plateforme. Le schéma utilise un **patron double-base** :

- **`ja4_logs`** — ingestion brute et logs HTTP parsés
- **`ja4_processing`** — agrégations, ML, vues, dictionnaires, audit

Les noms de base sont configurables via variables d'environnement
(`CLICKHOUSE_DB_LOGS`, `CLICKHOUSE_DB_PROCESSING`).

## Fichiers SQL

Appliquer dans l'ordre numérique :

| Fichier | Contenu |
|---------|---------|
| `00_database.sql` | Création des bases `ja4_logs` et `ja4_processing` |
| `01_raw_tables.sql` | Table d'ingestion `http_logs_raw` |
| `02_dictionaries.sql` | Dictionnaire `dict_iplocate_asn`, tables `ref_bot_networks`, `bot_ip`, `bot_ja4` |
| `03_anubis_tables.sql` | Tables de règles Anubis (`anubis_ip_rules`, `anubis_asn_rules`) et dictionnaires (`dict_anubis_ip`, `dict_anubis_asn`) |
| `04_mv_http_logs.sql` | Table `http_logs` + vue matérialisée `mv_http_logs` (parse JSON + enrichissement Anubis IP→ASN) |
| `05_aggregation_tables.sql` | Dictionnaires de réputation (`dict_bot_ip`, `dict_bot_ja4`, `dict_browser_ja4`, `dict_asn_reputation`) + tables d'agrégation + MVs |
| `06_ml_tables.sql` | Tables ML (`ml_detected_anomalies`, `ml_all_scores`) + vue `view_ip_recurrence` |
| `07_ai_features_view.sql` | Vue `view_ai_features_1h` (~65+ features ML) |
| `08_users.sql` | Utilisateurs `data_writer` et `analyst` avec permissions |
| `09_audit_table.sql` | Table `audit_logs` pour le journal d'audit SOC |
| `10_perf_indexes.sql` | Index secondaires et projections de performance |
| `11_views.sql` | Vues dashboard (entités, user-agents, force brute, rotation JA4, cascade) |
| `12_thesis_features.sql` | Tables d'agrégation thèse (§5) + vue `view_thesis_features_1h` |

## Déploiement

### Méthode recommandée

Utiliser `deploy_schema.sh` qui applique les 13 fichiers avec substitution
automatique des noms de base :

```bash
./deploy_schema.sh

# Ou avec configuration personnalisée :
CLICKHOUSE_DB_LOGS=my_logs \
CLICKHOUSE_DB_PROCESSING=my_proc \
CLICKHOUSE_HOST=clickhouse-server \
CLICKHOUSE_PASSWORD='secret' \
  ./deploy_schema.sh
```

### Application manuelle

```bash
for f in 0*.sql 1*.sql; do
    clickhouse-client --multiquery < "$f"
done
```

## Prérequis

- **ClickHouse 24.8+** (support `deduplicate_merge_projection_mode`)
- **Fichiers CSV** dans `/var/lib/clickhouse/user_files/` :
  - `iplocate-ip-to-asn.csv` — correspondance IP→ASN (~714K entrées)
  - `bot_ip.csv` — préfixes IP de bots connus (~3,5K CIDR)
  - `bot_ja4.csv` — empreintes JA4 de bots (~31 entrées)
  - `browser_ja4.csv` — empreintes JA4 de navigateurs (~1,2K entrées)
  - `asn_reputation.csv` — labels de réputation ASN (~82K entrées)
- **Mots de passe Anubis** : remplacer `CHANGE_ME` dans `03_anubis_tables.sql`

## Notes

- Toutes les migrations sont **idempotentes** (`IF NOT EXISTS` / `CREATE OR REPLACE`).
- `04_mv_http_logs.sql` est la version **canonique** de la vue matérialisée.
- Les références inter-bases existent : les MVs dans `ja4_processing` lisent
  depuis `ja4_logs.http_logs`.
- Documentation complète : `docs/database/schema.md` et `docs/database/migrations.md`.
