Architecture modulaire - Tous les CSV sont automatiquement téléchargés, analysés, nettoyés et convertis avec génération de schémas BigQuery.
traitement_csv/
├── main.py ⭐ Point d'entrée unique
├── config.py ⚙️ Configuration
├── requirements.txt 📦 Dépendances
│
├── modules/ 🔧 Modules réutilisables
│ ├── downloader.py
│ ├── encoder.py
│ ├── delimiter_detector.py
│ ├── header_detector.py
│ ├── cleaner.py
│ ├── validator.py
│ ├── column_analyzer.py
│ ├── schema_generator.py
│ └── reporter.py
│
├── scripts/ 📜 Scripts individuels
│ ├── download.py
│ ├── convert_utf8.py
│ ├── detect_delimiter.py
│ ├── detect_header.py
│ ├── clean.py
│ ├── validate.py
│ ├── analyze_types.py
│ ├── generate_schema.py
│ ├── analyze_csv.py
│ └── pipeline_complete.py
│
└── data/ 📂 Données
├── download/ (fichiers bruts)
├── input/ (UTF-8)
├── output/ (nettoyés)
└── schemas/ (SQL BigQuery)
# Installation
python -m venv venv
.\venv\Scripts\Activate.ps1
pip install -r requirements.txt
# Exécution
python main.py# Installation
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Exécution
python main.py# Mode interactif (recommandé)
python main.py
# Mode automatique direct
python main.py --autoPipeline exécuté:
- 📥 Téléchargement de tous les CSV
- 📝 Conversion UTF-8
- 🔍 Détection délimiteur automatique
- 📋 Détection en-tête
- 🧹 Nettoyage (quotes, newlines, lignes vides)
- ✅ Validation de structure
- 📊 Analyse types de données par colonne
- 🏗️ Génération schéma BigQuery
Résultats:
- ✨ CSV prêts:
data/output/*.csv - ✨ Schémas SQL:
data/schemas/*.sql - ✨ Schémas JSON:
data/schemas/*.json - 📄 Rapport:
data/report_*.txt
# Télécharger un fichier
python scripts/download.py DimProduct.csv <url>
# Analyser les types de données
python scripts/analyze_types.py data/output/DimProduct.csv
# Générer un schéma BigQuery
python scripts/generate_schema.py data/output/DimProduct.csv dim_product
# Analyse complète d'un fichier
python scripts/analyze_csv.py data/output/DimProduct.csv- Encodage: UTF-8, UTF-16, BOM
- Délimiteur:
,|\t; - En-tête: Détection intelligente
- Types de données: INT64, FLOAT64, DATE, DATETIME, TIMESTAMP, STRING, BOOL
Le système analyse chaque colonne et détermine le type dominant:
Exemple - Colonne "price":
- 850 valeurs: FLOAT (42.99, 15.50)
- 100 valeurs: INTEGER (10, 20)
- 50 valeurs: NULL
→ Type dominant: FLOAT64 (85% des non-NULL)
→ BigQuery type: FLOAT64
Hiérarchie des types:
NULL < BOOLEAN < INTEGER < FLOAT < DATE < DATETIME < TIMESTAMP < STRING
Pour chaque CSV, 3 fichiers SQL sont générés:
1. Table de staging (types appropriés)
CREATE OR REPLACE TABLE staging.stg_dim_product (
ProductKey INT64,
Price FLOAT64,
StartDate DATE,
...
);2. Table externe (tout en STRING)
CREATE OR REPLACE EXTERNAL TABLE staging.ext_dim_product (
ProductKey STRING,
Price STRING,
...
)
OPTIONS (
format = 'CSV',
uris = ['gs://bucket/landing/dim_product.csv'],
field_delimiter = ',',
skip_leading_rows = 1
);3. INSERT avec conversion
INSERT INTO staging.stg_dim_product
SELECT
SAFE_CAST(ProductKey AS INT64),
SAFE_CAST(Price AS FLOAT64),
SAFE.PARSE_DATE('%Y-%m-%d', StartDate),
...
FROM staging.ext_dim_product;Éditez config.py:
FILES = {
"DimProduct.csv": "<url>",
"DimDate.csv": "<url>",
# Ajouter d'autres fichiers ici
}
PROCESSING_CONFIG = {
"max_workers": 3, # Parallélisme
"timeout": 60, # Timeout
}Le pipeline détecte et corrige automatiquement:
- ✅ Délimiteur incorrect (
,vs|) - ✅ Encodage (UTF-16 → UTF-8)
- ✅ Newlines dans les champs
- ✅ Quotes non fermées
- ✅ Types de données incompatibles
# 1. Analyse détaillée
python scripts/analyze_csv.py data/problematic.csv
# 2. Détecter le délimiteur
python scripts/detect_delimiter.py data/problematic.csv
# 3. Analyser les types
python scripts/analyze_types.py data/problematic.csv
# 4. Générer le schéma adapté
python scripts/generate_schema.py data/problematic.csv table_name# 1. Configuration
nano config.py # Ajouter vos URLs
# 2. Exécution automatique
python main.py --auto
# 3. Vérifier les résultats
ls data/output/ # CSV nettoyés
ls data/schemas/ # Schémas BigQuery
# 4. Upload vers GCS
gsutil -m cp data/output/*.csv gs://your-bucket/landing/
# 5. Exécuter les schémas SQL
# Ouvrir data/schemas/*.sql dans BigQuery- GUIDE.md - Guide détaillé d'utilisation
python main.py --help- Aide contextuelle
Principe: Un script = Une fonction
Chaque module est indépendant et réutilisable:
from modules import *
# Utiliser les modules directement
result = download_file("data.csv", url)
result = convert_to_utf8(result['output_path'])
result = analyze_columns(result['output_path'])
schema = generate_bigquery_schema(result)- ✅ Zéro configuration manuelle des types
- ✅ Détection automatique de tout
- ✅ Génération SQL prête à l'emploi
- ✅ Parallélisme pour performance
- ✅ Modulaire et extensible
- ✅ Rapports détaillés
source venv/bin/activate
python main.pyVoir wsl_help.sh pour plus d'infos.