Skip to content

Compression Support

sql-splitter automatically detects and decompresses compressed input files based on file extension.

FormatExtensionLibrary
Gzip.gzflate2
Bzip2.bz2bzip2
XZ/LZMA.xzxz2
Zstandard.zstzstd

Simply pass a compressed file—no flags needed:

Terminal window
# Gzip
sql-splitter split backup.sql.gz -o tables/
# Bzip2
sql-splitter analyze database.sql.bz2
# XZ
sql-splitter validate dump.sql.xz
# Zstandard
sql-splitter convert mysql.sql.zst --to postgres -o pg.sql

Every command that accepts an input file supports compressed input:

Terminal window
sql-splitter split backup.sql.gz -o tables/
sql-splitter analyze backup.sql.gz
sql-splitter merge tables/ -o merged.sql # Note: merge reads directory, not compressed file
sql-splitter sample backup.sql.gz --percent 10 -o sample.sql
sql-splitter shard backup.sql.gz --tenant-value 123 -o tenant.sql
sql-splitter convert backup.sql.gz --to postgres -o pg.sql
sql-splitter validate backup.sql.gz --strict
sql-splitter diff old.sql.gz new.sql.gz
sql-splitter redact backup.sql.gz --hash "*.email" -o safe.sql
sql-splitter graph backup.sql.gz -o schema.html
sql-splitter order backup.sql.gz -o ordered.sql
sql-splitter query backup.sql.gz "SELECT COUNT(*) FROM users"

sql-splitter does not compress output directly. Use pipes for compressed output:

Terminal window
# Gzip output
sql-splitter merge tables/ | gzip > merged.sql.gz
# Zstandard output (faster, better compression)
sql-splitter sample dump.sql --percent 10 | zstd > sample.sql.zst
# Bzip2 output
sql-splitter convert mysql.sql --to postgres | bzip2 > pg.sql.bz2
  • Gzip: Good balance of speed and compression, widely supported
  • Zstandard: Fastest decompression, excellent compression ratio, recommended for large files
  • XZ: Best compression ratio but slower, good for archival
  • Bzip2: Moderate speed and compression, legacy format

For best performance with very large dumps, Zstandard (.zst) is recommended:

Terminal window
# Compress with zstd for optimal speed
zstd -T0 huge-dump.sql -o huge-dump.sql.zst
# Process compressed file
sql-splitter analyze huge-dump.sql.zst --progress

When reading from stdin with -, you can decompress externally:

Terminal window
# Decompress with zcat and pipe
zcat backup.sql.gz | sql-splitter analyze -
# Or use process substitution
sql-splitter analyze <(zcat backup.sql.gz)

However, passing the compressed file directly is simpler and handles buffering better:

Terminal window
sql-splitter analyze backup.sql.gz