FastBCP 1.3: Netezza over ADBC and DBPartition exports
FastBCP 1.3 adds two things: Netezza / IBM NPS export without a vendor .NET provider, and a DBPartition parallel method that exports a partitioned table along its native partitions.
It also changes how the adbc_* connection types behave. If you run those in production, read the upgrade checks at the end of the article before deploying 1.3.
Netezza through ADBC: -C adbc_netezza
The new adbc_netezza connection type uses ArpeNetezza, an ADBC driver embedded in FastBCP, for both the metadata step and the data step. NZdotNET is no longer needed.
- Works with IBM Cloud NPS. NPS 7.x needs
tls_min_version=1.0for TLS 1.0/1.1. - Output is Parquet only, as for the other
adbc_*types. - Parallel methods:
None,NZDataSlice,Ntile,Random,RangeId,DataDriven. --sourceconnectstringaccepts ADO.NET-style keys (Server,Port,User ID…) without theadbc.arpenz.prefix. Unsupported keys are ignored with one warning.
NZDataSlice needs no distribution key: FastBCP splits the query along the table's Netezza data slices. In 1.3, slices go through a shared work queue, so an idle worker picks up the next slice.
- Windows
- Linux
.\FastBCP.exe `
--connectiontype adbc_netezza `
--sourceconnectstring "Server=nps-host;Port=5480;Database=SALES;User ID=admin;Password=FastPassword" `
--sourceschema "ADMIN" `
--sourcetable "ORDERS" `
--directory "D:\export\orders" `
--fileoutput "orders.parquet" `
--parallelmethod NZDataSlice `
--paralleldegree 8
./FastBCP \
--connectiontype adbc_netezza \
--sourceconnectstring "Server=nps-host;Port=5480;Database=SALES;User ID=admin;Password=FastPassword" \
--sourceschema "ADMIN" \
--sourcetable "ORDERS" \
--directory "/data/export/orders" \
--fileoutput "orders.parquet" \
--parallelmethod NZDataSlice \
--paralleldegree 8
To adapt this command to your environment, use the Netezza to local Parquet pipeline builder.
Throughput. We exported a wide Netezza table with this setup (adbc_netezza, NZDataSlice, automatic partitioning):
| Rows | Columns | Elapsed time | Throughput | FastBCP memory |
|---|---|---|---|---|
| 423 million | 160 | 636 s | 106 MCells/sec (about 665,000 rows/sec) | under 3 GB |
A cell is one column value in one row, so MCells/sec accounts for table width, which rows/sec alone hides. The export ran with --paralleldegree 30. Results in other environments will differ.
The source table occupies 200 GB in Netezza. The export wrote 40 GB of Parquet compressed with zstd, one fifth of that size:
Files exported from NPS 7 with v1.3.0-netezza.1 or v1.3.0-netezza.2 may contain wrong NUMERIC values. Re-export them with FastBCP 1.3.
Native partitions: -m DBPartition
DBPartition runs one extraction per native partition or subpartition, on SQL Server, PostgreSQL, Oracle, MySQL and Teradata, and their adbc_* counterparts. It requires --sourceschema and --sourcetable.
CHUNK is the default. HIVE writes Hive-style directories that Spark, DuckDB, Trino or Athena can read as a partitioned dataset. SQL Server uses bounds=<lower>_<upper>/ and Teradata uses L1=<n>/. If the table is not partitioned, has a single partition, or the source is not supported, FastBCP falls back to None and logs a warning: check the log.
- Windows
- Linux
$env:FASTBCP_DBPARTITION_TARGET_MODE = "HIVE"
.\FastBCP.exe `
--connectiontype oraodp `
--server "dbserver:1521/ORCLPDB" `
--user "FastUser" `
--password "FastPassword" `
--sourceschema "SALES" `
--sourcetable "ORDERS" `
--directory "D:\export\orders" `
--fileoutput "orders.parquet" `
--parallelmethod DBPartition `
--paralleldegree 8 `
--merge false
export FASTBCP_DBPARTITION_TARGET_MODE=HIVE
./FastBCP \
--connectiontype oraodp \
--server "dbserver:1521/ORCLPDB" \
--user "FastUser" \
--password "FastPassword" \
--sourceschema "SALES" \
--sourcetable "ORDERS" \
--directory "/data/export/orders" \
--fileoutput "orders.parquet" \
--parallelmethod DBPartition \
--paralleldegree 8 \
--merge false
If one partition holds most of the rows, a key-based method such as RangeId or Ntile may balance the work better.
Azure Blob Storage and ADBC connectors
Azure Blob Storage. FastBCP now uses AZURE_STORAGE_CONNECTION_STRING or AZURE_STORAGE_SAS_URL when one of them is set. Otherwise it falls back to DefaultAzureCredential. The log shows which method was used. A missing create permission is tolerated when the container already exists.
ADBC connectors:
adbc_mssqlhonours--applicationintent(defaultReadOnly), so read-only routing on an Availability Group listener sends the export to a readable secondary.adbc_pgsqlreads the libpq environment:PGUSER,PGPASSWORD,~/.pgpass,PGSSLROOTCERT.adbc_oracleresolves TNS aliases throughtnsnames.ora.
Before you upgrade
These changes can alter the result of an existing job:
adbc_mssql/adbc_pgsql/adbc_oraclerun fully on ADBC. The metadata and planning step no longer uses SqlClient, Npgsql or ODP.NET, and one connection string serves both steps. Native keys with no driver equivalent (e.g.Pooling=false) are dropped with a warning. Run each job once and read the warnings.adbc_pgsql:NaNin aNUMERICcolumn now fails the read instead of becomingNULL. To keep the old behaviour, addadbc.arpepgsql.numeric_special=nullto-g.adbc_oraclesendsencryption=acceptedanddata_integrity=accepted, so the server decides. Override withFASTBCP_ADBC_ENCRYPTION/FASTBCP_ADBC_DATA_INTEGRITYif needed.adbc_oracle+DataDriven: a scale-0NUMBER(<=18)key is now an integer, as withoraodp. Check Hive paths if a downstream job depends on them.
Notable fixes
- Ntile could lose rows when the last bucket held a single key value. A midnight lower bound could also truncate the upper bound's time. If you used
Ntilebefore 1.3, compare source and target row counts. - Quoted passwords containing
;are now fully masked in logs and telemetry. adbc_mssqlresolves named instances (host\INSTANCE) through the SQL Server Browser.oraodp/adbc_oraclewith a TNS alias plus-U/-Xno longer fail withORA-50008.- Netezza: fixes for
nzoledb,nzcopy -m Timepartition, andNZDataSlicewith--timestamped.
The full list is in the release notes.



