Skip to main content

Lakeflow Connect Demo Library

Project description

lfcdemolib

Lakeflow Connect Demo Library

A comprehensive Python library for building and managing Databricks Lakeflow Connect (LFC) demonstrations with support for multiple cloud providers and database types.

Features

  • Simplified Demo Initialization: One-line setup for Databricks notebooks with DemoInstance
  • Multi-Database Support: SQL Server, MySQL, PostgreSQL, Oracle
  • Cloud Provider Support: Azure, Oracle Cloud Infrastructure (OCI)
  • Change Data Capture (CDC): Built-in CDC/CT (Change Tracking) implementations
  • Schema Evolution: Automatic schema evolution and migration handling
  • Connection Management: Secure credential storage and retrieval
  • DML Operations: Simplified data manipulation with automatic scheduling
  • REST API Integration: Databricks workspace API wrapper
  • Test Framework: Comprehensive testing utilities for database operations

Installation

pip install lfcdemolib

All database drivers are included as core dependencies:

  • pymysql (MySQL)
  • psycopg2-binary (PostgreSQL)
  • pymssql (SQL Server)
  • oracledb (Oracle)

Optional Dependencies

For development tools:

# Development tools (pytest, black, flake8, mypy, isort)
pip install "lfcdemolib[dev]"

# Documentation tools (sphinx)
pip install "lfcdemolib[docs]"

Quick Start

Databricks Notebook

import lfcdemolib

# Configuration
config_dict = {
    "source_connection_name": "lfcddemo-azure-mysql-both",
    "cdc_qbc": "cdc",
    "database": {
        "cloud": "azure",
        "type": "mysql"
    }
}

# One-line initialization
d = lfcdemolib.DemoInstance(config_dict, dbutils, spark)

# Create pipeline
d.create_pipeline(pipeline_spec)

# Execute DML operations
d.dml.execute_delete_update_insert()

# Get recent data
df = d.dml.get_recent_data()
display(df)

Tuple Unpacking (Advanced)

# Get all components
d, config, dbxs, dmls, dbx_key, dml_key, scheduler = lfcdemolib.DemoInstance(
    config_dict, 
    dbutils, 
    spark
)

# Use individual components
config.source_connection_name
dmls[dml_key].execute_delete_update_insert()
scheduler.get_jobs()

Core Components

DemoInstance

Simplified facade for demo initialization with automatic caching and scheduler management.

d = lfcdemolib.DemoInstance(config_dict, dbutils, spark)

Features:

  • Singleton scheduler management
  • Automatic instance caching
  • Simplified one-line initialization
  • Delegates to DbxRest for Databricks operations

LfcScheduler

Background task scheduler using APScheduler.

scheduler = lfcdemolib.LfcScheduler()
scheduler.add_job(my_function, 'interval', seconds=60)

DbxRest

Databricks REST API client with connection and secret management.

dbx = lfcdemolib.DbxRest(dbutils=dbutils, config=config, lfc_scheduler=scheduler)
dbx.create_pipeline(spec)

SimpleDML

Simplified DML operations with automatic scheduling.

dml = lfcdemolib.SimpleDML(secrets_json, config=config, lfc_scheduler=scheduler)
dml.execute_delete_update_insert()
df = dml.get_recent_data()

Pydantic Models

Type-safe configuration and credential management.

from lfcdemolib import LfcNotebookConfig, LfcCredential

# Validate configuration
config = LfcNotebookConfig(config_dict)

# Validate credentials
credential = LfcCredential(secrets_json)

Database Support

Supported Databases

  • SQL Server: CDC and Change Tracking (CT) support
  • MySQL: Full replication support
  • PostgreSQL: Logical replication support
  • Oracle: 19c and later

Supported Cloud Providers

  • Azure: SQL Database, Azure Database for MySQL/PostgreSQL
  • OCI: Oracle Cloud Infrastructure databases

Configuration

LfcNotebookConfig

config_dict = {
    "source_connection_name": "lfcddemo-azure-mysql-both",  # Required
    "cdc_qbc": "cdc",                                      # Required: "cdc" or "qbc"
    "target_catalog": "main",                               # Optional: defaults to "main"
    "source_schema": None,                                  # Optional: auto-detect
    "database": {                                           # Required if connection_name is blank
        "cloud": "azure",                                   # "azure" or "oci"
        "type": "mysql"                                     # "mysql", "postgresql", "sqlserver", "oracle"
    }
}

LfcCredential (V2 Format)

credential = {
    "host_fqdn": "myserver.database.windows.net",
    "port": 3306,
    "catalog": "mydb",
    "schema": "dbo",
    "username": "user",
    "password": "pass",
    "db_type": "mysql",
    "cloud": {
        "provider": "azure",
        "region": "eastus"
    },
    "dba": {
        "username": "admin",
        "password": "adminpass"
    }
}

Advanced Features

Automatic Scheduling

# DML operations run automatically
d = lfcdemolib.DemoInstance(config_dict, dbutils, spark)
# Auto-scheduled DML operations every 10 seconds

Custom Scheduler Jobs

def my_task():
    print("Running custom task")

d.scheduler.add_job(my_task, 'interval', seconds=30, id='my_task')

Connection Management

from lfcdemolib import LfcConn

# Manage Databricks connections
lfc_conn = LfcConn(workspace_client=workspace_client)
connection = lfc_conn.get_connection(connection_name)

Secret Management

from lfcdemolib import LfcSecrets

# Manage Databricks secrets
lfc_secrets = LfcSecrets(workspace_client=workspace_client)
secret = lfc_secrets.get_secret(scope='lfcddemo', key='mysql_password')

Local Credential Storage

from lfcdemolib import SimpleLocalCred

# Save credentials locally
cred_manager = SimpleLocalCred()
cred_manager.save_credentials(db_details, db_type='mysql', cloud='azure')

# Load credentials
credential = cred_manager.get_credential(
    host='myserver.database.windows.net',
    db_type='mysql'
)

Testing

SimpleTest

Comprehensive database test suite.

from lfcdemolib import SimpleTest

tester = SimpleTest(workspace_client, config)
results = tester.run_comprehensive_tests()

Command-Line Tools

Deploy Credentials

cd lfc/db/bin
python deploy_credentials_to_workspaces.py \
    --credential-file ~/.lfcddemo/credentials.json \
    --target-workspace prod

Convert Secrets

python convert_secret_to_credential.py \
    --scope-name lfcddemo \
    --secret-name mysql-connection \
    --source azure

Examples

Multi-Database Demo

import lfcdemolib

# MySQL
mysql_d = lfcdemolib.DemoInstance(mysql_config, dbutils, spark)
mysql_d.create_pipeline(mysql_spec)

# PostgreSQL
pg_d = lfcdemolib.DemoInstance(pg_config, dbutils, spark)
pg_d.create_pipeline(pg_spec)

# SQL Server
sqlserver_d = lfcdemolib.DemoInstance(sqlserver_config, dbutils, spark)
sqlserver_d.create_pipeline(sqlserver_spec)

# All share the same scheduler
print(mysql_d.scheduler is pg_d.scheduler)  # True

Monitoring

# Check active jobs
for job in d.scheduler.get_jobs():
    print(f"{job.id}: {job.next_run_time}")

# Check cleanup queue
for item in d.cleanup_queue.queue:
    print(item)

Requirements

  • Python >= 3.8
  • Databricks Runtime 13.0+
  • SQLAlchemy >= 1.4.0
  • Pydantic >= 1.8.0 (v1 compatibility)
  • APScheduler >= 3.9.0

License

This project is licensed under the Databricks Labs License - see the LICENSE file for details.

Contributing

This is a Databricks Labs project. Contributions are welcome! Please ensure:

  • Code follows PEP 8 style guidelines
  • All tests pass
  • Documentation is updated
  • Pydantic v1 compatibility is maintained

Support

For issues, questions, or contributions, please contact the Databricks Labs team.

Changelog

Version 0.0.6 (Current)

  • Fixed AttributeError: 'LfcNotebookConfig' object has no attribute 'get' in SimpleConn.py for Pydantic v2
  • Added _get_config_value() helper method for safe config access from both Pydantic models and dicts
  • Corrected README.md changelog (was incorrectly showing "Version 1.0.0", now shows accurate release history)
  • Improved compatibility with both Pydantic v1 and v2 models

Version 0.0.5

  • Fixed AttributeError with Pydantic v2 LfcNotebookConfig in SimpleConn.py
  • Added _get_config_value() helper method for safe config access
  • Improved compatibility with both Pydantic v1 and v2 models

Version 0.0.4

  • Added Pydantic v1/v2 compatibility layer (_pydantic_compat.py)
  • Now works with both Pydantic v1.10+ and v2.x
  • Resolves dependency conflicts with langchain, databricks-agents, etc.
  • Updated LfcCredentialModel and LfcNotebookConfig to use compatibility layer

Version 0.0.3

  • Fixed VERSION file not included in MANIFEST.in (build error fix)
  • Added VERSION to package manifest for proper sdist builds
  • Fixed cleanup queue display format in notebooks

Version 0.0.2

  • Fixed pydantic version requirement for Databricks compatibility
  • Added typing_extensions compatibility
  • All database drivers included as core dependencies
  • Updated description to "Lakeflow Connect Demo Library"

Version 0.0.1

  • Initial release
  • DemoInstance facade for simplified initialization
  • Support for MySQL, PostgreSQL, SQL Server, Oracle
  • Azure and OCI cloud provider support
  • Pydantic v1-based validation
  • APScheduler integration
  • Comprehensive test framework

Databricks Labs | Documentation | Examples | API Reference

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lfcdemolib-0.0.11.tar.gz (188.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lfcdemolib-0.0.11-py3-none-any.whl (213.7 kB view details)

Uploaded Python 3

File details

Details for the file lfcdemolib-0.0.11.tar.gz.

File metadata

  • Download URL: lfcdemolib-0.0.11.tar.gz
  • Upload date:
  • Size: 188.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for lfcdemolib-0.0.11.tar.gz
Algorithm Hash digest
SHA256 945f947dd696d4efcd9cb96c2015d73855ee1f70c2e17ef9c4d7c7100c769de7
MD5 7a544c70b63eed397598303043a350d9
BLAKE2b-256 52b88da01ff35971312f9c0686032b32ce1507191ea691d314fa7c32e70b237a

See more details on using hashes here.

File details

Details for the file lfcdemolib-0.0.11-py3-none-any.whl.

File metadata

  • Download URL: lfcdemolib-0.0.11-py3-none-any.whl
  • Upload date:
  • Size: 213.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for lfcdemolib-0.0.11-py3-none-any.whl
Algorithm Hash digest
SHA256 b48f731ef660fb3f679e5ca3fba1377173f50ea2d4ea31069f8a403263e837f1
MD5 419ff17e3aa36e959ed0ba286c85603f
BLAKE2b-256 e7f8cf2f07ff8fd291d425a0e16b3f6c259d8cfb9a0338097656fff478ac9db5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page