A Python package for supporting migration from on-prem to cloud
Project description
🚀 Snowforge - Powerful Data Integration
Snowforge is a Python package designed to streamline data integration and transfer between AWS, Snowflake, and various on-premise database systems. It provides efficient data extraction, logging, configuration management, and AWS utilities to support robust data engineering workflows.
✨ Features
- AWS Integration: Manage AWS S3 and Secrets Manager operations.
- Snowflake Connection: Establish and manage Snowflake connections with key-pair authentication.
- Advanced Logging: Centralized logging system with colored output for better visibility.
- Snowflake Logging: Structured task logging directly to Snowflake using stored procedures (requires setup).
- Configuration Management: Load and manage credentials from a TOML configuration file.
- Data Mover Engine: Parallel data processing and extraction strategies for efficiency.
- Extensible Database Extraction: Uses a strategy pattern to support multiple on-prem database systems (e.g., Netezza, Oracle, PostgreSQL, etc.).
📥 Installation
Install Snowforge using pip:
pip install snowforge-package
⚙️ Configuration
Snowforge uses a snowforge_config.toml file to manage profiles and credentials for AWS and Snowflake. The package searches for this file in the following order:
- Path specified in the
SNOWFORGE_CONFIG_PATHenvironment variable. - Current working directory.
~/.config/snowforge_config.toml- Package directory.
✅ Example snowforge_config.toml
[AWS.default]
AWS_ACCESS_KEY = "your-access-key"
AWS_SECRET_KEY = "your-secret-key"
REGION = "us-east-1"
[SNOWFLAKE.default]
USERNAME = "your-username"
ACCOUNT = "your-account"
ROLE = "optional-role"
[SNOWFLAKE.svc_key_based_profile]
USERNAME = "svc_user"
ACCOUNT = "your-account"
KEY_FILE_PATH = "/absolute/path/to/your/private_key.p8"
KEY_FILE_PASSWORD = "your_key_password"
[SNOWFLAKE.snowforge]
USERNAME = "svc_user"
ACCOUNT = "your-account"
KEY_FILE_PATH = "/absolute/path/to/your/private_key.p8"
KEY_FILE_PASSWORD = "your_key_password"
SNOWFLAKE_DATABASE = "YOUR_DB"
SNOWFLAKE_SCHEMA = "YOUR_SCHEMA"
⚠️ Note: The
snowforgeprofile is required for SnowflakeLogging. You must execute the provided.sqlscripts located inSnowforge/resources/sql/on your Snowflake account beforehand. These scripts define the requiredTASK_LOGStable and theLOG_TASK_EXECUTION_STARTandLOG_TASK_EXECUTION_ENDprocedures.
🚀 Quick Start
🔹 Initialize AWS
from Snowforge.AWSIntegration import AWSIntegration
AWSIntegration.initialize(profile="default", verbose=True)
🔹 Connect to Snowflake
from Snowforge.SnowflakeIntegration import SnowflakeIntegration
# Connect using TOML profile:
conn = SnowflakeIntegration.connect(profile="svc_key_based_profile", verbose=True)
# Or fall back to username + account only:
conn = SnowflakeIntegration.connect(user_name="your-user", account="your-account")
🔹 Use Logging
from Snowforge.Logging import Debug
Debug.log("This is an info message", level='INFO')
Debug.log("This is an error message", level='ERROR')
🔹 Log to Snowflake
from Snowforge.SnowflakeLogging import SnowflakeLogging
from datetime import datetime
# Show required Snowflake SQL setup
SnowflakeLogging.show_requirements(print_to_console=True)
# Log task start
execution_id = SnowflakeLogging.log_start(
task_id=42, process_id=1001, starttime=datetime.now()
)
# Log task end
SnowflakeLogging.log_end(
execution_id=execution_id,
status="SUCCESS",
log_path="/logs/job.log",
endtime=datetime.now(),
next_execution_time=datetime.now()
)
🔹 Extract Data Using Strategy Pattern
from Snowforge.DataMover import Engine
from Snowforge.DataMover.Extractors.NetezzaExtractor import NetezzaExtractor
extractor = NetezzaExtractor()
header, output_file = Engine.export_to_file(
extractor=extractor,
output_path="/tmp/exported_data",
fully_qualified_table_name="MY_DB.MY_SCHEMA.MY_TABLE",
filter_column="date_column",
filter_value="01.01.2023",
verbose=True
)
🧩 Extending the System
Implement a new database extractor by inheriting from ExtractorStrategy and implementing:
extract_table_query(...)list_all_tables(...)export_external_table(...)
📜 License
This project is licensed under the MIT License.
👥 Kontakt og samarbeid
Vi oppfordrer til å ta kontakt dersom du har forslag til forbedringer, spørsmål om bruken av Snowforge, eller ønsker samarbeid. Ditt bidrag er alltid velkommen!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file snowforge_package-0.2.12.tar.gz.
File metadata
- Download URL: snowforge_package-0.2.12.tar.gz
- Upload date:
- Size: 15.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1b70cabf3655560639e2d45855a118f7899f758f9312542b12d870a6b84648a
|
|
| MD5 |
6ba3938e5d0b3bd7418f4cd8e99e5076
|
|
| BLAKE2b-256 |
473360cb99adbdeeb8a156c2e6ed8afa2afa3bec97f8e282990992c5f0204dba
|
File details
Details for the file snowforge_package-0.2.12-py3-none-any.whl.
File metadata
- Download URL: snowforge_package-0.2.12-py3-none-any.whl
- Upload date:
- Size: 16.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
46c26159cd873210e0ccb800b6e5e2057e9e146c2405c10d403c5c4c69105652
|
|
| MD5 |
f1a7bd8ecb44cd9dee9d95c2cf09b3b5
|
|
| BLAKE2b-256 |
93fbdb97c52df16737b467ecf843f7b1c7c3c0e725b4d820bb4e9abb379329ea
|