Using the ODBC Driver
This article explains how to use the ODBC driver with Exasol.
Establishing connection in an ODBC application
To establish a connection to Exasol through an ODBC driver, use either of the following ODBC functions:
SQLConnect()
SQLDriverConnect()
SQLConnect()
In this method, you can choose a DSN entry and define user and password.
Example:
SQLConnect(connection_handle,
(SQLCHAR*)"exa_test", SQL_NTS,
(SQLCHAR*)"sys", SQL_NTS,
(SQLCHAR*)"exasol", SQL_NTS);
SQLDriverConnect()
In this method, you have the following two options:
- Choose a DSN entry of the
odbc.ini
file. - Choose a driver from the
odbcinst.ini
file.
In both cases a connection string is used to define further options. For more information, see Connection strings.
Example:
SQLDriverConnect(connection_handle, NULL,
(SQLCHAR*)"DSN=exa_test;UID=sys;PWD=exasol", SQL_NTS,
NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
SQLDriverConnect(connection_handle, NULL,
(SQLCHAR*)
"DRIVER={EXASolution Driver};EXAHOST=192.168.6.11..14:8563;UID=sys;PWD=exasol"
SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
Connection strings
A connection function has multiple key-value pairs. The driver manager then loads the correct driver and hands over the necessary parameters.
The data of the connection string has higher priority than the values of the odbc.ini
file on Linux systems and the configuration of the data source on Windows systems.
Examples of valid DSN and DSN-less connection strings
DSN=exa_test;UID=sys;PWD=exasol;EXASCHEMA=MY_SCHEMA
DRIVER={Exasol Driver};EXAHOST=192.168.6.11..14/72975B4D331DEEB44FA41FB858A5417E163151BBFB45376574706800A8DCCE30:8563;UID=sys;PWD=exasol
Supported keys in connection strings
The following table describes all keys that are supported in this version of Exasol. Keys that are not listed in the table are not supported.
The connection string key names are not case sensitive.
TLS encryption is required by default for all connections. The legacy ChaCha encryption method is deprecated and is not recommended. Connections from drivers that disable encryption through the encryption
property or switch to ChaCha encryption through the legacyencryption
property are not accepted in Exasol 8.19.0 or later.
If TLS encryption cannot be used and you trust the server, you can include the server fingerprint in the connection string to bypass TLS validation. For more information, see FINGERPRINT.
Key | Value type | Description |
---|---|---|
ALWAYSSEARCHPATTERNSINCAT
|
boolean [Y | N] |
Enables the use of ODBC search patterns in the catalog function.
Default: disabled |
ANSIARGENCODING
|
string |
Sets the encoding of the arguments of ANSI functions to the given value. For example: See also ENCODING. |
ANSIDATAENCODING
|
string |
Sets the encoding of ANSI string data See also ENCODING. |
AUTHMETHOD
|
string |
Specifies the authentication method for OpenID.
For more information, see Authentication using OpenID. |
AUTOCOMMIT
|
boolean [Y | N] |
Enables/disables autocommit mode.
Default: enabled |
COGNOSSUPPORT
|
boolean [Y | N] |
We recommend that you enable this parameter if you want to use the Exasol ODBC driver in combination with Cognos.
Default: disabled |
CONNECTIONLCCTYPE
|
string |
Sets
|
CONNECTIONLCNUMERIC
|
string |
Sets
|
DEFAULTPARAMSIZE
|
integer >0 |
Default size for Default: 2000 |
DRIVERUNICODETYPE
|
[1 | 2] |
If the client uses the DataDirect driver manager, this parameter specifies the type of Unicode to be used in W-functions.
|
ENCODING
|
string |
Sets |
EXAHOST
|
string |
When opening a connection, the driver will randomly choose an address from the specified address range. If the connection fails, the driver will continue to try all other possible addresses. Instead of an IP range you can define a comma-separated list of host:port pairs. If host names are specified in the list they can have DNS entries with multiple IP addresses. For example:
You can also specify the path to a file that contains a host list, for example, |
EXALOGFILE
|
string |
Log file for the driver. Default: empty (logging disabled) Depending on the log mode, the size of the log file can become very large. Because of this, we do not recommend enabling logging in a production environment. Be aware that log files can contain sensitive data (SQL commands and data). |
EXAPWD or PWD |
string |
Password of the user. PWD is automatically removed from the connection string by some applications. |
EXASCHEMA
|
string |
Schema that is opened directly after the connection. |
EXAUID or UID |
string |
Username for the login. UID is automatically removed from the connection string by some applications. |
FEEDBACKINTERVAL
|
integer ≥0 |
The interval in seconds between the feedback messages that the server sends to the client during a query. This feedback does the following:
Default: 1 (second) Setting a very high feedback interval value may cause a long lag time before a command is canceled. |
FINGERPRINT
|
string |
If TLS validation fails and you trust the server, use this parameter to include the server fingerprint in the connection string. For example:
To bypass TLS certificate checking, use the
A connection string must only contain a single fingerprint, specified either after the host or port or in a |
HOSTTIMEOUT
|
integer ≥0 |
Specifies the connection timeout in milliseconds for each TCP connection attempt. If multiple hosts are specified in the connection string, each host will wait for the specified time for a successful connection. Default: 2000 (ms) |
IGNOREPARAMS
|
string |
Optional comma-separated list of string parameters to be ignored by the driver’s spell checker. Example: |
IGNOREUNKNOWNATTR
|
boolean [Y | N] |
When enabled, the driver will not return the
Default: disabled |
INTTYPESINRESULTSIFPOSSIBLE
|
boolean [Y | N] |
When enabled,
Default: disabled |
KERBEROSHOSTNAME
|
string |
Host name of the Kerberos service. Default: the value of the |
KERBEROSSERVICENAME
|
string |
Principal name of the Kerberos service. Default: |
LEGACYCATALOG
|
boolean [Y | N] |
When enabled, the ODBC catalog functions will use SQL statements to generate their results.
Default: disabled |
LOGINTIMEOUT
|
integer ≥0 |
The maximum time in milliseconds that the driver will wait to establish a connection. This timeout is required to limit the overall login time, especially in the case of a large cluster with several reserve nodes. Default: no timeout (driver will wait indefinitely for the connection to be established) |
LOGMODE
|
string |
Specifies the mode for the log file. The following options are available:
|
MAXHANDLES
|
integer ≥0 |
Changes the maximum number of handles (environment, connection, statement, and descriptor handles) that can be held by an instance of the driver. The maximum value is 20000. Default: 2000 |
MAXPARAMSIZE
|
integer ≥0 |
Sets a maximum size for
Default: no maximum size |
PREPAREAS
|
boolean [Y | N] |
When enabled,
Default: disabled |
QUERYTIMEOUT
|
integer ≥0 |
Defines a query timeout in seconds for a connection.
Default: no timeout |
SHOWONLYCURRENTSCHEMA
|
boolean [Y | N] |
Defines whether the ODBC driver considers all the schemas or just the current schema for metadata like the list of columns or tables.
Default: disabled |
SILENT
|
boolean [Y | N] |
When enabled, the Exasol ODBC configuration dialog is not shown when an Exasol ODBC DSN is configured using
Default: disabled |
SNAPSHOTTRANSACTIONS
|
boolean [Y | N] |
Changes the snapshottransaction setting in the session.
Default: session default |
SQLSTATEMAPPINGACTIVE
|
boolean [Y | N] |
Enables mapping for ODBC SQL states received for errors.
Default: disabled Default mapping string when enabled:
|
SQLSTATEMAPPINGS
|
string |
Specifies a mapping state for SQL states if If the value is set, the new values are used first, then the default values. |
SSLCERTIFICATE
|
string |
Specifies how the driver will treat the server certificate for the connection. You can also specify a self signed certificate. Possible values:
If the certificate is not verified or a client does not have the certificate, the connection fails. To overcome this problem, you can use a fingerprint in the connection string to bypass certificate verification. For example:
The fingerprint is automatically added to the database connection string when you upload a TLS certificate. For more information, see Upload TLS Certificate. |
STRINGSNOTNULL
|
boolean [Y | N] |
Defines whether the ODBC driver returns empty strings for NULL strings when reading table data.
Default: disabled Note: The database internally does not distinguish between NULL and empty strings. It will return NULL values to the driver in both cases. |
SUPERCONNECTION
|
boolean [Y | N] |
When enabled, the user can execute queries even if the limit for active sessions (executing a query) has been reached.
Only the
Default: database default |
UNICODEARGENCODING
|
string |
Sets the encoding of the arguments of See also ENCODING. |
UNICODEDATAENCODING
|
string |
Sets the encoding of Unicode string data ( See also ENCODING. |
Supported standards
The Exasol ODBC driver supports the ODBC 3.5 standard (core level).
The following features are not supported:
-
Positioned update/delete
andbatched updates/deletes
(SQLSetPos
) - Asynchronous execution
- Bookmarks
If the rowcount
of a query exceeds 2147483647 (231-1), the ODBC driver will return the value 2147483647 for the function SQLRowCount()
. This is because of the 32-bit limitation for this return value defined by the ODBC standard.
Support for character sets
Internally, the ODBC driver uses the UTF-8 unicode character set. Other character set input data is converted to UTF-8 and transferred to Exasol. Data from Exasol is converted by the ODBC driver into the character set which is specified on the client site.
On Windows servers, the data sent to the ODBC driver should be in an encoding that is locally installed. You can specify the encoding through the language settings of the connection.
On Linux servers, you can set the encoding through environment variables. For example, to set the language to German and the encoding to UTF-8 in the console, you can use the command export LC_CTYPE=de_DE.utf
8
. For graphical applications, a wrapper script is recommended.
The encoding to be used must be installed on your system. You can identify the installed encoding on Linux systems using the command locale -a
.
Best practices
Objective | Details |
---|---|
Reading big data volumes |
Do not use To get the best performance, try to fetch about 50 to 100 MiB of data by choosing the number of rows per |
Inserting data into the database |
Instead of using single insert statements like Insert the data using the native data types. For example, for the number |
Autocommit mode |
To disable the autocommit mode on Windows systems, use |