<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article Simplifying external data ingestion with Lakeflow Connect in Technical Blog</title>
    <link>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/ba-p/98774</link>
    <description>&lt;P class="lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;As data engineering and analytics become increasingly complex, organizations often seek to integrate the scalability and flexibility of the cloud with the robustness of traditional relational databases. The &lt;/SPAN&gt;&lt;A href="https://www.databricks.com/product/data-lakehouse" target="_self"&gt;&lt;STRONG&gt;Databricks Lakehouse&lt;/STRONG&gt;&lt;/A&gt;&lt;SPAN&gt;, with its recent introduction of the &lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/en/ingestion/lakeflow-connect/index.html" target="_self"&gt;&lt;STRONG&gt;Lakeflow Connect&lt;/STRONG&gt;&lt;/A&gt;&lt;SPAN&gt;, seamlessly bridges these two worlds, allowing teams to harness the full power of &lt;/SPAN&gt;&lt;A href="https://azure.microsoft.com/en-gb/products/azure-sql/database" target="_self"&gt;&lt;STRONG&gt;Azure SQL&lt;/STRONG&gt;&lt;/A&gt;&lt;SPAN&gt; while leveraging &lt;/SPAN&gt;Databricks advanced capabilities for big data and AI workloads.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;In this post, we’ll explore the setup, features, and advantages of the Databricks Lakeflow&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/en/ingestion/lakeflow-connect/sql-server/index.html" target="_self"&gt;&lt;STRONG&gt;Microsoft SQL Server SQL Connector&lt;/STRONG&gt;&lt;/A&gt;&lt;SPAN&gt;, which enables seamless data ingestion from SQL server databases into Databricks.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;What is LakeFlow Connect?&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P class="lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Databricks LakeFlow Connect is a built-in set of ingestion connectors for enterprise applications and databases. The entire ingestion pipeline is governed by Unity Catalog and is powered by serverless compute and Delta Live Tables.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;LakeFlow Connect leverages efficient incremental reads to make data ingestion faster, scalable and more cost-efficient while maintaining data freshness for downstream consumption.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H2 class="lia-align-justify"&gt;&lt;SPAN&gt;Types Of Connectors&lt;/SPAN&gt;&lt;/H2&gt;
&lt;H2 class="lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Supported SaaS applications:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/H2&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Salesforce&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Workday&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size="4"&gt;Database connectors&lt;BR /&gt;&lt;BR /&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;A database connector is modeled by the following components&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Connection: A Unity Catalog object that stores auth details for the database.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Gateway: Extracts data from the source database using DLT pipeline with classic compute.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Staging storage: A Unity Catalog volume where data from the gateway is staged before being applied to a Delta table.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Ingestion pipeline: A DLT serverless pipeline to ingest the staged data into the Delta tables.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Lakeflow connect database connector architecture" style="width: 843px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/12884i85F4351DD0E057DA/image-dimensions/843x181?v=v2" width="843" height="181" role="button" title="Simplifying External Data Ingestion with Lakeflow Connect - GDC DBSQL SME.jpg" alt="Lakeflow connect database connector architecture" /&gt;&lt;span class="lia-inline-image-caption" onclick="event.preventDefault();"&gt;Lakeflow connect database connector architecture&lt;/span&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size="4"&gt;Supported sources for SQL Server connector&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Azure SQL Database&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Amazon RDS for SQL Server&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 class="lia-align-justify"&gt;&lt;SPAN&gt;Configure SQL Server for ingestion&lt;/SPAN&gt;&lt;/H2&gt;
&lt;OL class="lia-align-justify"&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;
&lt;P&gt;&lt;FONT size="4"&gt;&lt;STRONG&gt;Create a SQL Server user for ingestion&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="lia-indent-padding-left-30px lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;The recommended approach is to create a database user solely used for Databricks ingestion.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;The user must have the following privileges&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Read access to the following system tables and views:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sys.databases&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sys.schemas&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sys.tables&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sys.columns&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sys.key_constraints&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sys.foreign_keys&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sys.check_constraints&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sys.default_constraints&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sys.change_tracking_tables&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sys.change_tracking_databases&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sys.objects&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sys.triggers&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Execute permission on the system stored procedures:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sp_tables&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sp_columns&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sp_columns_100&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sp_pkeys&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;sp_statistics&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;SELECT&lt;/SPAN&gt; &lt;SPAN&gt;on the schemas and tables you want to ingest.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px lia-align-justify"&gt;&lt;FONT size="4"&gt;2.&lt;STRONG&gt; Enable change tracking or change data capture (CDC)&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Based on the SQL Server version and the presence of the primary key, enable CDC or change tracking.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;To use Microsoft CDC, you must have SQL Server 2017 or above, and to use Microsoft change tracking, you must have SQL Server 2012 or above.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Additional read permission should be provided when CDC is enabled.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;SELECT&lt;/SPAN&gt; &lt;SPAN&gt;privilege on the schema&lt;/SPAN&gt; &lt;SPAN&gt;CDC&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;3. &lt;STRONG&gt;Setup DDL capture and schema evolution&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;The connector can track the DDL on ingested database objects and apply relevant table schema changes to the destination tables or add new tables in case of full schema replication.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;To perform DDL capture, additional database objects need to be set, which are automatically set by providing the permissions to the SQL Server user:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;CREATE PROCEDURE&lt;/SPAN&gt; &lt;SPAN&gt;on the database&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;CREATE TABLE&lt;/SPAN&gt; &lt;SPAN&gt;on the database&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;SELECT&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;EXECUTE&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;and&lt;/SPAN&gt; &lt;SPAN&gt;INSERT&lt;/SPAN&gt; &lt;SPAN&gt;on the schema&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;ALTER&lt;/SPAN&gt; &lt;SPAN&gt;on the database&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;ALTER&lt;/SPAN&gt; &lt;SPAN&gt;on the schema or on all tables to ingest&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;SPAN&gt;Databricks Setup&lt;/SPAN&gt;&lt;/H2&gt;
&lt;H3&gt;&lt;SPAN&gt;Prerequisite&lt;/SPAN&gt;&lt;/H3&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Workspace is Unity Catalog enabled.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Serverless compute should be enabled for notebooks, workflows, and Delta Live Tables. See &lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/en/admin/workspace-settings/serverless.html" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Enable serverless compute&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;To create a connection:&lt;/SPAN&gt; &lt;SPAN&gt;CREATE CONNECTION&lt;/SPAN&gt; &lt;SPAN&gt;on the metastore.&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;To use an existing connection:&lt;/SPAN&gt; &lt;SPAN&gt;USE CONNECTION&lt;/SPAN&gt; &lt;SPAN&gt;or&lt;/SPAN&gt; &lt;SPAN&gt;ALL PRIVILEGES&lt;/SPAN&gt; &lt;SPAN&gt;on the connection.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;USE CATALOG&lt;/SPAN&gt; &lt;SPAN&gt;on the target catalog.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;USE SCHEMA&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;CREATE TABLE&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;and&lt;/SPAN&gt; &lt;SPAN&gt;CREATE VOLUME&lt;/SPAN&gt; &lt;SPAN&gt;on an existing schema or &lt;/SPAN&gt;&lt;SPAN&gt;CREATE SCHEMA&lt;/SPAN&gt; &lt;SPAN&gt;on the target catalog.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class="lia-align-justify" style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;CREATE VOLUME&lt;/SPAN&gt;&lt;SPAN&gt; o&lt;/SPAN&gt;&lt;SPAN&gt;n an existing schema.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;SPAN&gt;Configure Unity Catalog resources&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P class="lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;The following Unity Catalog objects have to be created&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Create a SQL Server connection.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Create a staging catalog and schemas.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 class="lia-align-justify"&gt;&lt;SPAN&gt;Data Ingestion&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P class="lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;To ingest data, a gateway and an ingestion pipeline need to be created using databricks-sdk or the UI. The gateway pipeline, as explained earlier, extracts data from the source database using a DLT pipeline with a classic compute into a UC volume location, and the ingestion pipeline is a DLT serverless pipeline that ingests staged data on UC volume into the delta table.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Refer to the sample code below, to configure and create gateway and ingestion pipelines.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;TABLE style="border-style: hidden; width: 100%;" border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%"&gt;&lt;LI-CODE lang="python"&gt;from databricks.sdk import WorkspaceClient
from databricks.sdk.service import catalog, jobs, pipelines

w = WorkspaceClient()

# ======================
# Setup
# ======================

# The following function simplifies the replication of multiple tables from the same schema
def replicate_tables_from_db_schema(db_catalog_name, db_schema_name, db_table_names):
 return [pipelines.IngestionConfig(
           table = pipelines.TableSpec(
           source_catalog=db_catalog_name,
           source_schema=db_schema_name,
           source_table=table_name,
           destination_catalog=target_catalog_name,
           destination_schema=target_schema_name,
         )) for table_name in db_table_names]

# The following function simplifies the replication of an entire DB schemas
def replicate_full_db_schema(db_catalog_name, db_schema_names):
 return [pipelines.IngestionConfig(
           schema = pipelines.SchemaSpec(
           source_catalog=db_catalog_name,
           source_schema=db_schema_name,
           destination_catalog=target_catalog_name,
           destination_schema=target_schema_name,
         )) for db_schema_name in db_schema_names]

gateway_cluster_spec = None

# The name of the UC connection with the credentials to access the source database
connection_name = "my_connection"

# The name of the UC catalog and schema to store the replicated tables
target_catalog_name = "main"
target_schema_name = "lakeflow_sqlserver_connector_cdc"

# The name of the UC catalog and schema to store the staging volume with intermediate
# CDC and snapshot data.
# Use the destination catalog/schema by default
stg_catalog_name = target_catalog_name
stg_schema_name = target_schema_name

# The name of the Gateway pipeline to create
gateway_pipeline_name = "cdc_gateway"

# The name of the Ingestion pipeline to create
ingestion_pipeline_name = "cdc_ingestion"

# Construct the complete list of tables to replicate
# IMPORTANT: The letter case of the catalog, schema and table names MUST MATCH EXACTLY the case used in the source database system tables
tables_to_replicate = replicate_full_db_schema("MY_DB", ["MY_DB_SCHEMA"])
# Append tables from additional schemas as needed
#  + replicate_tables_from_db_schema("REPLACE_WITH_DBNAME", "REPLACE_WITH_SCHEMA_NAME_2", ["table3", "table4"])

# Customize who gets notified about failures
notifications = [
 pipelines.Notifications(
     email_recipients = [ w.current_user.me().user_name ],
     alerts = [ "on-update-failure", "on-update-fatal-failure", "on-flow-failure"]
     )
 ]
# Create a gateway pipeline
# determine the connection id
connection_id = w.connections.get(connection_name).connection_id

gateway_def = pipelines.IngestionGatewayPipelineDefinition(
     connection_id=connection_id,
     gateway_storage_catalog=stg_catalog_name,
     gateway_storage_schema=stg_schema_name,
     gateway_storage_name = gateway_pipeline_name)

p = w.pipelines.create(
   name = gateway_pipeline_name,
   gateway_definition=gateway_def,
   notifications=notifications,
   clusters= [ gateway_cluster_spec.as_dict() ] if None != gateway_cluster_spec else None
   )
gateway_pipeline_id = p.pipeline_id

print(f"Gateway pipeline {gateway_pipeline_name} created: {gateway_pipeline_id}")

# Create an ingestion pipeline
ingestion_def = pipelines.ManagedIngestionPipelineDefinition(
   ingestion_gateway_id=gateway_pipeline_id,
   objects=tables_to_replicate,
   )
p = w.pipelines.create(
   name = ingestion_pipeline_name,
   ingestion_definition=ingestion_def,
   notifications=notifications,
   serverless=True,
   photon=True,
   continuous=False,
   )
ingestion_pipeline_id = p.pipeline_id

print(f"Ingestion pipeline {ingestion_pipeline_name} created: {ingestion_pipeline_id}")&lt;/LI-CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P class="lia-align-center"&gt;&lt;FONT size="2"&gt;&amp;nbsp;&lt;SPAN&gt;Code 1. Gateway and ingestion pipeline creation&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Gateway and Ingestion pipelines are created as shown below.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Gateway and ingestion pipelines" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/12886i71D80BAD107DE3A7/image-size/large?v=v2&amp;amp;px=999" role="button" title="image2.png" alt="Gateway and ingestion pipelines" /&gt;&lt;span class="lia-inline-image-caption" onclick="event.preventDefault();"&gt;Gateway and ingestion pipelines&lt;/span&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;A sample run of the ingestion pipeline.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Ingestion pipeline sample run" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/12887i243D323703BDE54C/image-size/large?v=v2&amp;amp;px=999" role="button" title="image1.png" alt="Ingestion pipeline sample run" /&gt;&lt;span class="lia-inline-image-caption" onclick="event.preventDefault();"&gt;Ingestion pipeline sample run&lt;/span&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Make additional changes to the source SQL server table.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Updates and deletes in the source table" style="width: 787px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/12888i427D8F9BB0C06870/image-dimensions/787x329?v=v2" width="787" height="329" role="button" title="image5.png" alt="Updates and deletes in the source table" /&gt;&lt;span class="lia-inline-image-caption" onclick="event.preventDefault();"&gt;Updates and deletes in the source table&lt;/span&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Trigger a run of the ingestion pipeline, after it completes the updated data can be viewed on the staging delta table.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="The staging table was updated with the latest data after running the Ingestion pipeline" style="width: 646px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/12889iAABEFC61B5141FC7/image-dimensions/646x453?v=v2" width="646" height="453" role="button" title="image3.png" alt="The staging table was updated with the latest data after running the Ingestion pipeline" /&gt;&lt;span class="lia-inline-image-caption" onclick="event.preventDefault();"&gt;The staging table was updated with the latest data after running the Ingestion pipeline&lt;/span&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Key advantages of using Lakeflow Connect&lt;/SPAN&gt;&lt;/H2&gt;
&lt;H2&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Managed Setup&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/H2&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;No additional resources need to be provisioned for the ingestion of data from the SQL server to Databricks.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size="4"&gt;Secure Connectivity&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;The Azure SQL connector utilizes transport layer security (TLS) to establish a secure connection between Databricks and your SQL database. This ensures that data transfer occurs over an encrypted channel, protecting sensitive information during transit.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size="4"&gt;Credential Management with Unity Catalog&amp;nbsp;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Credentials for connecting to Azure SQL are stored securely within the Unity Catalog. This centralized approach to credential management offers several benefits:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Enhanced security through access controls&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Simplified credential rotation and management&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Auditability of credential usage&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Only users with appropriate permissions can retrieve and use these credentials when running ingestion flows.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size="4"&gt;Scalable Ingestion Pipeline&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;The connector leverages Databricks DLT capabilities to create a scalable ingestion pipeline. This allows you to efficiently handle large volumes of data with essential features such as progress tracking, error logging and alerting.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Failures in pipelines are gracefully handled without loss of data.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI class="lia-align-justify"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Currently, there is no additional &lt;A href="https://docs.databricks.com/en/ingestion/lakeflow-connect/index.html#what-is-the-cost-for-lakeflow-connect" target="_blank" rel="noopener"&gt;cost for LakeFlow Connect&lt;/A&gt;. Customers are only billed for the Delta Live Tables usage needed to load data from the source to the staging volume and from the staging volume to the staging table.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;SPAN&gt;Limitations&lt;/SPAN&gt;&lt;/H2&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;Schema evolution, like dropping a column, is not supported; a full table refresh is required to capture the schema updates.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Deleting the pipeline will delete the stage volume and the stage tables.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;When a source table is deleted, the destination table is automatically deleted.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Reverse ETL is not supported.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;The gateway must run in Classic mode.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;The ingestion pipeline must run in Serverless mode.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;Only triggered mode for running ingestion pipelines is supported.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;The ingestion pipeline supports only one destination catalog and schema. To write to multiple destination catalogs or schemas, create multiple gateway-ingestion pipeline pairs.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;When you run a scheduled pipeline, alerts don’t trigger immediately. Instead, they trigger when the next update runs.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;SPAN&gt;Conclusion&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT size="4"&gt;&lt;SPAN&gt;The Databricks LakeFlow Azure SQL connector offers a robust set of features designed to simplify and secure your data ingestion process without the need to set up any additional cloud infrastructure. By leveraging this connector, organizations can efficiently bring their data from SaaS applications or other databases into the Databricks environment, enabling advanced analytics, machine learning, and business intelligence use cases on a unified platform.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;</description>
    <pubDate>Fri, 15 Nov 2024 10:37:57 GMT</pubDate>
    <dc:creator>Karthik_Ballull</dc:creator>
    <dc:date>2024-11-15T10:37:57Z</dc:date>
    <item>
      <title>Simplifying external data ingestion with Lakeflow Connect</title>
      <link>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/ba-p/98774</link>
      <description>&lt;P&gt;&lt;SPAN&gt;As data engineering and analytics become increasingly complex, organizations often seek to integrate the scalability and flexibility of the cloud with the robustness of traditional relational databases. The &lt;/SPAN&gt;&lt;STRONG&gt;Databricks lakehouse&lt;/STRONG&gt;&lt;SPAN&gt;, with its recent introduction of the &lt;/SPAN&gt;&lt;STRONG&gt;Lakeflow Connect&lt;/STRONG&gt;&lt;SPAN&gt;, seamlessly bridges these two worlds, allowing teams to harness the full power of &lt;/SPAN&gt;&lt;STRONG&gt;Azure SQL&lt;/STRONG&gt;&lt;SPAN&gt; while leveraging &lt;/SPAN&gt;&lt;STRONG&gt;Databricks advanced capabilities&lt;/STRONG&gt;&lt;SPAN&gt; for big data and AI workloads.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 15 Nov 2024 10:37:57 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/ba-p/98774</guid>
      <dc:creator>Karthik_Ballull</dc:creator>
      <dc:date>2024-11-15T10:37:57Z</dc:date>
    </item>
    <item>
      <title>Re: Simplifying external data ingestion with Lakeflow Connect</title>
      <link>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/bc-p/121198#M634</link>
      <description>&lt;P&gt;Dear Karthik, thank you so much for such a comprehensive deep dive on Lakeflow connect.&lt;/P&gt;&lt;P&gt;In our scenario, we are looking for Azure Synapse &lt;FONT color="#0000FF"&gt;&amp;lt;&lt;/FONT&gt; Connector &amp;amp; Migration &lt;FONT color="#0000FF"&gt;&amp;gt;&lt;/FONT&gt; to Databricks.&lt;/P&gt;&lt;P&gt;Did explore the following references, however, don't see the relevant connector or support, as yet:&lt;/P&gt;&lt;P&gt;&lt;A href="https://docs.databricks.com/aws/en/ingestion/lakeflow-connect/" target="_blank" rel="noopener"&gt;https://docs.databricks.com/aws/en/ingestion/lakeflow-connect/&amp;nbsp;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://docs.databricks.com/aws/en/ingestion/" target="_blank" rel="noopener"&gt;https://docs.databricks.com/aws/en/ingestion/&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Any ideas / suggestions?&lt;/P&gt;&lt;P&gt;FYI, the lakehouse federation supports Azure Synpase Connector as detailed &lt;A href="https://www.databricks.com/blog/announcing-general-availability-lakehouse-federation" target="_self"&gt;here&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;Thanks &amp;amp; Regards,&lt;/P&gt;&lt;P&gt;Dileep&lt;/P&gt;</description>
      <pubDate>Sun, 08 Jun 2025 04:51:35 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/bc-p/121198#M634</guid>
      <dc:creator>ddharma</dc:creator>
      <dc:date>2025-06-08T04:51:35Z</dc:date>
    </item>
    <item>
      <title>Re: Simplifying external data ingestion with Lakeflow Connect</title>
      <link>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/bc-p/121200#M635</link>
      <description>&lt;P&gt;Dear Karthik,&lt;/P&gt;&lt;P&gt;Was trying to edit my above comment to augment this, however, seems to have timed out.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;For any migration, typically, we have 4 options&lt;/STRONG&gt;:&lt;/P&gt;&lt;P&gt;1. Leverage Data Platform specific Native Services (in this case Lakeflow)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; // most preferred as it's comprehensive &amp;amp; integrates across the data-value-chain like catalog and more&lt;/P&gt;&lt;P&gt;2. Leverage Cloud Native Services like ADF (relevant solution &lt;A href="https://community.databricks.com/t5/data-engineering/migrating-data-from-synapse-to-databricks/td-p/83338" target="_self"&gt;here&lt;/A&gt;, thanks &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/79172"&gt;@Rishabh-Pandey&lt;/a&gt;)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; // supports variety of connectors &amp;amp; fully scalable powered by deep cloud integrations&lt;/P&gt;&lt;P&gt;3. Leverage off-the-shelf $paid tools or OSS&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;// good option, but needs evaluation, (licensing), suitability across business scenarios&lt;/P&gt;&lt;P&gt;4. Develop custom accelerators / custom code / automation scripts or leverage OSS&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;// surely can be done but preferred (ideally) in the absence of 1-3&lt;/P&gt;&lt;P&gt;Surely Lakehouse Federation is also an option, however, in our case we intend to migrate and decommission Azure Synapse over time (post cut over etc).&lt;/P&gt;&lt;P&gt;Given the first preference is option 1 Lakeflow, was exploring source connector availability to Azure Synapse to help migrate to Databricks Delta Lake.&lt;/P&gt;&lt;P&gt;HTH provide more context on the approach &amp;amp; thought process.&lt;/P&gt;&lt;P&gt;Thanks &amp;amp; regards,&lt;/P&gt;&lt;P&gt;Dileep&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 08 Jun 2025 05:30:09 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/bc-p/121200#M635</guid>
      <dc:creator>ddharma</dc:creator>
      <dc:date>2025-06-08T05:30:09Z</dc:date>
    </item>
    <item>
      <title>Re: Simplifying external data ingestion with Lakeflow Connect</title>
      <link>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/bc-p/121276#M636</link>
      <description>&lt;P&gt;Thanks&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/167601"&gt;@ddharma&lt;/a&gt;&amp;nbsp;for tagging me and i am impressed that you loved my solution.&lt;/P&gt;</description>
      <pubDate>Mon, 09 Jun 2025 18:15:02 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/bc-p/121276#M636</guid>
      <dc:creator>Rishabh-Pandey</dc:creator>
      <dc:date>2025-06-09T18:15:02Z</dc:date>
    </item>
    <item>
      <title>Re: Simplifying external data ingestion with Lakeflow Connect</title>
      <link>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/bc-p/121425#M638</link>
      <description>&lt;P&gt;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/76916"&gt;@Karthik_Ballull&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/79172"&gt;@Rishabh-Pandey&lt;/a&gt;&amp;nbsp;any thoughts / comments on my original comments above?&lt;/P&gt;&lt;P&gt;1. Does Lakeflow provide source connector for Azure Synapse?&lt;/P&gt;&lt;P&gt;2. Or if you are aware about any ETA?&lt;/P&gt;&lt;P&gt;Esp. as Unity Catalog has support for Azure Synapse connector.&lt;/P&gt;&lt;P&gt;Thanks &amp;amp; Regards,&lt;/P&gt;&lt;P&gt;Dileep&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 11 Jun 2025 04:16:05 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/bc-p/121425#M638</guid>
      <dc:creator>ddharma</dc:creator>
      <dc:date>2025-06-11T04:16:05Z</dc:date>
    </item>
    <item>
      <title>Re: Simplifying external data ingestion with Lakeflow Connect</title>
      <link>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/bc-p/121434#M639</link>
      <description>&lt;P&gt;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/167601"&gt;@ddharma&lt;/a&gt;&amp;nbsp; Lakeflow will surely have azure synapse connector but not now , they have in their roadmap.&lt;/P&gt;</description>
      <pubDate>Wed, 11 Jun 2025 06:03:34 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/bc-p/121434#M639</guid>
      <dc:creator>Rishabh-Pandey</dc:creator>
      <dc:date>2025-06-11T06:03:34Z</dc:date>
    </item>
    <item>
      <title>Re: Simplifying external data ingestion with Lakeflow Connect</title>
      <link>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/bc-p/157703#M1080</link>
      <description>&lt;P&gt;Hi Karthik,&lt;/P&gt;&lt;P class=""&gt;I found your blog very helpful, and it closely matches what I am trying to implement. However, I’m not able to get incremental ingestion working as expected: each time I run a pipeline update, it appears to read all rows from the source instead of only the changes.&lt;/P&gt;&lt;P class=""&gt;My setup is:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Source: SQL Server database on an Azure VM, with Change Tracking (CT) enabled.&lt;/LI&gt;&lt;LI&gt;Databricks: Lakeflow Connect managed ingestion, using a DLT pipeline created via the API. Currently there is no Gateway pipeling setup.&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;Based on my analysis and the pipeline logs, I have a few questions:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;P class=""&gt;When creating the pipeline via API, I used&lt;BR /&gt;"table_configuration": { "cdc_mechanism": "change_tracking" }&lt;BR /&gt;and the creation call succeeded.&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Is&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;"cdc_mechanism": "change_tracking"&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;the correct field name and value to enable SQL Server Change Tracking for a managed ingestion pipeline?&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;In the UI/metadata, the flow type is shown as SNAPSHOT_CHANGE.&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Is&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;SNAPSHOT_CHANGE&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;the expected flow type when CT is enabled, or should I expect to see a different type (for example, something explicitly indicating&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;CHANGE_TRACKING)?&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Regarding release channels:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Is CT support for SQL Server in Lakeflow Connect only available on the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;PREVIEW&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;channel, or should it work on the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;CURRENT&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;channel as well?&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P class=""&gt;Any guidance on the correct configuration for CT-based incremental ingestion (and how to verify that the connector is actually using CT rather than performing full scans) would be greatly appreciated.&lt;BR /&gt;&lt;BR /&gt;Thanks&lt;/P&gt;&lt;P class=""&gt;Swarup&lt;/P&gt;</description>
      <pubDate>Wed, 27 May 2026 03:38:52 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/simplifying-external-data-ingestion-with-lakeflow-connect/bc-p/157703#M1080</guid>
      <dc:creator>Swarup_DE</dc:creator>
      <dc:date>2026-05-27T03:38:52Z</dc:date>
    </item>
  </channel>
</rss>

