<?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 Scaling LLMs on SaaS Data with Lakeflow Connect and Batch Inference in Technical Blog</title>
    <link>https://community.databricks.com/t5/technical-blog/scaling-llms-on-saas-data-with-lakeflow-connect-and-batch/ba-p/118628</link>
    <description>&lt;P&gt;&lt;SPAN&gt;In today's data-driven enterprise landscape, organizations are looking to harness the power of Large Language Models (LLMs) to extract insights from their vast amounts of structured and unstructured data stored in various Software as a Service (SaaS) applications. However, integrating enterprise data with LLMs often involves complex ETL pipelines, specialized infrastructure, and significant engineering effort. Databricks &lt;/SPAN&gt;&lt;A href="https://www.databricks.com/blog/announcing-general-availability-lakeflow-connect" target="_blank"&gt;&lt;SPAN&gt;Lakeflow Connect&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; and &lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/aws/en/large-language-models/ai-functions" target="_blank"&gt;&lt;SPAN&gt;AI Functions &lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;for batch inference provide a streamlined approach to this challenge, enabling teams to quickly build production-ready pipelines that transform raw SaaS data into actionable insights.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Why Integrating SaaS Data with LLMs is Challenging&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Organizations often struggle with connecting their valuable SaaS application data to modern LLM-powered analytics due to several challenges:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Data from SaaS applications exists in proprietary formats and requires custom connectors&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Building and maintaining ingestion pipelines is resource-intensive&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Processing large volumes of text data through LLMs requires specialized infrastructure&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Ensuring security, governance, and compliance across the pipeline adds complexity&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;Databricks addresses these challenges with a unified approach combining Lakeflow Connect for data ingestion and AI Functions for batch LLM inference. This integration enables data teams to build end-to-end data pipelines with minimal overhead.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;What is Lakeflow Connect?&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Lakeflow Connect offers fully-managed connectors that enable you to easily ingest data from SaaS applications and databases into your Databricks Lakehouse. The entire ingestion pipeline is governed by Unity Catalog and powered by serverless compute and Lakeflow Pipelines.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Key components of Lakeflow Connect&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;This solution brings together essential components to automate and simplify data ingestion from diverse SaaS sources:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Connections: A Unity Catalog securable object that stores authentication details for the SaaS application or database.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Ingestion pipelines: Transforms data into Delta tables, modeled as a serverless Lakeflow pipeline.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Databases:&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;SPAN&gt;Gateway: Extracts data from the source database while maintaining transaction integrity&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;SPAN&gt;Staging storage: A Unity Catalog volume where data is staged before being applied to Delta tables&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;SPAN&gt;Supported data sources&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;Lakeflow Connect supports a wide range of data sources:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Databases: PostgreSQL, SQL Server&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Business applications: Salesforce, SharePoint, Workday, NetSuite, ServiceNow, Google Analytics&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Unstructured data: PDFs and Excel files from sources like SharePoint&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/aws/en/ingestion/lakeflow-connect/" target="_blank"&gt;&lt;SPAN&gt;Managed SaaS and database connectors&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; provided by Lakeflow Connect are in various &lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/aws/en/release-notes/release-types" target="_blank"&gt;&lt;SPAN&gt;release states&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;. The release states and range of supported sources will continue to evolve over time.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Lakeflow Connect uses efficient incremental read and write operations to accelerate data ingestion, improve scalability, reduce costs, and maintain data freshness for downstream use.&lt;/SPAN&gt;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="353.266px" height="77px"&gt;
&lt;P&gt;&lt;STRONG&gt;Challenges of Integrating SaaS Data with LLMs&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="482.227px" height="77px"&gt;
&lt;P&gt;&lt;STRONG&gt;Lakeflow Connect Solution&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="353.266px" height="105px"&gt;
&lt;P&gt;&lt;SPAN&gt;Data from SaaS applications exists in proprietary formats and requires custom connectors&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="482.227px" height="105px"&gt;
&lt;P&gt;&lt;SPAN&gt;Provides fully managed, ready-to-use connectors for popular SaaS sources and databases, eliminating the need for custom ETL.&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="353.266px" height="77px"&gt;
&lt;P&gt;&lt;SPAN&gt;Building and maintaining ingestion pipelines is resource-intensive&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="482.227px" height="77px"&gt;
&lt;P&gt;&lt;SPAN&gt;Automates ingestion pipelines with serverless Lakeflow Pipelines, reducing engineering effort and operational overhead.&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="353.266px" height="77px"&gt;
&lt;P&gt;&lt;SPAN&gt;Processing large volumes of text data through LLMs requires specialized infrastructure&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="482.227px" height="77px"&gt;
&lt;P&gt;&lt;SPAN&gt;Integrates with Databricks AI Functions for scalable, batch LLM inference-no need to provision or manage custom infrastructure.&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="353.266px" height="77px"&gt;
&lt;P&gt;&lt;SPAN&gt;Ensuring security, governance, and compliance across the pipeline adds complexity&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="482.227px" height="77px"&gt;
&lt;P&gt;&lt;SPAN&gt;Leverages Unity Catalog for fine-grained access control, credential management, and end-to-end data governance.&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;H2&gt;&lt;SPAN&gt;What is Batch LLM Inference with AI Functions?&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Databricks AI Functions provide a simplified way to apply LLMs to your data at scale. For batch processing, the &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;ai_query &lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt;function is particularly useful as it allows you to process large volumes of data through an LLM in a scalable and efficient manner.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;How ai_query works&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;The &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;ai_query&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt; function can be used in SQL or Python to apply LLM processing to your data. It supports:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Databricks-hosted foundation models: Pre-provisioned LLMs that Databricks manages, such as Llama 4&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Custom model serving endpoints: Your own fine-tuned models or models hosted elsewhere&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;When you use a Databricks-hosted foundation model for batch inference, Databricks configures a provisioned throughput endpoint that scales automatically based on the workload.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Before you can use &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;ai_query&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt; for batch inference, make sure the following requirements are met:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;You’re working in a region that supports Foundation Model APIs&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;You have query permissions on the Delta tables you plan to process&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Screenshot 2025-05-08 at 11.22.41 PM.png" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/16729i7187725B76DBA0C1/image-size/large?v=v2&amp;amp;px=999" role="button" title="Screenshot 2025-05-08 at 11.22.41 PM.png" alt="Screenshot 2025-05-08 at 11.22.41 PM.png" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;SPAN&gt;Building an end-to-end LLM pipeline for employee feedback&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Now, let's look at an example of a complete pipeline that:&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Ingests employee feedback data from Workday using Lakeflow Connect&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Preprocesses the data to extract relevant text fields&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Applies LLM inference using &lt;/SPAN&gt;&lt;SPAN&gt;ai_query&lt;/SPAN&gt;&lt;SPAN&gt; to analyze employee sentiment and identify engagement drivers&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Stores the results for downstream analysis and action planning&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;SPAN&gt;Step 1: Set up Lakeflow Connect for Workday&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;First, we'll create a connection to our Workday instance. This connection securely stores the authentication credentials needed to access the Workday API.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Before diving into the code, let's understand what a Workday connection represents in the Lakeflow Connect architecture.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;A Workday connection in Databricks is a Unity Catalog securable object that securely stores and manages the authentication credentials needed to access your Workday instance. This connection object serves as the foundation for all data pipelines that will extract data from Workday reports.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;When setting up a Workday connection, consider these important aspects:&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Security: All credentials are encrypted and stored as Unity Catalog securable objects, giving you fine-grained access control over who can use these connections&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Permissions: You'll need &lt;/SPAN&gt;&lt;SPAN&gt;CREATE CONNECTION&lt;/SPAN&gt;&lt;SPAN&gt; privileges on the metastore to create new connections&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Networking: If your workspace uses serverless egress control, you'll need to allowlist the Workday hostnames in your network policies&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN&gt;For Workday specifically, the connection enables access to custom reports containing valuable HR data like employee feedback, performance reviews, and organizational metrics - making it ideal for our employee engagement analysis use case.&lt;/SPAN&gt;&lt;/P&gt;
&lt;TABLE style="height: 434px; border-style: hidden; width: 100%;" border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%" height="434px"&gt;&lt;LI-CODE lang="python"&gt;# This code would typically be executed in a Databricks notebook
from databricks.sdk import WorkspaceClient
from databricks.sdk.service import connections

# Initialize the workspace client
w = WorkspaceClient()

# Create a connection to Workday
workday_conn = w.connections.create(
    name="workday_connection",
    connection_type="WORKDAY",
    properties={
        "username": "your_workday_username",
        "password": "your_workday_password",
        "tenant_url": "https://your-instance.workday.com"
    }
)
print(f"Connection created with ID: {workday_conn.id}")&lt;/LI-CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&lt;SPAN&gt;After creating the connection object, we need to define a Lakeflow Connect pipeline that will use this connection to extract data from specific Workday reports. The pipeline configuration specifies:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Where extracted data will be staged&lt;/SPAN&gt; &lt;SPAN&gt;(&lt;/SPAN&gt;&lt;FONT color="#008000"&gt;&lt;SPAN&gt;storage&lt;/SPAN&gt;&lt;/FONT&gt; &lt;SPAN&gt;parameter)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Which reports to extract from Workday (&lt;/SPAN&gt;&lt;FONT color="#008000"&gt;&lt;SPAN&gt;source.objects&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;How to map the data to destination tables in Unity Catalog (&lt;/SPAN&gt;&lt;FONT color="#008000"&gt;&lt;SPAN&gt;destination_catalog&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;FONT color="#008000"&gt;&lt;SPAN&gt;destination_schema&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt;, etc.)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;How to identify unique records (&lt;/SPAN&gt;&lt;FONT color="#008000"&gt;&lt;SPAN&gt;primary_keys&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;This declarative configuration approach greatly simplifies what would otherwise require custom ETL code to handle API pagination, error handling, and incremental data loading.&lt;/SPAN&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.service import pipelines

# Define the pipeline configuration
pipeline_config = {
    "name": "workday_feedback_ingestion",
    "storage": "UC volume 'main.hr_data.staging'",
    # Rest of the configuration...
}

# Create the pipeline
pipeline = w.pipelines.create(**pipeline_config)
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&lt;SPAN&gt;The resulting ingestion pipeline is fully managed by Databricks - it runs on serverless compute, automatically scales based on data volume, and integrates with Lakeflow Pipelines for reliable data delivery.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Step 2: Preprocess the ingested data&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;Once our data is ingested, we create a view that preprocesses our employee feedback data to extract the relevant text fields. We create the feedback_text column which combines all of our unstructured fields into a single text field that will make it easier to run the batch inference over.&amp;nbsp;&lt;/SPAN&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;%sql
CREATE OR REPLACE VIEW main.hr_data.employee_feedback AS
SELECT
  ef.Survey_Response_ID,
  ef.Employee_ID,
  e.Department,
  e.Manager_ID,
  e.Location,
  e.Tenure_Years,
  ef.Survey_Date,
  ef.Overall_Satisfaction_Score,
  ef.Verbatim_Feedback,
  ef.What_Do_You_Like_Most,
  ef.What_Could_Be_Improved,
  ef.Career_Growth_Comments,
  CONCAT(
    'Overall Satisfaction: ', ef.Overall_Satisfaction_Score, '\n\n',
    'What do you like most: ', COALESCE(ef.What_Do_You_Like_Most, ''), '\n\n',
    'What could be improved: ', COALESCE(ef.What_Could_Be_Improved, ''), '\n\n',
    'Career growth comments: ', COALESCE(ef.Career_Growth_Comments, ''), '\n\n',
    'Additional feedback: ', COALESCE(ef.Verbatim_Feedback, '')
  ) AS feedback_text
FROM
  main.hr_data.employee_feedback_raw ef
JOIN
  main.hr_data.employee_data e ON ef.Employee_ID = e.Employee_ID
WHERE
  (ef.What_Do_You_Like_Most IS NOT NULL OR 
   ef.What_Could_Be_Improved IS NOT NULL OR 
   ef.Career_Growth_Comments IS NOT NULL OR 
   ef.Verbatim_Feedback IS NOT NULL);
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;H3&gt;&lt;SPAN&gt;Step 3: Apply batch LLM inference&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;In this step, we use the &lt;/SPAN&gt;&lt;SPAN&gt;ai_query&lt;/SPAN&gt;&lt;SPAN&gt; function to analyze employee feedback data at scale. Below, we break down the key components of the &lt;/SPAN&gt;&lt;SPAN&gt;ai_query&lt;/SPAN&gt;&lt;SPAN&gt; call to clarify the choices and structure:&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;SPAN&gt;Model Selection&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN&gt;We use the endpoint &lt;/SPAN&gt;&lt;SPAN&gt;'databricks-meta-llama-3-1-8b-instruct'&lt;/SPAN&gt;&lt;SPAN&gt;, which is a Databricks-hosted foundation model optimized for instruction-following tasks. This model is chosen for its strong performance on enterprise text analysis and its compatibility with structured output prompts. Using a Databricks-hosted model also means you don’t need to manage your own model serving infrastructure-the endpoint is provisioned and scaled automatically by Databricks.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;SPAN&gt;Prompt Construction&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN&gt;The prompt is carefully crafted to guide the LLM to extract actionable insights from each feedback record. It provides explicit instructions and a list of expected outputs:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Context and Instructions:&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;The prompt starts by instructing the model to analyze the employee feedback and extract:&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Overall sentiment (Positive, Negative, Mixed, Neutral)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;SPAN&gt;Primary engagement drivers (from a provided list)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;SPAN&gt;Key themes&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;SPAN&gt;Recommended actions for management&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Structured Output Example:&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;The prompt includes a sample JSON object specifying the required keys and structure. This helps the LLM return outputs that are easily parsed for downstream analytics.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Field to Analyze:&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;The actual employee feedback text is appended at the end of the prompt, ensuring the model has all the necessary context for each row in the table. This concatenation is done using SQL’s &lt;/SPAN&gt;&lt;SPAN&gt;CONCAT()&lt;/SPAN&gt;&lt;SPAN&gt; function.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&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;%sql
-- Create a table to store the LLM results
CREATE TABLE IF NOT EXISTS main.hr_data.employee_insights
AS
SELECT
  Survey_Response_ID,
  Employee_ID,
  Department,
  Manager_ID,
  Location,
  Tenure_Years,
  Survey_Date,
  Overall_Satisfaction_Score,
  ai_query(
    'databricks-meta-llama-3-1-8b-instruct',
    CONCAT(
      'Analyze the following employee feedback and extract:
      1. The overall sentiment (Positive, Negative, Mixed, Neutral)
      2. The primary engagement drivers (choose from: Work-Life Balance, Management, Compensation, Career Growth, Company Culture, Team Dynamics, Work Environment, Job Satisfaction)
      3. Key themes from the feedback
      4. Recommended actions for management

      Employee feedback:
      ', feedback_text),
    responseFormat =&amp;gt; '{
      "type": "json_schema",
      "json_schema": {
        "schema": {
          "type": "object",
          "properties": {
            "sentiment": {"type": "string"},
            "engagement_drivers": {"type": "array", "items": {"type": "string"}},
            "key_themes": {"type": "array", "items": {"type": "string"}},
            "recommended_actions": {"type": "array", "items": {"type": "string"}}
          }
        },
        "strict": true
      }
    }'
  ) AS insights
FROM
  main.hr_data.employee_feedback;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;H3&gt;&lt;SPAN&gt;Step 4: Parse and analyze the LLM results&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;Finally, we parse the JSON output from the LLM to create structured fields we can analyze:&lt;/SPAN&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;%sql
CREATE OR REPLACE VIEW main.hr_data.engagement_analysis AS
SELECT
  Survey_Response_ID,
  Employee_ID,
  Department,
  Manager_ID,
  Location,
  Tenure_Years,
  Survey_Date,
  Overall_Satisfaction_Score,
  insights,
  
  -- Parse JSON fields
  JSON_VALUE(insights, '$.sentiment') AS sentiment,
  JSON_QUERY(insights, '$.engagement_drivers') AS engagement_drivers,
  JSON_QUERY(insights, '$.key_themes') AS key_themes,
  JSON_QUERY(insights, '$.recommended_actions') AS recommended_actions
FROM
  main.hr_data.employee_insights;&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN&gt;Now we can perform analytics on the structured data:&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&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%" height="668px"&gt;&lt;LI-CODE lang="python"&gt;%sql
-- See the distribution of sentiment across departments
SELECT
  Department,
  sentiment,
  COUNT(*) AS response_count
FROM
  main.hr_data.engagement_analysis
GROUP BY
  Department, sentiment
ORDER BY
  Department, response_count DESC;

-- Analyze top engagement drivers by tenure
SELECT
  CASE 
    WHEN Tenure_Years &amp;lt; 1 THEN 'Less than 1 year'
    WHEN Tenure_Years BETWEEN 1 AND 3 THEN '1-3 years'
    WHEN Tenure_Years BETWEEN 4 AND 7 THEN '4-7 years'
    ELSE '8+ years'
  END AS tenure_group,
  driver,
  COUNT(*) AS mentions
FROM
  main.hr_data.engagement_analysis,
  LATERAL FLATTEN(PARSE_JSON(engagement_drivers)) AS flattened_drivers
GROUP BY
  tenure_group, driver
ORDER BY
  tenure_group, mentions DESC;
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&lt;SPAN&gt;Our queries yield the following results:&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Sentiment Distribution Across Departments&lt;/STRONG&gt;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;STRONG&gt;Department&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;STRONG&gt;Sentiment&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;STRONG&gt;Response Count&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Sales&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Positive&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;120&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Sales&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Neutral&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;30&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Sales&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Negative&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;10&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Engineering&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Positive&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;150&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Engineering&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Negative&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;20&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;HR&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Positive&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;80&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;HR&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Neutral&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;25&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;HR&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Negative&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;5&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&lt;STRONG&gt;Top Engagement Drivers by Tenure Group&lt;/STRONG&gt;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;STRONG&gt;Tenure Group&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;STRONG&gt;Driver&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;STRONG&gt;Mentions&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Less than 1 year&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Work-Life Balance&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;50&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Less than 1 year&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Management&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;40&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;1-3 years&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Compensation&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;70&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;1-3 years&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Career Growth&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;60&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;4-7 years&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Company Culture&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;45&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;4-7 years&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Team Dynamics&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;35&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;8+ years&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Work Environment&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;55&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;8+ years&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Job Satisfaction&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;50&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&lt;SPAN&gt;We’ve successfully leveraged our Workday data to create actionable insights for HR and leadership teams by highlighting both the sentiment landscape and key engagement drivers segmented by department and tenure group.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Conclusion&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Combining Lakeflow Connect with Batch LLM Inference offers a powerful, scalable solution for applying LLMs to SaaS application data. This integrated approach enables organizations to:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Ingest data from a wide range of SaaS applications with minimal configuration&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Process large volumes of text data using batch LLM inference&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Extract structured insights that drive informed business decisions&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Automate the entire pipeline for continuous, real-time analysis&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;By unifying data ingestion and LLM processing, this solution overcomes key enterprise challenges - delivering a streamlined, maintainable architecture for large-scale AI workloads.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Ready to get started with Lakeflow Connect and Batch LLM Inference? Here are your next steps:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Use the &lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/aws/en/ingestion/overview" target="_blank"&gt;&lt;SPAN&gt;Lakeflow Connec&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;t Previews to start ingesting data from your SaaS applications&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Explore the Databricks documentation on &lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/aws/en/large-language-models/ai-query-batch-inference" target="_blank"&gt;&lt;SPAN&gt;AI Functions and batch inference&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Join the &lt;/SPAN&gt;&lt;A href="https://community.databricks.com/" target="_blank"&gt;&lt;SPAN&gt;Databricks community&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; to share your experiences and learn from others&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
    <pubDate>Tue, 13 May 2025 12:51:48 GMT</pubDate>
    <dc:creator>krkumar</dc:creator>
    <dc:date>2025-05-13T12:51:48Z</dc:date>
    <item>
      <title>Scaling LLMs on SaaS Data with Lakeflow Connect and Batch Inference</title>
      <link>https://community.databricks.com/t5/technical-blog/scaling-llms-on-saas-data-with-lakeflow-connect-and-batch/ba-p/118628</link>
      <description>&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Screenshot 2025-05-08 at 11.22.41 PM.png" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/16728iF56C037CB10964D6/image-size/large?v=v2&amp;amp;px=999" role="button" title="Screenshot 2025-05-08 at 11.22.41 PM.png" alt="Screenshot 2025-05-08 at 11.22.41 PM.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 13 May 2025 12:51:48 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/scaling-llms-on-saas-data-with-lakeflow-connect-and-batch/ba-p/118628</guid>
      <dc:creator>krkumar</dc:creator>
      <dc:date>2025-05-13T12:51:48Z</dc:date>
    </item>
  </channel>
</rss>

