ArpeNetezza
v0.3.6Linux · Windows (x64)IBM Cloud NPS
A native ADBC driver for IBM Netezza Performance Server (NPS), written in C,
returning Apache Arrow RecordBatches end to end. It speaks the Netezza wire
protocol directly over TCP/TLS (the HSV2 handshake, then Netezza's DBOS binary
result stream), so you don't need ODBC, nzpy or libpq. The released binaries are self-contained:
OpenSSL is linked in, and nothing beyond the operating system's C library is
needed at runtime. It is validated on NPS 11 (IBM Cloud) and NPS 7.2.
Reading these docs. The badge above is the version this documentation describes. Options and features added recently are flagged inline with a Since vX.Y.Z note; the What's new page is the release-by-release view. See Versioning.
Highlights
- Native Netezza protocol over TCP/TLS, with no ODBC, no nzpy and no libpq. The handshake protocol version (2–6) is negotiated with the server, so one binary serves NPS 7 through NPS 11.
- Binary result decoding. Netezza's DBOS tuple stream is decoded straight
into Arrow column buffers.
NUMERICbecomesdecimal128(p,s)with no string detour. - Bulk ingest through the external-table load.
adbc_ingeststreams rows into aREMOTESOURCEexternal table, which the server parses in parallel on its data slices. It falls back to batchedINSERTwhen needed. - TLS from
prefertoverify-full, with a configurable minimum TLS version for NPS 7 servers that stop at TLS 1.1. - Load name
arpenz. Options live underadbc.arpenz.*.
Connect in seconds
Load the driver by name (arpenz) from any ADBC client:
- Python
- C / C++
- C#
- Go
- Java
- R
- Rust
import adbc_driver_manager.dbapi as dbapi
with dbapi.connect(driver="arpenz",
db_kwargs={"uri": "netezza://admin:<pw>@nzhost:5480/SYSTEM?sslmode=verify-full"}) as conn:
cur = conn.cursor()
cur.execute("SELECT * FROM lineitem LIMIT 10")
table = cur.fetch_arrow_table()
#include <arrow-adbc/adbc.h>
// (error checks elided for brevity)
AdbcError e = {}; AdbcDatabase db = {}; AdbcConnection conn = {}; AdbcStatement st = {};
AdbcDatabaseNew(&db, &e);
AdbcDatabaseSetOption(&db, "driver", "arpenz", &e);
AdbcDatabaseSetOption(&db, "uri", "netezza://admin:<pw>@nzhost:5480/SYSTEM?sslmode=verify-full", &e);
AdbcDatabaseInit(&db, &e);
AdbcConnectionNew(&conn, &e); AdbcConnectionInit(&conn, &db, &e);
AdbcStatementNew(&conn, &st, &e);
AdbcStatementSetSqlQuery(&st, "SELECT * FROM lineitem LIMIT 10", &e);
ArrowArrayStream stream = {}; int64_t n = -1;
AdbcStatementExecuteQuery(&st, &stream, &n, &e); // consume `stream`
using Apache.Arrow.Adbc;
using Apache.Arrow.Adbc.DriverManager;
using var driver = AdbcDriverManager.FindLoadDriver("arpenz", loadOptions: AdbcLoadFlags.Default);
using var database = driver.Open(new Dictionary<string, string> {
["uri"] = "netezza://admin:<pw>@nzhost:5480/SYSTEM?sslmode=verify-full" });
using var connection = database.Connect(null);
using var statement = connection.CreateStatement();
statement.SqlQuery = "SELECT * FROM lineitem LIMIT 10";
using var stream = statement.ExecuteQuery().Stream!; // IArrowArrayStream
var drv drivermgr.Driver
db, _ := drv.NewDatabase(map[string]string{
"driver": "arpenz",
adbc.OptionKeyURI: "netezza://admin:<pw>@nzhost:5480/SYSTEM?sslmode=verify-full",
})
conn, _ := db.Open(ctx)
stmt, _ := conn.NewStatement()
_ = stmt.SetSqlQuery("SELECT * FROM lineitem LIMIT 10")
reader, _, _ := stmt.ExecuteQuery(ctx) // array.RecordReader
defer reader.Release()
Map<String, Object> params = new HashMap<>();
JniDriver.PARAM_DRIVER.set(params, "arpenz");
AdbcDriver.PARAM_URI.set(params, "netezza://admin:<pw>@nzhost:5480/SYSTEM?sslmode=verify-full");
try (BufferAllocator a = new RootAllocator();
AdbcDatabase db = new JniDriver(a).open(params);
AdbcConnection conn = db.connect();
AdbcStatement st = conn.createStatement()) {
st.setSqlQuery("SELECT * FROM lineitem LIMIT 10");
try (AdbcStatement.QueryResult r = st.executeQuery()) {
ArrowReader reader = r.getReader();
}
}
library(adbcdrivermanager)
db <- adbc_database_init(adbc_driver("arpenz"),
uri = "netezza://admin:<pw>@nzhost:5480/SYSTEM?sslmode=verify-full")
con <- adbc_connection_init(db)
table <- read_adbc(con, "SELECT * FROM lineitem LIMIT 10") |> arrow::as_arrow_table()
use adbc_core::{Connection, Database, Driver, Statement, LOAD_FLAG_DEFAULT};
use adbc_core::options::{AdbcVersion, OptionDatabase, OptionValue};
use adbc_driver_manager::ManagedDriver;
let mut driver = ManagedDriver::load_from_name("arpenz", None, AdbcVersion::default(), LOAD_FLAG_DEFAULT, None)?;
let mut db = driver.new_database_with_opts([(OptionDatabase::Uri,
OptionValue::String("netezza://admin:<pw>@nzhost:5480/SYSTEM?sslmode=verify-full".into()))])?;
let mut conn = db.new_connection()?;
let mut stmt = conn.new_statement()?;
stmt.set_sql_query("SELECT * FROM lineitem LIMIT 10")?;
let reader = stmt.execute()?; // impl RecordBatchReader
New here? Install ArpeNetezza first, then see the Connection guide.