Data Connectors

Databricks Data Connector

Query Databricks tables through Spark Connect, a SQL Warehouse, or Delta Lake files in S3, Azure Blob Storage, or GCS.

Databricks as a connector for federated SQL query against Databricks using Spark Connect, directly from Delta Lake tables, or using the SQL Statement Execution API.

datasets:
  - from: databricks:spiceai.datasets.my_awesome_table # A reference to a table in the Databricks unity catalog
    name: my_delta_lake_table
    params:
      mode: delta_lake
      databricks_endpoint: dbc-a1b2345c-d6e7.cloud.databricks.com
      databricks_token: ${secrets:my_token}
      databricks_aws_access_key_id: ${secrets:aws_access_key_id}
      databricks_aws_secret_access_key: ${secrets:aws_secret_access_key}

Configuration

from

The from field for the Databricks connector takes the form databricks:catalog.schema.table where catalog.schema.table is the fully-qualified path to the table to read from.

name

The dataset name. This will be used as the table name within Spice.

Example:

datasets:
  - from: databricks:spiceai.datasets.my_awesome_table
    name: cool_dataset
    params: ...
SELECT COUNT(*) FROM cool_dataset;
+----------+
| count(*) |
+----------+
| 6001215  |
+----------+

The dataset name cannot be a reserved keyword.

params

Use the secret replacement syntax to reference a secret, e.g. ${secrets:my_token}.

Parameter NameDescription
modeThe execution mode for querying against Databricks. The default is spark_connect. Possible values:
  • spark_connect: Use Spark Connect to query against Databricks. Requires a Spark cluster to be available.
  • delta_lake: Query directly from Delta Tables. Requires the object store credentials to be provided.
  • sql_warehouse: Use the SQL Statement Execution API to query against a Databricks SQL Warehouse.
databricks_endpointThe endpoint of the Databricks instance. Required for all modes.
databricks_sql_warehouse_idThe ID of the SQL Warehouse in Databricks to use for the query. Only valid when mode is sql_warehouse.
databricks_cluster_idThe ID of the compute cluster in Databricks to use for the query. Only valid when mode is spark_connect.
databricks_credential_vendingWhen set to enabled (requires mode to be delta_lake), short-lived storage credentials for each table are fetched from the Unity Catalog credential vending API instead of using static object store credentials. Possible values: enabled, disabled. Defaults to disabled.
databricks_use_sslIf true, use a TLS connection to connect to the Databricks Spark Connect endpoint. Only valid when mode is spark_connect. Default is true.
client_timeoutOptional. Specifies timeout for HTTP operations. In delta_lake mode, applies to object store operations. In sql_warehouse mode, applies per-HTTP-call (statement submit, status poll, chunk fetch): not total query duration. Default: 30s. E.g. client_timeout: 2m
connect_timeoutOptional. Timeout for establishing TCP/TLS connections. Applies in sql_warehouse mode. Default: 10s. E.g. connect_timeout: 15s
databricks_tokenThe Databricks API token to authenticate with the Unity Catalog API. Can't be used with databricks_client_id and databricks_client_secret.
databricks_client_idThe Databricks OAuth client ID. Used with databricks_client_secret for service-principal (M2M) auth, or alone for interactive User-to-Machine (U2M) auth. Can't be used with databricks_token.
databricks_client_secretThe Databricks Service Principal Client Secret. Required for M2M auth; omit for U2M auth. Can't be used with databricks_token.
databricks_auth_modeOptional. Pins the authentication flow instead of inferring it from the credentials that are set. One of auto, token, m2m, u2m (case-insensitive). Defaults to auto. See Pinning the authentication mode.

SQL Warehouse tuning

The following parameters apply only when mode is sql_warehouse and control connection resilience and concurrency:

Parameter NameDescription
connect_timeoutOptional. Timeout for establishing TCP/TLS connections to the Databricks API. Default: 10s. E.g. connect_timeout: 15s
client_timeoutOptional. Per-HTTP-call timeout (statement submit, status poll, chunk fetch): not total query duration. Overall query time is bounded by statement_max_retries × backoff. Default: 30s. E.g. client_timeout: 2m
max_concurrent_requestsOptional. Maximum number of concurrent HTTP requests to the SQL Warehouse API. Default: 8.
http_max_retriesOptional. Maximum number of HTTP-level retries for transient failures (429, 5xx). Default: 3.
backoff_methodOptional. Backoff strategy for transient HTTP retries. Options: fibonacci, exponential. Default: fibonacci.
statement_max_retriesOptional. Maximum number of poll retries when waiting for async statement completion. Default: 14.
disable_on_permanent_errorOptional. When true, non-retryable errors (401, 403, 404) permanently disable the connector. Default: true.

Rate control

The Databricks connector supports per-dataset rate control parameters when mode is spark_connect or sql_warehouse. These override runtime.params HTTP rate control defaults. In Spice.ai Enterprise, instances that share a runtime.state location coordinate the per-second and per-minute limits; see Limits across instances. The Databricks connector does not report request outcomes, so adaptive rate control always applies its configured limits unchanged.

Parameter NameDescription
requests_per_second_limitOptional. Maximum HTTP requests per second to the Databricks endpoint. Overrides runtime.params.http_requests_per_second_limit.
requests_per_minute_limitOptional. Maximum HTTP requests per minute to the Databricks endpoint. Overrides runtime.params.http_requests_per_minute_limit.
rate_control_jitter_minOptional. Minimum random delay before HTTP requests when rate control is active. Defaults to 5ms when a rate limit is configured. Accepts durations like 5ms.
rate_control_jitter_maxOptional. Maximum random delay before HTTP requests when rate control is active. Defaults to 10ms when a rate limit is configured. Accepts durations like 10ms.
rate_control_acquire_timeoutOptional. Maximum time a Databricks HTTP request waits for rate-control capacity before it fails. Overrides runtime.params.http_rate_control_acquire_timeout. Defaults to client_timeout. 0 waits without a bound. Accepts durations like 30s.

Authentication

Personal access token

To learn more about how to set up personal access tokens, see Databricks PAT docs.

datasets:
  - from: databricks:spiceai.datasets.my_awesome_table
    name: my_awesome_table
    params:
      databricks_endpoint: dbc-a1b2345c-d6e7.cloud.databricks.com
      databricks_cluster_id: 1234-567890-abcde123
      databricks_token: ${secrets:DATABRICKS_TOKEN} # PAT

Databricks service principal

Spice supports the Machine-to-Machine (M2M) OAuth flow with service principal credentials by utilizing the databricks_client_id and databricks_client_secret parameters. The runtime will automatically refresh the token.

Ensure that you grant your service principal the "Data Reader" privilege preset for the catalog and "Can Attach" cluster permissions when using Spark Connect mode.

To Learn more about how to set up the service principal, see Databricks M2M OAuth docs.

datasets:
  - from: databricks:spiceai.datasets.my_awesome_table
    name: my_awesome_table
    params:
      databricks_endpoint: dbc-a1b2345c-d6e7.cloud.databricks.com
      databricks_cluster_id: 1234-567890-abcde123
      databricks_client_id: ${secrets:DATABRICKS_CLIENT_ID} # service principal client id
      databricks_client_secret: ${secrets:DATABRICKS_CLIENT_SECRET} # service principal client secret

User-to-Machine (U2M) OAuth

Spice supports the User-to-Machine (U2M) OAuth flow for interactive sign-in against Databricks. To use U2M auth, supply only databricks_client_id (without databricks_token or databricks_client_secret), or set databricks_auth_mode: u2m to pin the flow: see Pinning the authentication mode.

When U2M auth is configured, the connector defers initialization until first use. On the first query the runtime opens a browser to complete the Databricks OAuth sign-in, then caches and refreshes the resulting token for subsequent requests.

To learn more about how to set up U2M OAuth, see the Databricks U2M OAuth docs.

datasets:
  - from: databricks:spiceai.datasets.my_awesome_table
    name: my_awesome_table
    params:
      mode: sql_warehouse
      databricks_endpoint: dbc-a1b2345c-d6e7.cloud.databricks.com
      databricks_sql_warehouse_id: 2b4e24cff378fb24
      databricks_client_id: ${secrets:DATABRICKS_CLIENT_ID} # OAuth app client id

Pinning the authentication mode

By default (databricks_auth_mode: auto) the connector infers the flow from whichever credentials resolve: a databricks_token alone selects personal access token, databricks_client_id alone selects U2M, and databricks_client_id together with databricks_client_secret selects M2M.

Credentials do not only come from the Spicepod. databricks_token, databricks_client_secret, and the other secret parameters are auto-loaded from the secret stores and the environment (e.g. DATABRICKS_CLIENT_SECRET, SPICE_DATABRICKS_CLIENT_SECRET) when the Spicepod omits them: so an ambient client secret on the host is enough to switch a U2M dataset to machine-to-machine, which then fails with a service principal 401.

Set databricks_auth_mode to pin the flow. A pinned mode ignores the credentials the flow does not use:

ValueFlowRequires
auto (default)Inferred from the credentials set-
tokenPersonal access tokendatabricks_token
m2mService principal (M2M) OAuthdatabricks_client_id, databricks_client_secret
u2mUser-to-machine OAuthdatabricks_client_id

Values are matched case-insensitively, so M2M and U2M are also accepted. A required parameter that is missing for the pinned mode fails at load with an error naming it; an unrecognized value is rejected.

datasets:
  - from: databricks:spiceai.datasets.my_awesome_table
    name: my_awesome_table
    params:
      mode: sql_warehouse
      databricks_endpoint: dbc-a1b2345c-d6e7.cloud.databricks.com
      databricks_sql_warehouse_id: 2b4e24cff378fb24
      databricks_auth_mode: u2m # ignore any ambient client secret or token
      databricks_client_id: ${secrets:DATABRICKS_CLIENT_ID} # OAuth app client id

Delta Lake object store parameters

Configure the connection to the object store when using mode: delta_lake. Use the secret replacement syntax to reference a secret, e.g. ${secrets:aws_access_key_id}.

AWS S3

Parameter NameDescription
databricks_aws_regionOptional. The AWS region for the S3 object store. E.g. us-west-2.
databricks_aws_access_key_idThe access key ID for the S3 object store.
databricks_aws_secret_access_keyThe secret access key for the S3 object store.
databricks_aws_session_tokenOptional. The AWS session token for the S3 object store. Required with temporary (STS) credentials.
databricks_aws_endpointOptional. The endpoint for the S3 object store. E.g. s3.us-west-2.amazonaws.com.
databricks_aws_allow_httpOptional. Enables insecure HTTP connections to databricks_aws_endpoint. Defaults to false.

Azure Blob