| "content": "2025-06-17 21:05:41,456 - root - INFO - Logging to file: /Users/ronel/Downloads/dev/templates/ETL-pipeline/etl_pipeline.log\n2025-06-17 21:05:41,456 - __main__ - INFO - Starting ETL pipeline\n2025-06-17 21:05:41,456 - __main__ - INFO - Extracting data...\n2025-06-17 21:05:41,456 - src.extract - INFO - Extracting data from: None\n2025-06-17 21:05:41,456 - src.extract - ERROR - Error extracting data from None: stat: path should be string, bytes, os.PathLike or integer, not NoneType\n2025-06-17 21:05:41,456 - __main__ - ERROR - Error in ETL pipeline: stat: path should be string, bytes, os.PathLike or integer, not NoneType\nTraceback (most recent call last):\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/main.py\", line 30, in main\n raw_data = extract_data(data_url)\n ^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/src/extract.py\", line 32, in extract_data\n elif os.path.exists(source):\n ^^^^^^^^^^^^^^^^^^^^^^\n File \"<frozen genericpath>\", line 19, in exists\nTypeError: stat: path should be string, bytes, os.PathLike or integer, not NoneType\n2025-06-17 21:06:13,874 - root - INFO - Logging to file: /Users/ronel/Downloads/dev/templates/ETL-pipeline/etl_pipeline.log\n2025-06-17 21:06:13,874 - __main__ - INFO - Starting ETL pipeline\n2025-06-17 21:06:13,874 - __main__ - INFO - Extracting data...\n2025-06-17 21:06:13,874 - src.extract - INFO - Extracting data from: None\n2025-06-17 21:06:13,874 - src.extract - ERROR - Error extracting data from None: stat: path should be string, bytes, os.PathLike or integer, not NoneType\n2025-06-17 21:06:13,874 - __main__ - ERROR - Error in ETL pipeline: stat: path should be string, bytes, os.PathLike or integer, not NoneType\nTraceback (most recent call last):\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/main.py\", line 30, in main\n raw_data = extract_data(data_url)\n ^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/src/extract.py\", line 32, in extract_data\n elif os.path.exists(source):\n ^^^^^^^^^^^^^^^^^^^^^^\n File \"<frozen genericpath>\", line 19, in exists\nTypeError: stat: path should be string, bytes, os.PathLike or integer, not NoneType\n2025-06-17 21:06:54,331 - root - INFO - Logging to file: /Users/ronel/Downloads/dev/templates/ETL-pipeline/etl_pipeline.log\n2025-06-17 21:06:54,332 - __main__ - INFO - Starting ETL pipeline\n2025-06-17 21:06:54,332 - __main__ - INFO - Extracting data...\n2025-06-17 21:06:54,332 - src.extract - INFO - Extracting data from: None\n2025-06-17 21:06:54,332 - src.extract - ERROR - Error extracting data from None: stat: path should be string, bytes, os.PathLike or integer, not NoneType\n2025-06-17 21:06:54,332 - __main__ - ERROR - Error in ETL pipeline: stat: path should be string, bytes, os.PathLike or integer, not NoneType\nTraceback (most recent call last):\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/main.py\", line 30, in main\n raw_data = extract_data(data_url)\n ^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/src/extract.py\", line 32, in extract_data\n elif os.path.exists(source):\n ^^^^^^^^^^^^^^^^^^^^^^\n File \"<frozen genericpath>\", line 19, in exists\nTypeError: stat: path should be string, bytes, os.PathLike or integer, not NoneType\n2025-06-17 21:09:20,929 - root - INFO - Logging to file: /Users/ronel/Downloads/dev/templates/ETL-pipeline/etl_pipeline.log\n2025-06-17 21:09:20,929 - __main__ - INFO - Starting ETL pipeline\n2025-06-17 21:09:20,929 - __main__ - INFO - Extracting data...\n2025-06-17 21:09:20,929 - src.extract - INFO - Extracting data from: https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2023-01.parquet\n2025-06-17 21:09:25,181 - __main__ - INFO - Transforming data...\n2025-06-17 21:09:25,181 - src.transform - INFO - Starting data transformation\n2025-06-17 21:09:25,276 - src.transform - INFO - Data transformation complete. Shape after transformation: (3066766, 19)\n2025-06-17 21:09:25,277 - __main__ - INFO - Loading data to database...\n2025-06-17 21:09:25,277 - src.load - INFO - Loading data into taxi_trips\n2025-06-17 21:09:25,306 - src.load - ERROR - Error loading data into taxi_trips: No module named 'psycopg2'\n2025-06-17 21:09:25,306 - __main__ - ERROR - Error in ETL pipeline: No module named 'psycopg2'\nTraceback (most recent call last):\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/main.py\", line 39, in main\n load_data(transformed_data, table_name)\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/src/load.py\", line 60, in load_data\n engine = get_db_connection()\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/src/utils.py\", line 84, in get_db_connection\n return create_engine(connection_string)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"<string>\", line 2, in create_engine\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/util/deprecations.py\", line 281, in warned\n return fn(*args, **kwargs) # type: ignore[no-any-return]\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/create.py\", line 599, in create_engine\n dbapi = dbapi_meth(**dbapi_args)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py\", line 690, in import_dbapi\n import psycopg2\nModuleNotFoundError: No module named 'psycopg2'\n2025-06-17 21:09:53,917 - root - INFO - Logging to file: /Users/ronel/Downloads/dev/templates/ETL-pipeline/etl_pipeline.log\n2025-06-17 21:09:53,918 - __main__ - INFO - Starting ETL pipeline\n2025-06-17 21:09:53,918 - __main__ - INFO - Extracting data...\n2025-06-17 21:09:53,918 - src.extract - INFO - Extracting data from: https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2023-01.parquet\n2025-06-17 21:09:55,987 - __main__ - INFO - Transforming data...\n2025-06-17 21:09:55,987 - src.transform - INFO - Starting data transformation\n2025-06-17 21:09:56,064 - src.transform - INFO - Data transformation complete. Shape after transformation: (3066766, 19)\n2025-06-17 21:09:56,064 - __main__ - INFO - Loading data to database...\n2025-06-17 21:09:56,065 - src.load - INFO - Loading data into taxi_trips\n2025-06-17 21:09:56,091 - src.load - ERROR - Error loading data into taxi_trips: No module named 'psycopg2'\n2025-06-17 21:09:56,091 - __main__ - ERROR - Error in ETL pipeline: No module named 'psycopg2'\nTraceback (most recent call last):\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/main.py\", line 39, in main\n load_data(transformed_data, table_name)\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/src/load.py\", line 60, in load_data\n engine = get_db_connection()\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/src/utils.py\", line 84, in get_db_connection\n return create_engine(connection_string)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"<string>\", line 2, in create_engine\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/util/deprecations.py\", line 281, in warned\n return fn(*args, **kwargs) # type: ignore[no-any-return]\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/create.py\", line 599, in create_engine\n dbapi = dbapi_meth(**dbapi_args)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py\", line 690, in import_dbapi\n import psycopg2\nModuleNotFoundError: No module named 'psycopg2'\n2025-06-17 22:07:02,572 - root - INFO - Logging to file: /Users/ronel/Downloads/dev/templates/ETL-pipeline/etl_pipeline.log\n2025-06-17 22:07:02,572 - __main__ - INFO - Starting ETL pipeline\n2025-06-17 22:07:02,572 - __main__ - INFO - Extracting data...\n2025-06-17 22:07:02,572 - src.extract - INFO - Extracting data from: https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2023-01.parquet\n2025-06-17 22:07:04,213 - __main__ - INFO - Transforming data...\n2025-06-17 22:07:04,214 - src.transform - INFO - Starting data transformation\n2025-06-17 22:07:04,292 - src.transform - INFO - Data transformation complete. Shape after transformation: (3066766, 19)\n2025-06-17 22:07:04,292 - __main__ - INFO - Loading data to database...\n2025-06-17 22:07:04,292 - src.load - INFO - Loading data into taxi_trips\n2025-06-17 22:07:04,312 - src.load - ERROR - Error loading data into taxi_trips: No module named 'psycopg2'\n2025-06-17 22:07:04,313 - __main__ - ERROR - Error in ETL pipeline: No module named 'psycopg2'\nTraceback (most recent call last):\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/main.py\", line 39, in main\n load_data(transformed_data, table_name)\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/src/load.py\", line 60, in load_data\n engine = get_db_connection()\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/src/utils.py\", line 84, in get_db_connection\n return create_engine(connection_string)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"<string>\", line 2, in create_engine\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/util/deprecations.py\", line 281, in warned\n return fn(*args, **kwargs) # type: ignore[no-any-return]\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/create.py\", line 599, in create_engine\n dbapi = dbapi_meth(**dbapi_args)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py\", line 690, in import_dbapi\n import psycopg2\nModuleNotFoundError: No module named 'psycopg2'\n2025-06-17 22:11:51,014 - root - INFO - Logging to file: /Users/ronel/Downloads/dev/templates/ETL-pipeline/etl_pipeline.log\n2025-06-17 22:11:51,014 - __main__ - INFO - Starting ETL pipeline\n2025-06-17 22:11:51,014 - __main__ - INFO - Extracting data...\n2025-06-17 22:11:51,014 - src.extract - INFO - Extracting data from: https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2023-01.parquet\n2025-06-17 22:11:54,433 - __main__ - INFO - Transforming data...\n2025-06-17 22:11:54,433 - src.transform - INFO - Starting data transformation\n2025-06-17 22:11:54,510 - src.transform - INFO - Data transformation complete. Shape after transformation: (3066766, 19)\n2025-06-17 22:11:54,510 - __main__ - INFO - Loading data to database...\n2025-06-17 22:11:54,510 - src.load - INFO - Loading data into taxi_trips\n2025-06-17 22:11:55,209 - src.load - ERROR - Error loading data into taxi_trips: 'Engine' object has no attribute 'has_table'\n2025-06-17 22:11:55,209 - __main__ - ERROR - Error in ETL pipeline: 'Engine' object has no attribute 'has_table'\nTraceback (most recent call last):\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/main.py\", line 39, in main\n load_data(transformed_data, table_name)\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/src/load.py\", line 64, in load_data\n create_table_from_dataframe(\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/src/load.py\", line 109, in create_table_from_dataframe\n if engine.has_table(table_name, schema=schema):\n ^^^^^^^^^^^^^^^^\nAttributeError: 'Engine' object has no attribute 'has_table'\n2025-06-17 22:14:02,942 - root - INFO - Logging to file: /Users/ronel/Downloads/dev/templates/ETL-pipeline/etl_pipeline.log\n2025-06-17 22:14:02,942 - __main__ - INFO - Starting ETL pipeline\n2025-06-17 22:14:02,942 - __main__ - INFO - Extracting data...\n2025-06-17 22:14:02,942 - src.extract - INFO - Extracting data from: https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2023-01.parquet\n2025-06-17 22:14:04,625 - __main__ - INFO - Transforming data...\n2025-06-17 22:14:04,625 - src.transform - INFO - Starting data transformation\n2025-06-17 22:14:04,699 - src.transform - INFO - Data transformation complete. Shape after transformation: (3066766, 19)\n2025-06-17 22:14:04,699 - __main__ - INFO - Loading data to database...\n2025-06-17 22:14:04,699 - src.load - INFO - Loading data into taxi_trips\n2025-06-17 22:14:05,331 - src.load - ERROR - Error loading data into taxi_trips: (psycopg2.OperationalError) connection to server at \"ep-cool-darkness-a1b2c3d4-pooler.us-east-2.aws.neon.tech\" (3.131.64.200), port 5432 failed: ERROR: password authentication failed for user 'alex'\n\n(Background on this error at: https://sqlalche.me/e/20/e3q8)\n2025-06-17 22:14:05,331 - __main__ - ERROR - Error in ETL pipeline: (psycopg2.OperationalError) connection to server at \"ep-cool-darkness-a1b2c3d4-pooler.us-east-2.aws.neon.tech\" (3.131.64.200), port 5432 failed: ERROR: password authentication failed for user 'alex'\n\n(Background on this error at: https://sqlalche.me/e/20/e3q8)\nTraceback (most recent call last):\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/base.py\", line 146, in __init__\n self._dbapi_connection = engine.raw_connection()\n ^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/base.py\", line 3302, in raw_connection\n return self.pool.connect()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/base.py\", line 449, in connect\n return _ConnectionFairy._checkout(self)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/base.py\", line 1263, in _checkout\n fairy = _ConnectionRecord.checkout(pool)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/base.py\", line 712, in checkout\n rec = pool._do_get()\n ^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/impl.py\", line 179, in _do_get\n with util.safe_reraise():\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/util/langhelpers.py\", line 146, in __exit__\n raise exc_value.with_traceback(exc_tb)\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/impl.py\", line 177, in _do_get\n return self._create_connection()\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/base.py\", line 390, in _create_connection\n return _ConnectionRecord(self)\n ^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/base.py\", line 674, in __init__\n self.__connect()\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/base.py\", line 900, in __connect\n with util.safe_reraise():\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/util/langhelpers.py\", line 146, in __exit__\n raise exc_value.with_traceback(exc_tb)\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/base.py\", line 896, in __connect\n self.dbapi_connection = connection = pool._invoke_creator(self)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/create.py\", line 643, in connect\n return dialect.connect(*cargs, **cparams)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/default.py\", line 621, in connect\n return self.loaded_dbapi.connect(*cargs, **cparams)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/psycopg2/__init__.py\", line 122, in connect\n conn = _connect(dsn, connection_factory=connection_factory, **kwasync)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\npsycopg2.OperationalError: connection to server at \"ep-cool-darkness-a1b2c3d4-pooler.us-east-2.aws.neon.tech\" (3.131.64.200), port 5432 failed: ERROR: password authentication failed for user 'alex'\n\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/main.py\", line 39, in main\n load_data(transformed_data, table_name)\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/src/load.py\", line 64, in load_data\n create_table_from_dataframe(\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/src/load.py\", line 111, in create_table_from_dataframe\n inspector = inspect(engine)\n ^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/inspection.py\", line 140, in inspect\n ret = reg(subject)\n ^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/reflection.py\", line 312, in _engine_insp\n return Inspector._construct(Inspector._init_engine, bind)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/reflection.py\", line 245, in _construct\n init(self, bind)\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/reflection.py\", line 256, in _init_engine\n engine.connect().close()\n ^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/base.py\", line 3278, in connect\n return self._connection_cls(self)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/base.py\", line 148, in __init__\n Connection._handle_dbapi_exception_noconnection(\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/base.py\", line 2442, in _handle_dbapi_exception_noconnection\n raise sqlalchemy_exception.with_traceback(exc_info[2]) from e\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/base.py\", line 146, in __init__\n self._dbapi_connection = engine.raw_connection()\n ^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/base.py\", line 3302, in raw_connection\n return self.pool.connect()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/base.py\", line 449, in connect\n return _ConnectionFairy._checkout(self)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/base.py\", line 1263, in _checkout\n fairy = _ConnectionRecord.checkout(pool)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/base.py\", line 712, in checkout\n rec = pool._do_get()\n ^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/impl.py\", line 179, in _do_get\n with util.safe_reraise():\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/util/langhelpers.py\", line 146, in __exit__\n raise exc_value.with_traceback(exc_tb)\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/impl.py\", line 177, in _do_get\n return self._create_connection()\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/base.py\", line 390, in _create_connection\n return _ConnectionRecord(self)\n ^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/base.py\", line 674, in __init__\n self.__connect()\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/base.py\", line 900, in __connect\n with util.safe_reraise():\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/util/langhelpers.py\", line 146, in __exit__\n raise exc_value.with_traceback(exc_tb)\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/pool/base.py\", line 896, in __connect\n self.dbapi_connection = connection = pool._invoke_creator(self)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/create.py\", line 643, in connect\n return dialect.connect(*cargs, **cparams)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/default.py\", line 621, in connect\n return self.loaded_dbapi.connect(*cargs, **cparams)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/psycopg2/__init__.py\", line 122, in connect\n conn = _connect(dsn, connection_factory=connection_factory, **kwasync)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nsqlalchemy.exc.OperationalError: (psycopg2.OperationalError) connection to server at \"ep-cool-darkness-a1b2c3d4-pooler.us-east-2.aws.neon.tech\" (3.131.64.200), port 5432 failed: ERROR: password authentication failed for user 'alex'\n\n(Background on this error at: https://sqlalche.me/e/20/e3q8)\n2025-06-17 22:16:08,322 - root - INFO - Logging to file: /Users/ronel/Downloads/dev/templates/ETL-pipeline/etl_pipeline.log\n2025-06-17 22:16:08,322 - __main__ - INFO - Starting ETL pipeline\n2025-06-17 22:16:08,322 - __main__ - INFO - Extracting data...\n2025-06-17 22:16:08,322 - src.extract - INFO - Extracting data from: https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2023-01.parquet\n2025-06-17 22:16:09,971 - __main__ - INFO - Transforming data...\n2025-06-17 22:16:09,971 - src.transform - INFO - Starting data transformation\n2025-06-17 22:16:10,048 - src.transform - INFO - Data transformation complete. Shape after transformation: (3066766, 19)\n2025-06-17 22:16:10,048 - __main__ - INFO - Loading data to database...\n2025-06-17 22:16:10,048 - src.load - INFO - Loading data into taxi_trips\n2025-06-17 22:16:12,558 - src.load - INFO - Created table taxi_trips\n2025-06-17 22:25:26,193 - src.load - ERROR - Error loading data into taxi_trips: (psycopg2.errors.DiskFull) could not extend file because project size limit (512 MB) has been exceeded\nHINT: This limit is defined by neon.max_cluster_size GUC\n\n[SQL: INSERT INTO taxi_trips (\"VendorID\", tpep_pickup_datetime, tpep_dropoff_datetime, passenger_count, trip_distance, \"RatecodeID\", store_and_fwd_flag, \"PULocationID\", \"DOLocationID\", payment_type, fare_amount, extra, mta_tax, tip_amount, tolls_amount, im ... 458885 characters truncated ... vement_surcharge__999)s, %(total_amount__999)s, %(congestion_surcharge__999)s, %(airport_fee__999)s)]\n[parameters: {'congestion_surcharge__0': 2.5, 'RatecodeID__0': 1.0, 'airport_fee__0': 0.0, 'extra__0': 2.5, 'tip_amount__0': 2.9, 'fare_amount__0': 5.8, 'mta_tax__0': 0.5, 'total_amount__0': 12.7, 'trip_distance__0': 0.7, 'tolls_amount__0': 0.0, 'store_and_fwd_flag__0': 'N', 'passenger_count__0': 1.0, 'improvement_surcharge__0': 1.0, 'tpep_dropoff_datetime__0': datetime.datetime(2023, 1, 29, 15, 6, 34), 'tpep_pickup_datetime__0': datetime.datetime(2023, 1, 29, 15, 3, 37), 'VendorID__0': 1, 'payment_type__0': 1, 'DOLocationID__0': 237, 'PULocationID__0': 229, 'congestion_surcharge__1': 2.5, 'RatecodeID__1': 1.0, 'airport_fee__1': 0.0, 'extra__1': 2.5, 'tip_amount__1': 0.0, 'fare_amount__1': 13.5, 'mta_tax__1': 0.5, 'total_amount__1': 17.5, 'trip_distance__1': 2.4, 'tolls_amount__1': 0.0, 'store_and_fwd_flag__1': 'N', 'passenger_count__1': 1.0, 'improvement_surcharge__1': 1.0, 'tpep_dropoff_datetime__1': datetime.datetime(2023, 1, 29, 15, 24, 33), 'tpep_pickup_datetime__1': datetime.datetime(2023, 1, 29, 15, 12, 38), 'VendorID__1': 1, 'payment_type__1': 2, 'DOLocationID__1': 79, 'PULocationID__1': 237, 'congestion_surcharge__2': 2.5, 'RatecodeID__2': 1.0, 'airport_fee__2': 0.0, 'extra__2': 2.5, 'tip_amount__2': 3.85, 'fare_amount__2': 11.4, 'mta_tax__2': 0.5, 'total_amount__2': 19.25, 'trip_distance__2': 0.7, 'tolls_amount__2': 0.0, 'store_and_fwd_flag__2': 'N', 'passenger_count__2': 1.0 ... 18900 parameters truncated ... 'total_amount__997': 28.56, 'trip_distance__997': 3.9, 'tolls_amount__997': 0.0, 'store_and_fwd_flag__997': 'N', 'passenger_count__997': 1.0, 'improvement_surcharge__997': 1.0, 'tpep_dropoff_datetime__997': datetime.datetime(2023, 1, 29, 15, 58, 6), 'tpep_pickup_datetime__997': datetime.datetime(2023, 1, 29, 15, 42, 58), 'VendorID__997': 1, 'payment_type__997': 1, 'DOLocationID__997': 42, 'PULocationID__997': 141, 'congestion_surcharge__998': 0.0, 'RatecodeID__998': 1.0, 'airport_fee__998': 0.0, 'extra__998': 0.0, 'tip_amount__998': 0.0, 'fare_amount__998': 14.2, 'mta_tax__998': 0.5, 'total_amount__998': 15.7, 'trip_distance__998': 2.1, 'tolls_amount__998': 0.0, 'store_and_fwd_flag__998': 'N', 'passenger_count__998': 1.0, 'improvement_surcharge__998': 1.0, 'tpep_dropoff_datetime__998': datetime.datetime(2023, 1, 29, 15, 16, 54), 'tpep_pickup_datetime__998': datetime.datetime(2023, 1, 29, 15, 4, 55), 'VendorID__998': 1, 'payment_type__998': 2, 'DOLocationID__998': 75, 'PULocationID__998': 151, 'congestion_surcharge__999': 2.5, 'RatecodeID__999': 1.0, 'airport_fee__999': 0.0, 'extra__999': 2.5, 'tip_amount__999': 2.65, 'fare_amount__999': 9.3, 'mta_tax__999': 0.5, 'total_amount__999': 15.95, 'trip_distance__999': 1.1, 'tolls_amount__999': 0.0, 'store_and_fwd_flag__999': 'N', 'passenger_count__999': 1.0, 'improvement_surcharge__999': 1.0, 'tpep_dropoff_datetime__999': datetime.datetime(2023, 1, 29, 15, 35, 28), 'tpep_pickup_datetime__999': datetime.datetime(2023, 1, 29, 15, 27, 23), 'VendorID__999': 1, 'payment_type__999': 1, 'DOLocationID__999': 236, 'PULocationID__999': 262}]\n(Background on this error at: https://sqlalche.me/e/20/e3q8)\n2025-06-17 22:25:26,206 - __main__ - ERROR - Error in ETL pipeline: (psycopg2.errors.DiskFull) could not extend file because project size limit (512 MB) has been exceeded\nHINT: This limit is defined by neon.max_cluster_size GUC\n\n[SQL: INSERT INTO taxi_trips (\"VendorID\", tpep_pickup_datetime, tpep_dropoff_datetime, passenger_count, trip_distance, \"RatecodeID\", store_and_fwd_flag, \"PULocationID\", \"DOLocationID\", payment_type, fare_amount, extra, mta_tax, tip_amount, tolls_amount, im ... 458885 characters truncated ... vement_surcharge__999)s, %(total_amount__999)s, %(congestion_surcharge__999)s, %(airport_fee__999)s)]\n[parameters: {'congestion_surcharge__0': 2.5, 'RatecodeID__0': 1.0, 'airport_fee__0': 0.0, 'extra__0': 2.5, 'tip_amount__0': 2.9, 'fare_amount__0': 5.8, 'mta_tax__0': 0.5, 'total_amount__0': 12.7, 'trip_distance__0': 0.7, 'tolls_amount__0': 0.0, 'store_and_fwd_flag__0': 'N', 'passenger_count__0': 1.0, 'improvement_surcharge__0': 1.0, 'tpep_dropoff_datetime__0': datetime.datetime(2023, 1, 29, 15, 6, 34), 'tpep_pickup_datetime__0': datetime.datetime(2023, 1, 29, 15, 3, 37), 'VendorID__0': 1, 'payment_type__0': 1, 'DOLocationID__0': 237, 'PULocationID__0': 229, 'congestion_surcharge__1': 2.5, 'RatecodeID__1': 1.0, 'airport_fee__1': 0.0, 'extra__1': 2.5, 'tip_amount__1': 0.0, 'fare_amount__1': 13.5, 'mta_tax__1': 0.5, 'total_amount__1': 17.5, 'trip_distance__1': 2.4, 'tolls_amount__1': 0.0, 'store_and_fwd_flag__1': 'N', 'passenger_count__1': 1.0, 'improvement_surcharge__1': 1.0, 'tpep_dropoff_datetime__1': datetime.datetime(2023, 1, 29, 15, 24, 33), 'tpep_pickup_datetime__1': datetime.datetime(2023, 1, 29, 15, 12, 38), 'VendorID__1': 1, 'payment_type__1': 2, 'DOLocationID__1': 79, 'PULocationID__1': 237, 'congestion_surcharge__2': 2.5, 'RatecodeID__2': 1.0, 'airport_fee__2': 0.0, 'extra__2': 2.5, 'tip_amount__2': 3.85, 'fare_amount__2': 11.4, 'mta_tax__2': 0.5, 'total_amount__2': 19.25, 'trip_distance__2': 0.7, 'tolls_amount__2': 0.0, 'store_and_fwd_flag__2': 'N', 'passenger_count__2': 1.0 ... 18900 parameters truncated ... 'total_amount__997': 28.56, 'trip_distance__997': 3.9, 'tolls_amount__997': 0.0, 'store_and_fwd_flag__997': 'N', 'passenger_count__997': 1.0, 'improvement_surcharge__997': 1.0, 'tpep_dropoff_datetime__997': datetime.datetime(2023, 1, 29, 15, 58, 6), 'tpep_pickup_datetime__997': datetime.datetime(2023, 1, 29, 15, 42, 58), 'VendorID__997': 1, 'payment_type__997': 1, 'DOLocationID__997': 42, 'PULocationID__997': 141, 'congestion_surcharge__998': 0.0, 'RatecodeID__998': 1.0, 'airport_fee__998': 0.0, 'extra__998': 0.0, 'tip_amount__998': 0.0, 'fare_amount__998': 14.2, 'mta_tax__998': 0.5, 'total_amount__998': 15.7, 'trip_distance__998': 2.1, 'tolls_amount__998': 0.0, 'store_and_fwd_flag__998': 'N', 'passenger_count__998': 1.0, 'improvement_surcharge__998': 1.0, 'tpep_dropoff_datetime__998': datetime.datetime(2023, 1, 29, 15, 16, 54), 'tpep_pickup_datetime__998': datetime.datetime(2023, 1, 29, 15, 4, 55), 'VendorID__998': 1, 'payment_type__998': 2, 'DOLocationID__998': 75, 'PULocationID__998': 151, 'congestion_surcharge__999': 2.5, 'RatecodeID__999': 1.0, 'airport_fee__999': 0.0, 'extra__999': 2.5, 'tip_amount__999': 2.65, 'fare_amount__999': 9.3, 'mta_tax__999': 0.5, 'total_amount__999': 15.95, 'trip_distance__999': 1.1, 'tolls_amount__999': 0.0, 'store_and_fwd_flag__999': 'N', 'passenger_count__999': 1.0, 'improvement_surcharge__999': 1.0, 'tpep_dropoff_datetime__999': datetime.datetime(2023, 1, 29, 15, 35, 28), 'tpep_pickup_datetime__999': datetime.datetime(2023, 1, 29, 15, 27, 23), 'VendorID__999': 1, 'payment_type__999': 1, 'DOLocationID__999': 236, 'PULocationID__999': 262}]\n(Background on this error at: https://sqlalche.me/e/20/e3q8)\nTraceback (most recent call last):\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/base.py\", line 2118, in _exec_insertmany_context\n dialect.do_execute(\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/default.py\", line 941, in do_execute\n cursor.execute(statement, parameters)\npsycopg2.errors.DiskFull: could not extend file because project size limit (512 MB) has been exceeded\nHINT: This limit is defined by neon.max_cluster_size GUC\n\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/main.py\", line 39, in main\n load_data(transformed_data, table_name)\n File \"/Users/ronel/Downloads/dev/templates/ETL-pipeline/src/load.py\", line 73, in load_data\n df.to_sql(\n File \"/opt/anaconda3/lib/python3.12/site-packages/pandas/util/_decorators.py\", line 333, in wrapper\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/pandas/core/generic.py\", line 3087, in to_sql\n return sql.to_sql(\n ^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/pandas/io/sql.py\", line 842, in to_sql\n return pandas_sql.to_sql(\n ^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/pandas/io/sql.py\", line 2018, in to_sql\n total_inserted = sql_engine.insert_records(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/pandas/io/sql.py\", line 1567, in insert_records\n raise err\n File \"/opt/anaconda3/lib/python3.12/site-packages/pandas/io/sql.py\", line 1558, in insert_records\n return table.insert(chunksize=chunksize, method=method)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/pandas/io/sql.py\", line 1119, in insert\n num_inserted = exec_insert(conn, keys, chunk_iter)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/pandas/io/sql.py\", line 1010, in _execute_insert\n result = conn.execute(self.table.insert(), data)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/base.py\", line 1418, in execute\n return meth(\n ^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/sql/elements.py\", line 515, in _execute_on_connection\n return connection._execute_clauseelement(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/base.py\", line 1640, in _execute_clauseelement\n ret = self._execute_context(\n ^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/base.py\", line 1844, in _execute_context\n return self._exec_insertmany_context(dialect, context)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/base.py\", line 2126, in _exec_insertmany_context\n self._handle_dbapi_exception(\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/base.py\", line 2355, in _handle_dbapi_exception\n raise sqlalchemy_exception.with_traceback(exc_info[2]) from e\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/base.py\", line 2118, in _exec_insertmany_context\n dialect.do_execute(\n File \"/opt/anaconda3/lib/python3.12/site-packages/sqlalchemy/engine/default.py\", line 941, in do_execute\n cursor.execute(statement, parameters)\nsqlalchemy.exc.OperationalError: (psycopg2.errors.DiskFull) could not extend file because project size limit (512 MB) has been exceeded\nHINT: This limit is defined by neon.max_cluster_size GUC\n\n[SQL: INSERT INTO taxi_trips (\"VendorID\", tpep_pickup_datetime, tpep_dropoff_datetime, passenger_count, trip_distance, \"RatecodeID\", store_and_fwd_flag, \"PULocationID\", \"DOLocationID\", payment_type, fare_amount, extra, mta_tax, tip_amount, tolls_amount, im ... 458885 characters truncated ... vement_surcharge__999)s, %(total_amount__999)s, %(congestion_surcharge__999)s, %(airport_fee__999)s)]\n[parameters: {'congestion_surcharge__0': 2.5, 'RatecodeID__0': 1.0, 'airport_fee__0': 0.0, 'extra__0': 2.5, 'tip_amount__0': 2.9, 'fare_amount__0': 5.8, 'mta_tax__0': 0.5, 'total_amount__0': 12.7, 'trip_distance__0': 0.7, 'tolls_amount__0': 0.0, 'store_and_fwd_flag__0': 'N', 'passenger_count__0': 1.0, 'improvement_surcharge__0': 1.0, 'tpep_dropoff_datetime__0': datetime.datetime(2023, 1, 29, 15, 6, 34), 'tpep_pickup_datetime__0': datetime.datetime(2023, 1, 29, 15, 3, 37), 'VendorID__0': 1, 'payment_type__0': 1, 'DOLocationID__0': 237, 'PULocationID__0': 229, 'congestion_surcharge__1': 2.5, 'RatecodeID__1': 1.0, 'airport_fee__1': 0.0, 'extra__1': 2.5, 'tip_amount__1': 0.0, 'fare_amount__1': 13.5, 'mta_tax__1': 0.5, 'total_amount__1': 17.5, 'trip_distance__1': 2.4, 'tolls_amount__1': 0.0, 'store_and_fwd_flag__1': 'N', 'passenger_count__1': 1.0, 'improvement_surcharge__1': 1.0, 'tpep_dropoff_datetime__1': datetime.datetime(2023, 1, 29, 15, 24, 33), 'tpep_pickup_datetime__1': datetime.datetime(2023, 1, 29, 15, 12, 38), 'VendorID__1': 1, 'payment_type__1': 2, 'DOLocationID__1': 79, 'PULocationID__1': 237, 'congestion_surcharge__2': 2.5, 'RatecodeID__2': 1.0, 'airport_fee__2': 0.0, 'extra__2': 2.5, 'tip_amount__2': 3.85, 'fare_amount__2': 11.4, 'mta_tax__2': 0.5, 'total_amount__2': 19.25, 'trip_distance__2': 0.7, 'tolls_amount__2': 0.0, 'store_and_fwd_flag__2': 'N', 'passenger_count__2': 1.0 ... 18900 parameters truncated ... 'total_amount__997': 28.56, 'trip_distance__997': 3.9, 'tolls_amount__997': 0.0, 'store_and_fwd_flag__997': 'N', 'passenger_count__997': 1.0, 'improvement_surcharge__997': 1.0, 'tpep_dropoff_datetime__997': datetime.datetime(2023, 1, 29, 15, 58, 6), 'tpep_pickup_datetime__997': datetime.datetime(2023, 1, 29, 15, 42, 58), 'VendorID__997': 1, 'payment_type__997': 1, 'DOLocationID__997': 42, 'PULocationID__997': 141, 'congestion_surcharge__998': 0.0, 'RatecodeID__998': 1.0, 'airport_fee__998': 0.0, 'extra__998': 0.0, 'tip_amount__998': 0.0, 'fare_amount__998': 14.2, 'mta_tax__998': 0.5, 'total_amount__998': 15.7, 'trip_distance__998': 2.1, 'tolls_amount__998': 0.0, 'store_and_fwd_flag__998': 'N', 'passenger_count__998': 1.0, 'improvement_surcharge__998': 1.0, 'tpep_dropoff_datetime__998': datetime.datetime(2023, 1, 29, 15, 16, 54), 'tpep_pickup_datetime__998': datetime.datetime(2023, 1, 29, 15, 4, 55), 'VendorID__998': 1, 'payment_type__998': 2, 'DOLocationID__998': 75, 'PULocationID__998': 151, 'congestion_surcharge__999': 2.5, 'RatecodeID__999': 1.0, 'airport_fee__999': 0.0, 'extra__999': 2.5, 'tip_amount__999': 2.65, 'fare_amount__999': 9.3, 'mta_tax__999': 0.5, 'total_amount__999': 15.95, 'trip_distance__999': 1.1, 'tolls_amount__999': 0.0, 'store_and_fwd_flag__999': 'N', 'passenger_count__999': 1.0, 'improvement_surcharge__999': 1.0, 'tpep_dropoff_datetime__999': datetime.datetime(2023, 1, 29, 15, 35, 28), 'tpep_pickup_datetime__999': datetime.datetime(2023, 1, 29, 15, 27, 23), 'VendorID__999': 1, 'payment_type__999': 1, 'DOLocationID__999': 236, 'PULocationID__999': 262}]\n(Background on this error at: https://sqlalche.me/e/20/e3q8)\n", |