Rowbase SDK — declare data pipelines as Python functions
Project description
Rowbase SDK
Status: Alpha
Python: 3.12+
Core Dependencies: Polars, Pydantic, Typer
Overview
Rowbase SDK is a Python library for Rowbase engineers to author data pipelines. These pipelines are then deployed and made available to non-technical customers who simply upload their data and receive cleaned results.
Key positioning:
- Agentic authoring — Rowbase engineers write pipelines (often with AI assistance)
- Invisible to users — Customers never see the code; they just upload files and get results
- B2B data cleaning — Customers are non-technical business users who need clean data
Who Uses This
| User | Use Case |
|---|---|
| Rowbase Engineers | Write pipelines using the SDK, deploy via CLI |
| End Customers | Upload data via web UI, download cleaned results |
The customer never interacts with the SDK directly.
Installation
pip install rowbase
# or: uv add rowbase
Quick Start
import rowbase
import polars as pl
@rowbase.pipeline
def orders_etl():
orders = rowbase.source("orders", columns=["order_id", "customer", "amount", "status"])
customers = rowbase.source("customers", columns=["customer_id", "name", "email"])
@rowbase.dataset("completed_orders", data_from=orders)
def filter_completed(df):
return df.filter(pl.col("status") == "completed")
@rowbase.dataset("enriched_orders", data_from=[filter_completed, customers])
def enrich(orders_df, customers_df):
return orders_df.join(
customers_df,
left_on="customer",
right_on="customer_id",
)
yield completed_orders
yield enriched_orders
Authoring Workflow
- Understand customer data — What does their raw data look like?
- Define sources — What columns/format do they upload?
- Write transformations — Use Polars to clean/transform
- Test locally — Use
rowbase runto test - Deploy — Use
rowbase deployto deploy to the platform - Customer uses — Customer uploads files via web UI
Core Concepts
@rowbase.pipeline
Decorator that marks a function as a pipeline. The function should be a generator that yields published datasets.
@rowbase.pipeline
def my_pipeline():
# ... sources and datasets ...
yield published_dataset
rowbase.source()
Declares an input data source. Returns a SourceHandle used as input to datasets.
orders = rowbase.source(
"orders",
columns=["order_id", "customer", "amount"],
description="Raw orders from Shopify",
reader_options={"separator": ",", "has_header": True},
optional=False,
)
@rowbase.dataset
Declares a transformation function. The decorated function receives DataFrames and returns a DataFrame.
@rowbase.dataset(
"cleaned_data",
data_from=source_handle,
schema=MyPydanticModel,
on_schema_error="fail",
description="Cleaned and validated data",
metadata=True,
)
def transform(df):
return df.filter(pl.col("amount") > 0)
CLI Commands
rowbase --help
# Initialize a new pipeline project
rowbase init --name my-pipeline
# Run locally for testing
rowbase run
# Validate before deploying
rowbase validate
# Deploy pipeline to Rowbase
rowbase deploy
# List deployed pipelines
rowbase list
# Inspect local data files
rowbase data inspect data/input.csv
Deployment
To deploy a pipeline:
rowbase deploy
This validates your pipeline locally, uploads the code to the Rowbase API, and creates a new version that customers can use. rowbase push also works as an alias.
Customer Experience
Once deployed, customers see the pipeline in their dashboard:
- Select pipeline — Choose "Orders ETL" from the list
- Upload files — Upload
orders.csvandcustomers.csv - Submit — Click "Run"
- Wait — See progress (pending → running → completed)
- Download — Get enriched_orders.csv with clean data
Example: Data Cleaning Pipeline
import rowbase
import polars as pl
@rowbase.pipeline
def clean_customer_data():
customers = rowbase.source("customers")
@rowbase.dataset("valid_emails", data_from=customers)
def filter_valid(df):
return df.filter(pl.col("email").str.contains("@"))
@rowbase.dataset("normalized_phones", data_from=valid_emails)
def normalize_phones(df):
return df.with_columns(
pl.col("phone").str.replace_all(r"[^0-9]", "").alias("phone")
)
yield valid_emails
yield normalized_phones
Dependencies
- polars - DataFrame operations
- pydantic - Schema validation
- typer - CLI framework
- pyarrow - Parquet support
- xlsxwriter - Excel support
- fastexcel - Fast Excel parsing
License
Proprietary - All rights reserved
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 rowbase-0.3.0.tar.gz.
File metadata
- Download URL: rowbase-0.3.0.tar.gz
- Upload date:
- Size: 126.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b322d95dedc523a125716eefd167b608835d91521dd40cf6f10dfef077233f0
|
|
| MD5 |
616ed67f98184c5cd8880be9b8e8b272
|
|
| BLAKE2b-256 |
a0ff705c938b0cf558641aa9b5f00b475aace4f8e57f85c6b81e4497e55c04c1
|
Provenance
The following attestation bundles were made for rowbase-0.3.0.tar.gz:
Publisher:
publish.yml on Rowbase-com/rowbase-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rowbase-0.3.0.tar.gz -
Subject digest:
6b322d95dedc523a125716eefd167b608835d91521dd40cf6f10dfef077233f0 - Sigstore transparency entry: 1042990626
- Sigstore integration time:
-
Permalink:
Rowbase-com/rowbase-sdk@0b6d6506e653911be14d8f04aa0e4aabe85da465 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/Rowbase-com
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0b6d6506e653911be14d8f04aa0e4aabe85da465 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rowbase-0.3.0-py3-none-any.whl.
File metadata
- Download URL: rowbase-0.3.0-py3-none-any.whl
- Upload date:
- Size: 78.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa8f2fecc6b1c8d8fa5130cf4bef015a99ab5f8890149e9eab229ccea865522e
|
|
| MD5 |
91056b2578033350dfada88f6c5ead5f
|
|
| BLAKE2b-256 |
98ddf99907ef2135318204ea3646218baf956c27b70599fd8ab9c8b533efc7bf
|
Provenance
The following attestation bundles were made for rowbase-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on Rowbase-com/rowbase-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rowbase-0.3.0-py3-none-any.whl -
Subject digest:
fa8f2fecc6b1c8d8fa5130cf4bef015a99ab5f8890149e9eab229ccea865522e - Sigstore transparency entry: 1042990630
- Sigstore integration time:
-
Permalink:
Rowbase-com/rowbase-sdk@0b6d6506e653911be14d8f04aa0e4aabe85da465 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/Rowbase-com
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0b6d6506e653911be14d8f04aa0e4aabe85da465 -
Trigger Event:
release
-
Statement type: