Release Notes 1.3
New Features
ADBC Netezza — -C adbc_netezza
FastBCP now supports Netezza / IBM NPS through the embedded ArpeNetezza ADBC driver, via the new -C adbc_netezza connection type. The driver is used for both the metadata step and the data step.
Key highlights:
- No NZdotNET installation needed
- Works with IBM Cloud NPS
- Parquet output only, like the other
adbc_*connection types - Supported parallel methods:
None,NZDataSlice,Ntile,Random,RangeIdandDataDriven Application Namedefaults toFastBCP- NPS 7.x: TLS 1.0/1.1 supported (
tls_min_version=1.0, ArpeNetezza 0.3.2)
Connection string keys: --sourceconnectstring keys no longer need the adbc.arpenz. prefix. The following are all accepted:
- Friendly / ADO.NET keys:
Server,Host,host:port,Port,Database,User ID,Password,SSL Mode,Application Name, … - Plain driver keys:
sslmode,tls_min_version,char_encoding,login_timeout, … uriandconnection_string
Keys the driver does not support (e.g. propagate, Pooling) are ignored, with a single warning.
- 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
Files exported from NPS 7 with the pre-releases v1.3.0-netezza.1 / v1.3.0-netezza.2 may contain wrong values in NUMERIC columns. This is fixed in ArpeNetezza 0.3.3, shipped with FastBCP 1.3. Re-export the affected tables.
See Connection Parameters for more details.
New Parallel Method — DBPartition
The new -m DBPartition parallel method runs one extraction per native partition / subpartition of the source table.
Supported sources:
| Source | Partitioning used |
|---|---|
| SQL Server | $PARTITION |
| PostgreSQL | Leaf tables |
| Oracle | PARTITION (...) |
| MySQL | PARTITION (...) |
| Teradata | Row partitioning, single- and multi-level PPI |
The adbc_* counterparts are supported too.
- Requires
--sourceschemaand--sourcetable. - Falls back to
None, with a warning, when the table is not partitioned, has a single partition, or the source is not supported. - The largest partitions are scheduled first (based on catalog row estimates).
FASTBCP_DOP_EQUERYalso applies toDBPartition.
The output layout is controlled by the new FASTBCP_DBPARTITION_TARGET_MODE environment variable:
| Value | Output layout |
|---|---|
CHUNK (default) | <file>_chunk_NNN.<ext> |
HIVE | partition=<p>/[subpartition=<sp>/]<file>.<ext> (SQL Server uses bounds=<lower>_<upper>, Teradata L1=<n>/L2=<n>) |
--merge works in both modes. See Parallel Parameters for more details.
Azure Blob Storage — Authentication and Container Access
For direct commit to Azure Blob Storage:
- Authentication: besides
DefaultAzureCredential(still the fallback), FastBCP now acceptsAZURE_STORAGE_CONNECTION_STRINGorAZURE_STORAGE_SAS_URL. The selected authentication method is logged. - Container access: a missing create permission on the container (HTTP 403/409) is tolerated when the container already exists. 403 errors now give a clearer message (firewall, RBAC or SAS permissions).
See Azure Configuration for more details.
ADBC Connectors Improvements
--applicationintentwith-C adbc_mssql:--applicationintent(defaultReadOnly) and anApplicationIntentkey in--sourceconnectstringnow reach the ArpeMSSQL driver. An Availability Group listener with read-only routing sends the export to a readable secondary, as with-C mssql.-C adbc_pgsqlhonours the libpq environment:PGUSER,PGPASSWORD,PGPASSFILE/~/.pgpassandPGSSLROOTCERTare used when-U/-X/-gdo not provide them, like-C pgsql(ArpePGSQL 0.4.5).-C adbc_oracleresolves TNS aliases throughtnsnames.ora(TNS_ADMIN,$ORACLE_HOME/network/admin), like-C oraodp(ArpeOracle 0.3.11).
Behaviour Changes
adbc_mssql / adbc_pgsql / adbc_oracle Run Fully on ADBC
The metadata and planning step (row counts, column types, Ntile, Random, Timepartition, DBPartition, …) now runs on the ADBC driver instead of SqlClient, Npgsql or ODP.NET. A single connection string is used for both steps.
--sourceconnectstringaccepts the native syntax, explicitadbc.*/arpeio.*keys (they win over translated keys), or a whole-connectionuri/adbc.<driver>.connection_string.- Native keys with no driver equivalent (e.g.
Pooling=false) are dropped with a warning. With a whole-connectionuri/connection_string, native keys are dropped with a warning saying to put them inside the URI / connection string. - A
Driver=path in--sourceconnectstringis used by both steps.
Oracle Network Encryption with -C adbc_oracle
FastBCP now sends encryption=accepted and data_integrity=accepted, so the server decides, as with -C oraodp. FASTBCP_ADBC_ENCRYPTION / FASTBCP_ADBC_DATA_INTEGRITY or explicit keys still override this.
-C adbc_pgsql NUMERIC NaN
A NaN in a decimal column now fails the read instead of becoming NULL. Set adbc.arpepgsql.numeric_special=null in -g to keep the previous behaviour (ArpePGSQL 0.4.2+).
adbc_oracle DataDriven Keys
A scale-0 NUMBER(<=18) key is now treated as an integer, as with -C oraodp, so predicates and Hive paths are identical between both connection types.
NZDataSlice Scheduling
Slices now go through a shared work queue: an idle worker takes the next waiting slice, which is faster on uneven slices. After the first failure, no new slice starts. Output files are unchanged.
Bug Fixes
- Ntile lost rows (pre-existing): the last chunk now always includes its upper bound (rows were lost when the last bucket held a single key value), and a midnight lower bound no longer truncates the time of the upper bound. On Oracle, only date bounds are wrapped in
TO_DATE(string keys broke before). - Passwords in logs: quoted passwords containing
;(e.g.Password="p;w=1") are now fully masked in logs and telemetry, for every connection type. -C adbc_mssqlwith a named instance:host\INSTANCEconnected to the instance on port 1433 instead of resolving the named instance through the SQL Server Browser.- Oracle TNS alias with
-U/-X:-C oraodp -S ALIAS -U u -X pfailed withORA-50008: 'USERNAME' is an invalid connection string attribute(same foradbc_oracle). -C nzoledbreceived a SQL Server connection instead of an OLE DB one.-C nzcopy -m Timepartitiongenerated SQL Server syntax (YEAR()/WEEK()) instead ofEXTRACT(...).NZDataSlicewith--timestamped: all chunks of one export now share the same timestamp prefix (long exports were split across several prefixes).NZDataSlicelog message fix.
Documentation
- AWS S3: IAM roles / policies needed by FastBCP and SSE-KMS support.
- FASTBCP_DBPARTITION_TARGET_MODE: new environment variable.
- Connection Parameters:
adbc_netezzaconnection type.