Impala's ODBC driver only seems to work when the libclouderaimpalaodbc64.so driver binary is placed in the default installation directory /opt/cloudera/impalaodbc/lib/64. I tried to change the location of the driver by
- Copying the *.so file to a different folder
- Symbolically linking the *.so file from a different folder
In both cases, the copied/linked driver works for simple cases - provided export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libodbcinst.so is executed before using the driver. However, it seems to ignore the content of the CLOUDERAIMPALAINI environment variable. This influences a number of things:
- Activating driver-side logging is not possible
- Switching to UTF-16 mode for unixODBC support is not possible
- Specifying the ErrorMessagesPath option is not possible, rendering all error messages issued by the driver into The error message XXX could not be found in the en-US locale
I tried to make sure that I did not mess up on a trivial level (misspelling things etc.). Hence, I played around with the CLOUDERAIMPALAINI environment variable and the driver installed at its original location.
It turns out all settings in the file specified by CLOUDERAIMPALAINI are fully respected. This means I can relocate the error message files (copying them somewhere else, even changing messages), fix unixODBC unicode compatibility, and enable logging for debugging.
The only change from this well-documented situation to the one above is that I use the driver via a copied binary or a symbolic link.
In our company we mainly rely on Python wheels to let users install binary software in Python virtual environments without requiring root access. In the context of ODBC drivers, this procedure worked well so far, allowing us to package ODBC drivers for MySQL, PostgreSQL, Oracle, Teradata, MonetDB, etc. Impala's ODBC driver is the first to show this most confusing and annoying behavior.
I toyed around with the Impala ODBC driver (v 2.5.30) for Debian (64bit) on my Ubuntu 12.04 machine. Asking a system administrator I installed the provided .deb package into my system.