DOJO-Beam-Transforms
DOJO-Beam-Transforms is a reusable collection of Apache Beam transforms and utility components for data cleaning, enrichment, and ingestion workflows.
Current Release
- Package:
dojo-beam-transforms - Current release:
3.1.1 - Python target:
3.12
Compatibility Matrix (v3.1.1)
Apache Beam SDK
apache-beam[dataframe,gcp,interactive]==2.72.0
Core Dependencies
pandas==2.1.1numpy==1.26.3pytz==2025.2openpyxl==3.1.5
Installation
Install from PyPI
pip install dojo-beam-transforms==3.1.1
Install from GitHub tag
pip install "git+https://github.com/DOJO-Smart-Ways/DOJO-Beam-Transforms.git@release-v3.1.1"
Updated Usage Examples
Example 1: CSV input + cleaning + enrichment
import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions
from pipeline_components.input_file import read_csvs_union
from pipeline_components import data_cleaning
from pipeline_components import data_enrichment
pipeline_options = PipelineOptions()
with beam.Pipeline(options=pipeline_options) as pipeline:
records = read_csvs_union(
pipeline=pipeline,
input_pattern="gs://my-bucket/input/*.csv",
delimiter=";",
identifier="orders"
)
cleaned = (
records
| "Keep Relevant Columns" >> beam.ParDo(
KeepColumns(["order_id", "status", "amount"])
)
| "Normalize Status" >> beam.ParDo(
ReplaceValues(["status"], {"": "UNKNOWN", None: "UNKNOWN"})
)
| "Clean Amount Regex" >> beam.ParDo(
ReplaceRegex(["amount"], [(r",", ".")])
)
)
enriched = (
cleaned
| "Cast Amount To Float" >> beam.ParDo(ColumnsToFloat(["amount"]))
| "Force Order Id As String" >> beam.ParDo(ColumnsToString(["order_id"]))
)
_ = enriched | "Write Output" >> beam.io.WriteToText("gs://my-bucket/output/orders")
Example 2: Read from BigQuery and write to BigQuery
import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions
from pipeline_components.input_file import read_bq
from pipeline_components.data_cleaning.TrimValues import TrimValues
from pipeline_components.data_cleaning.DropDuplicates import DropDuplicates
temp_location = "gs://my-project-temp/dataflow"
query = """
SELECT order_id, customer_name, city
FROM `my_project.my_dataset.orders`
"""
pipeline_options = PipelineOptions()
with beam.Pipeline(options=pipeline_options) as pipeline:
rows = read_bq(
pipeline=pipeline,
query=query,
temp_location=temp_location,
use_standard_sql=True,
identifier="orders_bq"
)
transformed = (
rows
| "Trim Customer Name" >> beam.ParDo(TrimValues(["customer_name"]))
| "Drop Duplicates" >> beam.ParDo(DropDuplicates(["order_id"]))
)
transformed | "Write To BQ" >> beam.io.WriteToBigQuery(
table="my_project:my_dataset.orders_clean",
write_disposition=beam.io.BigQueryDisposition.WRITE_TRUNCATE,
create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED,
)
Docker Image for Dataflow Custom Container
The repository includes a Dockerfile aligned with Beam SDK 2.72.0 and Python 3.12.
docker build -t dojo_beam:3.1.1 .
docker tag dojo_beam:3.1.1 REGION-docker.pkg.dev/PROJECT_ID/dojo-beam/dojo_beam:3.1.1
docker push REGION-docker.pkg.dev/PROJECT_ID/dojo-beam/dojo_beam:3.1.1
For Dataflow custom container runs, set:
sdk_container_image=REGION-docker.pkg.dev/PROJECT_ID/dojo-beam/dojo_beam:3.1.1sdk_location=container
Release Preparation Checklist (GitHub + PyPI)
- Confirm versions are aligned in:
setup.pypyproject.tomlenums/DojoBeamTransformVersion.py- Docker image/tag references
- Build distributions:
python -m pip install --upgrade build twine
python -m build
python -m twine check dist/*
- Tag and publish GitHub release:
git tag -a release-v3.1.1 -m "Release v3.1.1"
git push origin release-v3.1.1
- Publish to PyPI:
python -m twine upload dist/*
Release Text (Ready to Use)
See RELEASE_TEXT_v3.1.1.md for prewritten notes for:
- GitHub Release description
- PyPI long-description changelog section
Metadata
Release files for dojo-beam-transforms 3.1.1.post1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| dojo_beam_transforms-3.1.1.post1.tar.gz | 24.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dojo_beam_transforms-3.1.1.post1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 67.6 kB
Release files / dojo_beam_transforms-3.1.1.post1.tar.gz
| Download URL | dojo_beam_transforms-3.1.1.post1.tar.gz |
|---|---|
| Size | 24.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
271be8ebb21c04caca34285febb982feabdff32814887007f595fbe90664f1b6
|
|
BLAKE2b-256 checksum How to use checksums |
21b0a4e3927e947720917807f847bd5b3e060043917f2485df97eca3afbc2b50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|
Release files / dojo_beam_transforms-3.1.1.post1-py3-none-any.whl
| Download URL | dojo_beam_transforms-3.1.1.post1-py3-none-any.whl |
|---|---|
| Size | 43.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b7bd22bd6c34c687c96af639d9bb7a9faa03aa1c87db9a50fa0bfce239e89128
|
|
BLAKE2b-256 checksum How to use checksums |
23f408077d4a4368ac2523b9ecfe05e1e7e76cceb255599a4bcc78f21ca5dc81
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|
Security for dojo-beam-transforms 3.1.1.post1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.