Skip to main content

SQL Server (MSSQL)

SQL Server datasources use the ODBC driver and Microsoft ODBC Driver 18 for SQL Server.

Connection Configuration

URI Format

mssql://user:password@host:1433/database

Required Fields

FieldTypeDescription
connection_typestringMust be "mssql"
connection_sub_typestringMust be "database"
uristringSQL Server connection string
serverstringDatabase host address
databasestringDatabase name
usernamestringDatabase user
passwordstringDatabase password

Optional Fields

FieldTypeDefaultDescription
encryptionstringTLS encryption mode (e.g., "yes", "no", "strict")

Environment Variables

VariableDescription
ODBC_MSSQL_DRIVEROverride the ODBC driver name (default: "ODBC Driver 18 for SQL Server")
GODEBUGSet to x509negativeserial=1 for servers using older certificates with negative serial numbers
The ODBC_MSSQL_DRIVER environment variable allows you to use a different version of the Microsoft ODBC driver (e.g., Driver 17) without modifying the connection configuration.

Example Connection

{
  "name": "mssql-market-data",
  "connection_type": "mssql",
  "connection_sub_type": "database",
  "uri": "mssql://libuser:s3cureP@ss@db.example.com:1433/marketdata",
  "server": "db.example.com",
  "database": "marketdata",
  "username": "libuser",
  "password": "s3cureP@ss",
  "encryption": "yes"
}

Dataset Configuration (data_args)

Required Fields

FieldTypeDescription
table_optionslistTables to query (see below)
databasestringConnection reference name
data_dt_columnstring or listColumn(s) containing the datetime value
data_dt_formatbool or string or listtrue for native datetime auto-detect, or strptime format
data_dt_timezonestringTimezone of the source data
data_key_columnstring or listColumn(s) used as the symbol/key for query filtering

Optional Fields

FieldTypeDefaultDescription
batch_sizeint10000Number of rows per query batch
data_dt_nudgeint0Microsecond offset applied to timestamps

table_options Entry

Each entry in table_options describes a table to query:
FieldTypeDescription
dbstringDatabase name
table_likestringTable name or pattern
tokenstringTable identifier token
zonestringTimezone, default "America/New_York"
dt_modestring(Optional) Datetime mode
dt_regexstring(Optional) Regex for partitioned tables
dt_formatstring(Optional) Datetime format for partitioned tables
nudge_microsint(Optional) Microsecond nudge

Complete Example

Connection

{
  "name": "mssql-trades",
  "connection_type": "mssql",
  "connection_sub_type": "database",
  "uri": "mssql://libuser:s3cureP@ss@sqlserver.example.com:1433/trades_db",
  "server": "sqlserver.example.com",
  "database": "trades_db",
  "username": "libuser",
  "password": "s3cureP@ss",
  "encryption": "yes"
}

Dataset

{
  "name": "us-equity-trades",
  "connection": "mssql-trades",
  "data_args": {
    "table_options": [
      {
        "db": "trades_db",
        "table_like": "daily_trades",
        "token": "daily_trades",
        "zone": "America/New_York"
      }
    ],
    "database": "mssql-trades",
    "batch_size": 10000,
    "data_dt_column": "trade_time",
    "data_dt_format": true,
    "data_dt_timezone": "America/New_York",
    "data_dt_nudge": 0,
    "data_key_column": "symbol"
  },
  "schema": [
    { "name": "symbol", "type": "string", "group": "key", "description": "Ticker symbol" },
    { "name": "trade_time", "type": "string", "group": "time", "description": "Trade timestamp" },
    { "name": "price", "type": "double", "group": "value", "description": "Trade price" },
    { "name": "volume", "type": "int64", "group": "value", "description": "Trade volume" },
    { "name": "exchange", "type": "string", "group": "value", "description": "Exchange code" }
  ]
}
Set data_dt_format to true when using native SQL Server datetime2 or datetimeoffset columns. CloudQuant Data Liberator will auto-detect the datetime type and convert directly without string parsing.

Encryption Configuration

SQL Server connections support several TLS encryption modes via the encryption field:
ValueDescription
"yes"Require encrypted connection (recommended)
"no"Do not encrypt the connection
"strict"Strict TLS 1.2+ encryption (SQL Server 2022+)
When using encryption: "yes" with self-signed certificates, you may need to add TrustServerCertificate=yes to the connection. For production, always use properly signed certificates.

Legacy Certificate Support

For SQL Server instances using older certificates with negative serial numbers:
export GODEBUG=x509negativeserial=1
This is common with older SQL Server installations that have not rotated their TLS certificates.

Driver and Dependencies

ComponentDetails
DriverODBC driver with ODBC Driver 18 for SQL Server
ProtocolODBC / TDS
Arrow conversionHigh-performance ODBC driver
ODBC requiredYes (Microsoft ODBC Driver 18)
Default port1433
The Microsoft ODBC Driver 18 must be installed on the CloudQuant Data Liberator host. To use a different driver version, set the ODBC_MSSQL_DRIVER environment variable.

Troubleshooting

ODBC driver not found

Verify the Microsoft ODBC Driver 18 is installed and registered:
# List installed ODBC drivers
odbcinst -q -d

# Expected output should include:
# [ODBC Driver 18 for SQL Server]
Install the driver if missing:
# Debian/Ubuntu
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql18

# RHEL/CentOS
curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo
ACCEPT_EULA=Y yum install -y msodbcsql18

Using a different driver version

Override the default driver with an environment variable:
export ODBC_MSSQL_DRIVER="ODBC Driver 17 for SQL Server"

Certificate errors (x509)

If you see x509: certificate signed by unknown authority or negative serial number errors:
export GODEBUG=x509negativeserial=1

Connection timeout

SQL Server may be configured to listen on a non-default port or require a named instance. Verify connectivity:
# Test port connectivity
nc -zv sqlserver.example.com 1433

# For named instances, use the SQL Browser port (1434/UDP) or specify the port directly

Windows Authentication

CloudQuant Data Liberator uses SQL Server authentication (username/password). Windows/Kerberos authentication is not supported through this connection type.

Slow queries

  • Increase batch_size for large result sets (up to 100000).
  • Ensure the datetime and key columns are indexed.
  • For partitioned tables, use dt_regex to scope queries to relevant partitions.
  • Consider using datetime2 over datetime for better precision and performance.