Metadata-Version: 2.4
Name: transferred
Version: 0.1.3
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Rust
Classifier: Topic :: Database
Classifier: Topic :: Software Development :: Libraries
Requires-Dist: pyarrow>=24 ; extra == 'arrow'
Requires-Dist: transferred[arrow] ; extra == 'iterable'
Provides-Extra: arrow
Provides-Extra: iterable
Summary: The most convenient data transfer tool.
Keywords: data-transfer,etl,arrow,parquet,postgres
Author: Vania Livadnyi
License-Expression: MIT
Requires-Python: >=3.14
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Repository, https://github.com/skatromb/transferred

# transferred

<img src="https://raw.githubusercontent.com/skatromb/transferred/main/logo.png" alt="transferred" width="240">


The most convenient batch data transfer tool. Inspired by [dlt](https://dlthub.com).

`transferred` moves table data between systems. Blazing fast, no transformations supported — hand them over to your Data Warehouse.

## Install

```bash
pip install transferred
```

Requires Python 3.14.

## Usage

```python
from pathlib import Path

from transferred import FilesDestination, Parquet, PostgresSource, Transfer

source = PostgresSource(
    "postgres://user:pass@localhost:5432/db",
    table="public.orders",
)
destination = FilesDestination(
    Path("orders/"),
    format=Parquet(compression="zstd"),
)

report = Transfer(source, destination).run()

print(report)
# RunReport:
#   rows: 10,000,000
#   written: 243.04 MiB
#   duration: 13s 627ms
#   written objects:
#     orders/part-00001.parquet
```

10M rows of 22 diverse columns including `jsonb` and PostGIS geometry — peaking at 275 MiB RAM interpreter included.

Look at [docs/DLT_COMPARISON.md](docs/DLT_COMPARISON.md) for more performance insights.

More in [examples/](./examples).

## Supported

Sources:
- Parquet file — `FilesSource`
- Postgres table — `PostgresSource`
- DataFrames — polars or pandas `DataFrame`, a duckdb result, a `pa.Table`, pyarrow's `RecordBatch` or `RecordBatchReader`
- Python iterables of `dict` / `@dataclass` / `pydantic.BaseModel` (requires `pip install transferred[iterable]`)

Destinations:
- Parquet file — `FilesDestination` (zstd / snappy / uncompressed)
- Postgres table — `PostgresDestination` (full replace, swapped in one transaction)

BigQuery, S3/GCS and incremental loads land later. See [PLAN.md](./PLAN.md).

## Promises

- ✅ Make data transfers as simple as it could be
- 🚧 Enforce best practices by default
- 🚧 Blazing fast
- ✅ No OOMs!

## License

MIT. See [LICENSE](./LICENSE).

