Julia sits in an interesting corner of the data world: the people who use it tend to be doing the hardest numerical work in the building – risk simulation, optimisation, scientific modelling – and the data they need usually lives in an enterprise warehouse they cannot easily reach. For IBM Netezza there was no Julia driver at all. ODBC.jl over IBM’s client stack was the workaround, with the usual price: native libraries to install, a registry to reach, and a build step that fails precisely on the locked-down machines where Julia’s numerical users actually work.
So we wrote the driver, and with it completed something larger: Julia is the eighth and final language in our native-driver programme for Netezza, joining Java, Rust, C#, Perl, Ruby, Elixir and R, alongside the Python and Go drivers we had already rebuilt. Every one of them speaks the appliance’s wire protocol directly, with no ODBC and no IBM client libraries, and every one was tested live against both a classic NPS 7.2 rack and a current NPS 11.2 system before we called it done.
Standard library only, with two workarounds worth reading
The Julia driver uses nothing outside the standard library. Sockets carries the protocol; the SHA module covers the newer appliances’ login hashing; Base64 wraps it up. Two gaps needed filling, and both say something about building for enterprise reality.
First, Julia’s standard library has SHA-256 but no MD5, which classic NPS 7 racks still use for the login handshake. Rather than pull a registry package – the registry being exactly what locked-down sites cannot reach – the driver carries its own MD5, about forty lines, self-tested against the RFC vectors. It hashes twenty bytes once per connection; nobody will notice the difference, but everybody notices when Pkg.add hangs on a firewalled workstation.
Second, TLS. Julia has no TLS in its standard library, so the driver calls the system OpenSSL directly through ccall – one of Julia’s quietly great features, foreign calls with no build step and no binding package. The fiddly part was marrying OpenSSL to Julia’s event-driven sockets: the driver extracts the raw file descriptor from the runtime, switches it back to blocking mode, and hands it to OpenSSL for the rest of the session. Old NPS 7 racks with their weak self-signed certificates are handled deliberately, the same way as in our Rust and Java drivers.
Exact numbers, because Julia users check
If any audience will notice a corrupted 38-digit numeric, it is this one. Netezza’s widest NUMERIC type spans four 32-bit words, and Julia’s native Int128 holds that range exactly, so the driver decodes it with no floating point anywhere near the value. The same care runs through the whole type system – every integer width, dates, times, timestamps, intervals, and both character families with the European encoding Netezza uses for CHAR and VARCHAR decoded correctly. Parameters bind injection-safely; the hostile-input test comes back inert on both appliance generations. And external tables, the appliance’s wire-speed bulk path, work in both directions – which for a Julia workflow usually means one thing: the whole result set on local disk, fast, ready for the real computation.
The programme, complete
Eight drivers in, the pattern held every time: implement the protocol once against the appliance’s actual behaviour, use one connect-time code path both hardware generations accept, test everything live, and write down what bit us so the next port is boring. The later drivers each passed their full live test matrix on the first run, which is what porting from a debugged reference buys you.
Registry publication for the Julia driver is coming soon, alongside the others on their respective package registries.
Eight languages, two appliance generations, one wire protocol, zero ODBC installs. The set is complete.
Where you get it
We did not build this for ourselves. Our software is written in Python, so nothing in our stack uses it; it exists because the gap did, and because other teams kept falling into it. If your quant team has been exporting CSVs out of Netezza because connecting Julia was too much friction, the friction is gone. Talk to us if you want it in your own estate.
Built from the published open source Netezza drivers (IBM/nzpy and IBM/nzalchemy under Apache-2.0, IBM/nzgo under MIT), verified live against both NPS 7.2 and NPS 11.2, and produced without decompiling, disassembling or inspecting any IBM proprietary binary.
Running Netezza? Let’s talk. Smart Associates has been engineering on IBM Netezza for two decades: disaster recovery, migrations, performance and the deep platform work in between. If any of the above sounds familiar, why not get in touch.
