Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Traitement CSV pour BigQuery

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.

📁 Structure Organisée

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)

🚀 Démarrage Rapide

Windows (PowerShell)

# Installation
python -m venv venv
.\venv\Scripts\Activate.ps1
pip install -r requirements.txt

# Exécution
python main.py

Linux/Mac/WSL

# Installation
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# Exécution
python main.py

💡 Utilisation

Mode 1: Pipeline Complet Automatique

# Mode interactif (recommandé)
python main.py

# Mode automatique direct
python main.py --auto

Pipeline exécuté:

  1. 📥 Téléchargement de tous les CSV
  2. 📝 Conversion UTF-8
  3. 🔍 Détection délimiteur automatique
  4. 📋 Détection en-tête
  5. 🧹 Nettoyage (quotes, newlines, lignes vides)
  6. ✅ Validation de structure
  7. 📊 Analyse types de données par colonne
  8. 🏗️ 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

Mode 2: Scripts Individuels

# 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

🎯 Fonctionnalités Clés

✅ Détection Automatique

  • 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

✅ Analyse de Types Intelligente

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

✅ Schémas BigQuery Générés

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;

🔧 Configuration

É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
}

🐛 Résolution de Problèmes

DimProduct.csv / DimDate.csv ne se chargent pas?

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

Analyser un fichier problématique

# 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

📊 Workflow Complet

# 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

📖 Documentation Complète

  • GUIDE.md - Guide détaillé d'utilisation
  • python main.py --help - Aide contextuelle

🤝 Architecture Modulaire

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)

🎨 Avantages

  • 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

🚪 Support WSL

source venv/bin/activate
python main.py

Voir wsl_help.sh pour plus d'infos.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages