Spaces:
Sleeping
Sleeping
| import duckdb | |
| import os | |
| from bronze import setup_bronze_layer | |
| def setup_silver_layer(): | |
| """ | |
| Connects to DuckDB, reads from the bronze layer, | |
| and applies transformations to create the silver table. | |
| """ | |
| # Ensure the bronze layer exists before proceeding | |
| setup_bronze_layer() | |
| db_path = os.path.join('..', 'data', 'fraud_detection.duckdb') | |
| con = duckdb.connect(database=db_path, read_only=False) | |
| # Create schema for silver data | |
| con.execute("CREATE SCHEMA IF NOT EXISTS silver;") | |
| print("Transforming data for the silver layer...") | |
| # Perform transformations and create the silver table | |
| con.execute(""" | |
| CREATE OR REPLACE TABLE silver.silver_transactions AS | |
| SELECT | |
| *, | |
| -- The column is already a timestamp, so just alias it | |
| trans_date_trans_time AS trans_date_time, | |
| -- Calculate age of the cardholder at the time of transaction | |
| date_part('year', trans_date_trans_time) - date_part('year', dob) AS age, | |
| -- Extract hour of day from transaction time | |
| date_part('hour', trans_date_trans_time) AS trans_hour | |
| FROM bronze.bronze_transactions; | |
| """) | |
| print("Silver layer setup complete.") | |
| # Verify the new columns in the silver table | |
| print("Columns in silver.silver_transactions:") | |
| print(con.execute("DESCRIBE silver.silver_transactions;").fetchall()) | |
| record_count = con.execute("SELECT COUNT(*) FROM silver.silver_transactions;").fetchone()[0] | |
| print(f"Total records in silver_transactions: {record_count}") | |
| con.close() | |
| if __name__ == "__main__": | |
| # For direct execution, this will now run the full pipeline up to silver | |
| print("Setting up silver layer (which includes bronze)...") | |
| setup_silver_layer() | |
| print("Silver layer setup finished.") |