Shift Left Utils
A comprehensive toolkit for migrating SQL batch processing to real-time Apache Flink on Confluent Cloud, with AI-powered code translation and advanced pipeline management. It also addresses KsqlDB to Apache Flink SQL migration.
Installation
pip install shift_left
Features
SQL Migration & Translation: Automatically migrate KSQL, Spark SQL, and DBT code to Flink SQL using LLM-based agents with validation and refinement capabilities.
Pipeline Management: Build, validate, and deploy Flink SQL pipelines with dependency management, execution planning, and blue-green deployment strategies.
Project Structure: Scaffold and manage Flink projects following medallion architecture (sources, intermediates, dimensions, facts, views) with comprehensive metadata and testing frameworks.
Test Harness: Develop unit test SQL templates with synthetic data to unit test Flink SQL statements.
Quick Start
# Initialize a new Flink project
shift_left project init my_project ./my_project --project-type kimball
# Build table inventory
shift_left table build-inventory ./pipelines
# Deploy a pipeline
shift_left pipeline deploy ./pipelines --table-name my_table
CLI Commands
Project Management
shift_left project init- Initialize a new Flink projectshift_left project validate-config- Validate configuration fileshift_left project list-topics- List Kafka topicsshift_left project list-compute-pools- List Flink compute pools
Table Management
shift_left table init- Create table structureshift_left table build-inventory- Build table inventoryshift_left table migrate- Migrate SQL with AI assistance
Pipeline Deployment
shift_left pipeline deploy- Deploy Flink pipelinesshift_left pipeline build-metadata- Build pipeline metadata
Testing
shift_left table init-unit-tests- Create test file for unit testsshift_left table run-unit-tests- Run the test suiteshift_left table delete-unit-tests- Remove unit test artifacts
Documentation
Requirements
- Python 3.12+
- Confluent Cloud account (for deployment features)
License
Apache License 2.0
Links
Release files for shift_left 0.1.46
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| shift_left-0.1.46.tar.gz | 608.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| shift_left-0.1.46-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 788.0 kB
Release files / shift_left-0.1.46.tar.gz
| Download URL | shift_left-0.1.46.tar.gz |
|---|---|
| Size | 608.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ebed71ccb52fd53564c08031fe53fc3ff19c34527b774de9c5f727d6f52fc1a0
|
|
BLAKE2b-256 checksum How to use checksums |
a978de7de12f1abc8fa1ba5534ec372c8d6fbd6d0d57dc754a003bb6ab3a2368
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / shift_left-0.1.46-py3-none-any.whl
| Download URL | shift_left-0.1.46-py3-none-any.whl |
|---|---|
| Size | 179.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1e066ce94be994964bfd08eb3f0a3523542108a723e60e19b3d9739a4580ddfd
|
|
BLAKE2b-256 checksum How to use checksums |
39c455f122a8d06631c3215f2875e672d18c3a78f9479b1648197dc800ec4871
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|