Lakehouse Federation for Microsoft Azure Synapse

Preview

This feature is in Public Preview.

This article describes how to set up Lakehouse Federation to run federated queries on Azure Synapse (SQL Data Warehouse) data that is not managed by Databricks. To learn more about Lakehouse Federation, see Run queries using Lakehouse Federation.

To connect to a Azure Synapse (SQL Data Warehouse) database using Lakehouse Federation, you must create the following in your Databricks Unity Catalog metastore:

  • A connection to your Azure Synapse (SQL Data Warehouse) database.

  • A foreign catalog that mirrors your Azure Synapse (SQL Data Warehouse) database in Unity Catalog so that you can use Unity Catalog query syntax and data governance tools to manage Databricks user access to the database.

Before you begin

Workspace requirements:

  • Workspace enabled for Unity Catalog.

Compute requirements:

  • Network connectivity from your Databricks Runtime cluster or SQL warehouse to the target database systems. See Networking recommendations for Lakehouse Federation.

  • Databricks clusters must use Databricks Runtime 13.1 or above and shared or single-user access mode.

  • SQL warehouses must be Pro or Serverless.

Permissions required:

  • To create a connection, you must be a metastore admin or a user with the CREATE CONNECTION privilege on the Unity Catalog metastore attached to the workspace.

  • To create a foreign catalog, you must have the CREATE CATALOG permission on the metastore and be either the owner of the connection or have the CREATE FOREIGN CATALOG privilege on the connection.

Additional permission requirements are specified in each task-based section that follows.

Create a connection

A connection specifies a path and credentials for accessing an external database system. To create a connection, you can use Catalog Explorer or the CREATE CONNECTION SQL command in a Databricks notebook or the Databricks SQL query editor.

Permissions required: Metastore admin or user with the CREATE CONNECTION privilege.

  1. In your Databricks workspace, click Catalog icon Catalog.

  2. In the left pane, expand the External Data menu and select Connections.

  3. Click Create connection.

  4. Enter a user-friendly Connection name.

  5. Select a Connection type of SQLDW.

  6. Enter the following connection properties for your Azure Synapse instance.

    • Host: For example, sqldws-demo.database.windows.net.

    • Port: For example, 1433

    • trustServerCertificate: Defaults to false. When set to true, the transport layer uses SSL to encrypt the channel and bypasses the certificate chain to validate trust. Leave this set to the default unless you have a specific need to bypass trust validation.

    • User

    • Password

  7. (Optional) Click Test connection to confirm that it works.

  8. (Optional) Add a comment.

  9. Click Create.

Run the following command in a notebook or the Databricks SQL query editor.

CREATE CONNECTION <connection-name> TYPE sqldw
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>'
);

We recommend that you use Databricks secrets instead of plaintext strings for sensitive values like credentials. For example:

CREATE CONNECTION <connection-name> TYPE sqldw
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

For information about setting up secrets, see Secret management.

Create a foreign catalog

A foreign catalog mirrors a database in an external data system so that you can query and manage access to data in that database using Databricks and Unity Catalog. To create a foreign catalog, you use a connection to the data source that has already been defined.

To create a foreign catalog, you can use Catalog Explorer or the CREATE FOREIGN CATALOG SQL command in a Databricks notebook or the Databricks SQL query editor.

Permissions required: CREATE CATALOG permission on the metastore and either ownership of the connection or the CREATE FOREIGN CATALOG privilege on the connection.

  1. In your Databricks workspace, click Catalog icon Catalog.

  2. Click the Create Catalog button.

  3. On the Create a new catalog dialog, enter a name for the catalog and select a Type of Foreign.

  4. Select the Connection that provides access to the database that you want to mirror as a Unity Catalog catalog.

  5. Enter the name of the Database that you want to mirror as a catalog.

  6. Click Create.

Run the following SQL command in a notebook or Databricks SQL editor. Items in brackets are optional. Replace the placeholder values:

  • <catalog-name>: Name for the catalog in Databricks.

  • <connection-name>: The connection object that specifies the data source, path, and access credentials.

  • <database-name>: Name of the database you want to mirror as a catalog in Databricks.

CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

Supported pushdowns

The following pushdowns are supported:

  • Filters

  • Projections

  • Limit

  • Aggregates (Average, Count, Max, Min, StddevPop, StddevSamp, Sum, VarianceSamp)

  • Functions (Arithmetic and other miscellaneous functions, such as Alias, Cast, SortOrder)

  • Sorting

The following pushdowns are not supported:

  • Joins

  • Windows functions

Data type mappings

When you read from Synapse / SQL Data Warehouse to Spark, data types map as follows:

Synapse type

Spark type

decimal, money, numeric, smallmoney

DecimalType

smallint

ShortType

tinyint

ByteType

int

IntegerType

bigint

LongType

real

FloatType

float

DoubleType

char, nchar, ntext, nvarchar, text, uniqueidentifier, varchar, xml

StringType

binary, geography, geometry, image, timestamp, udt, varbinary

BinaryType

bit

BooleanType

date

DateType

datetime, datetime, smalldatetime, time

TimestampType/TimestampNTZType*

*When you read from Synapse / SQL Data Warehouse (SQLDW), SQLDW datetimes are mapped to Spark TimestampType if preferTimestampNTZ = false (default). SQLDW datetimes are mapped to TimestampNTZType if preferTimestampNTZ = true.