Release Notes 1.5
New Features
SQL Server Backup Files — -C backup_mssql
FastBCP reads tables straight from SQL Server full backups (.bak files), without restoring them and without any SQL Server instance, through the embedded ArpeMSBackup ADBC driver. No server to provision, no restore time, no disk space for a restored database: point FastBCP at the backup and export the tables to Parquet.
--server(-S) is the directory of the backups,--database(-I) the backup file (or a pattern matching one backup). No credentials.- Backups: full and copy-only full backups, uncompressed or compressed with MS_XPRESS or ZSTD, any
BLOCKSIZE/MAXTRANSFERSIZE, from SQL Server 2017, 2019, 2022 and 2025 (Windows or Linux), databases over several data files and filegroups. - Striped backups (
BACKUP ... TO DISK = a, DISK = b, ...): a pattern matching the stripes (-I "tpch_*.bak") or a list separated by;, in any order. An incomplete set or stripes of different backups are refused with an explicit message. - Several backups in one file (
WITH NOINIT): the last full backup of the file is read. - Tables: heaps and clustered indexes, partitions, ROW / PAGE compression, LOBs (
(n)varchar(max),varbinary(max),text,ntext,image, row-overflow),xml, sparse columns, persisted computed columns, and clustered columnstore tables (archive compression and open delta store included). Every SQL Server type is exported,sql_variantincluded (as text) — see the datatypes mapping. - Refused with a clear message: backups of TDE databases and encrypted backups (
WITH ENCRYPTION), which cannot be read without the server certificate; a file without a full backup. - Parallelism:
--parallelmethod Physicalresolves to the new Pages method: each thread reads a slice of the data pages (rowstore) or of the rowgroups (columnstore) of the shared, already indexed backup.NoneandPhysicalare the only methods for this source. - Out of core: the backup is read in place, never loaded in memory. A 9.3 GiB backup is read under a 128 MB memory limit (rowstore).
--queryacceptsSELECT * | col1, col2, … FROM [schema.]table. Parquet output only. Windows x64 and Linux x64.
Performance (FastBCP to Parquet, degree 8, TPC-H orders 15 M rows): about 5 M rows/s from an uncompressed backup, against 3.3 M rows/s with adbc_mssql and 1.4 M rows/s with mssql reading the live database; 2.1 to 2.6 M rows/s from MS_XPRESS / ZSTD backups. lineitem as a clustered columnstore (60 M rows): 2.8 M rows/s against 2.4 M rows/s with adbc_mssql.
- Windows
- Linux
.\FastBCP.exe `
--connectiontype backup_mssql `
--server "D:\Backups\MSSQL" `
--database "tpch_full.bak" `
--sourceschema "dbo" `
--sourcetable "orders" `
--directory "D:\export\orders" `
--fileoutput "orders.parquet" `
--parallelmethod Physical `
--paralleldegree 8
./FastBCP \
--connectiontype backup_mssql \
--server "/var/opt/mssql/backup" \
--database "tpch_*.bak" \
--sourceschema "dbo" \
--sourcetable "orders" \
--directory "/export/orders" \
--fileoutput "orders.parquet" \
--parallelmethod Physical \
--paralleldegree 8
See SQL Server backup files for the details.
Wizard
- The Wizard offers
backup_mssqlin the ADBC (High Performance) connectors: the server field becomes the backup directory (a Windows or Linux path, following the chosen platform) and the database field the backup file. OnlyNoneandPhysicalare offered as parallel methods. - In an empty field, the → (right arrow) key takes the suggested value (the placeholder).
Behaviour Changes
Licence
- A licence is always required, including for the free 30-day trial, which is now a licence file requested at arpe.io. The build-date trial and the trial token embedded for the ADBC drivers are gone.
--helpand--versionrun without a licence. - The default
FastBCP.licis looked up in the current directory, then next to the executable. - A licence file can hold several blocks (FastBCP, ADBC drivers, other products) in any order: the FASTBCP block is checked against the signature that follows it.
- The ADBC licence is forwarded to the drivers inline (
arpeio.adbc.license), with every ADBC block and its signature; no temporary file. A driver licence of your own (--sourceconnectstring,ARPEIO_ADBC_LICENCE/ARPEIO_ADBC_LICENCE_FILE) wins, and a damaged ADBC block is reported as such. - An
adbc_*orbackup_mssqlconnection type with no ADBC driver block (and noARPEIO_ADBC_LICENCE/ARPEIO_ADBC_LICENCE_FILE) stops with exit code 99 instead of falling back to a trial token.
See License.
Dependencies
| Component | Version |
|---|---|
| ArpeMSBackup ADBC driver | 0.1.6 (new) |
| ArpeMSSQL ADBC driver | 0.7.8 (parallel connections opened 50 ms apart, so SQL Server spreads them over its schedulers: 4-way parallel reads up to twice as fast; ARPEMSSQL_CONNECT_SPACING_MS changes the gap; fixes a crash when the thread that loaded the driver exits) |
| ArpeOracle ADBC driver | 0.4.3 (choice of the Native Network Encryption integrity algorithm with adbc.arpeoracle.data_integrity_types; faster NUMBER to float64 reads) |
| ArpeNetezza ADBC driver | 0.3.8 (no driver code change) |
| ArpeTeradata ADBC driver | 0.3.5 (uri and ADO.NET connection_string parsed, like the other drivers) |
| AdbcFileExport | 0.5.5 (arpemsbackup driver profile) |
The other components are unchanged since 1.4.
Documentation
- Connection Parameters:
backup_mssqlconnection type. - Parallel Parameters:
Physicalresolves toPageson SQL Server backup files. - Datatypes conversion: SQL Server backup files → Parquet.
- Examples: exports from backup files, striped backups.
- License: lookup order, trial licence, exit codes.