ytclone
Copy static tables, files, YSON documents, and directories between YTsaurus and S3, preserving schemas and portable attributes.
Restoring from S3 requires a yt-s3-v2 archive created by ytclone. Earlier archive
formats are rejected; re-export the source to a new S3 prefix.
Installation
pip install ytclone
Requires CPython 3.10+ on Linux x86_64 with glibc or macOS ARM64 (Apple Silicon).
Also available as standalone downloads and Docker images.
Quick start
Configure access to YTsaurus and S3:
export YT_PROXY="https://yt.example.com"
export YT_TOKEN="..."
export AWS_ACCESS_KEY_ID="..."
export AWS_SECRET_ACCESS_KEY="..."
export AWS_DEFAULT_REGION="us-east-1"
The S3 bucket must already exist. For an S3-compatible service, also set
S3_ENDPOINT to its URL. Use AWS_SESSION_TOKEN for temporary credentials.
Copy to S3:
ytclone //home/analytics/events s3://my-bucket/export --log-file export.log
The full YT path is appended to the S3 prefix: this command stores events at
s3://my-bucket/export/home/analytics/events/.
Restore to YTsaurus:
ytclone s3://my-bucket/export/home/analytics/events \
//home/analytics/events_copy --log-file restore.log
The restore destination is used exactly as given: the children of events go
directly under //home/analytics/events_copy. With --log-file, progress appears
on the console and detailed logs are appended to the file.
Repeated runs
Rerun the command after an interruption or source update. Completed, unchanged nodes are skipped; other nodes are copied again. An unfinished table, file, or document restarts from the beginning.
Source data is never deleted. Destination nodes absent from the source are kept. Use a separate S3 prefix for each source cluster.
Parallel export
Use --max-streams
to export large tables through several streams, or
ytclone-parallel
for multiple copy processes. Both apply to YT → S3; restore with ytclone.
Table format and compression
Both export commands now request Zstandard-compressed table data from the YT
proxy by default. They remove the z-zstd_<level> transport container and upload
its standard Zstandard frames without local decompression or recompression.
Files and documents continue to use local Zstandard compression.
The initial supported combinations are --table-format yson (the default) or
--table-format skiff, with --compression zstd and --compression-level 3.
For example:
ytclone //home/analytics/events s3://my-bucket/skiff-export \
--table-format skiff --compression-level 3 --log-file export.log
Each table's manifest records its wire format and schema. Restore selects them automatically, so no format option is needed. Skiff keeps complex values and columns outside the declared schema in its YSON catch-all field. Schemas, unsigned integers, binary strings and nulls are preserved.
The deprecated --yt-zstd-passthrough export option is accepted as a no-op;
omitting it now gives the same table compression behavior. Unsupported proxy
compression fails explicitly, without falling back to local table compression.
Proxy blocks may compress less efficiently than a continuous local stream.
Use fresh destination prefixes when comparing formats or compression levels;
repeated unchanged copies are skipped. Changing a table's format or compression
level forces a fresh export of that table. Existing v2 YSON archives remain
readable, but upgrading from local table compression causes a one-time table
re-export. Use this version or newer to restore newly written manifests; older
readers do not understand the added format metadata.
Before you copy
- Dynamic tables are skipped and reported; links are unsupported.
- One current archive version. Failed uploads keep the previous copy available. Updates publish first, then try to delete the old copy. No history is kept.
- Permissions are not copied. ACLs, ownership, and account settings are excluded. Replacing an existing YT table, file, or document recreates the node, so its previous settings are not preserved either.
- Consistency is per node. A directory tree is not a single point-in-time snapshot.
- Concurrent exports can fail on conflicts. Updating an archive during restore can also fail the restore; rerun it. Concurrent restores to the same YT nodes are unsupported.
- S3 must support atomic conditional writes. See update and recovery details for rollback and cleanup behavior.
Documentation
Run ytclone --help or ytclone-parallel --help for all command-line options.
- User guide: paths, configuration, progress, retries, and parallel export.
- Architecture: archive format, change detection, and execution diagrams.
- Contributing: installation from source, development, and tests.
License: MIT.
Metadata
Release files for ytclone 0.1.29
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 | Actions |
|---|---|---|---|---|
| ytclone-0.1.29.tar.gz | 58.4 kB | With provenance | Details for ytclone-0.1.29.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ytclone-0.1.29-py3-none-any.whl | Python 3 | none | any | Details for ytclone-0.1.29-py3-none-any.whl |
Total release size: 129.1 kB
Release files / ytclone-0.1.29.tar.gz
| Download URL | ytclone-0.1.29.tar.gz |
|---|---|
| Size | 58.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ff70790b3f2fc5b242a0cae59f4bf87ac06db426a084f94fd10a19302d45b935
|
|
BLAKE2b-256 checksum How to use checksums |
bed4ee39e795c6df273febffc274aec2f275361f1c60ee63c734c38db0bf9fbd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.
Transparency logRelease files / ytclone-0.1.29-py3-none-any.whl
| Download URL | ytclone-0.1.29-py3-none-any.whl |
|---|---|
| Size | 70.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c8e300f0683e40128cb5b625cd49aab6b4e95a763143bde7a527756e4b103c8b
|
|
BLAKE2b-256 checksum How to use checksums |
47612d1be5fe5a5e8f4c3ab86b9383b63f4e0eeffe8fab2db722e4a095f36cff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.
Transparency logSecurity for ytclone 0.1.29
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for ytclone-0.1.29.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.
Transparency logA 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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.