Databricks Data Ingestion Patterns and Lakeflow Connect: Choosing an Ingestion Method (Data Engineer Associate)
Data ingestion in Databricks is the process of bringing data from files, message buses, databases and SaaS applications into Unity Catalog-governed Delta tables, using a batch, incremental or streaming pattern and a method chosen by volume, frequency and governance needs. This lesson covers two objectives of Section 2 of the Databricks Certified Data Engineer Associate exam guide, ingestion patterns and importing data, and prioritizing between ingestion methods: the ingestion patterns and how triggered and continuous runs, checkpoints and streaming tables make incremental loading work; importing local files; Lakeflow Connect standard and managed connectors, including CDC and query-based database connectors; and how to prioritize managed connectors, partner and community connectors, Lakehouse Federation and custom code with Unity Catalog governance in mind.
On this page10 sections
- Batch, incremental and streaming ingestion patterns
- Triggered vs continuous: running incremental loads on a schedule
- Checkpoints: how incremental ingestion stays exactly-once
- Incremental file loading in SQL: streaming tables, read_files and COPY INTO
- Choosing by data volume and arrival frequency
- Importing local files: the upload page and Unity Catalog volumes
- Lakeflow Connect: standard connectors and managed connectors
- How managed connectors work: SaaS, file services and databases
- Prioritizing ingestion methods: managed first, then partners, federation or code
- Governing ingestion with Unity Catalog
- Choose batch, incremental (append or upsert) or streaming ingestion from the shape of the delivery and the freshness requirement
- Run incremental loads as triggered updates or availableNow jobs, and explain what checkpoints, full refreshes and changed queries do to already-processed data
- Load new files exactly once in SQL with a streaming table over STREAM read_files, and pick COPY INTO or Auto Loader by data volume and frequency
- Import local files with the upload page or through a Unity Catalog volume and the Databricks CLI
- Distinguish Lakeflow Connect standard and managed connectors, and CDC-based from query-based database connectors with SCD type 1 or 2
- Prioritize managed connectors, declarative pipelines, Structured Streaming, partner and community connectors and Lakehouse Federation against stated requirements
- Govern ingestion with Unity Catalog connections, storage credentials, external locations and volumes instead of DBFS mounts
Batch, incremental and streaming ingestion patterns
Databricks ingestion follows three patterns. Batch loading reads a complete dataset and writes it in one run, usually replacing the target. Incremental loading processes only the data that arrived since the last run, so each run costs what the new data costs. Streaming ingestion processes data continuously as it arrives, for latency measured in seconds. The right pattern follows from the shape of the delivery and how fresh the data must be.
| Pattern | What a run reads | Fits when | Goes wrong when |
|---|---|---|---|
| Batch (full reload) | The whole source, every run | Each delivery is a complete snapshot that supersedes the last, including removals; small reference data | Used on a folder that keeps growing: every run rereads history and gets slower; INSERT INTO over the whole folder duplicates rows |
| Incremental | Only files or records not processed before | Data accumulates (daily drops, hourly extracts, change feeds) and freshness of minutes to hours is enough | Used on full snapshots: appending a new snapshot keeps rows the source has since removed |
| Streaming (continuous) | New records as they arrive | Consumers need data within seconds, such as clickstream personalization or fraud signals | Used for data that arrives once a night: compute runs all day waiting |
Incremental loading does not decide on its own how records are applied. If each delivery contains only new records, append them. If it contains new and changed records for a key (for example an hourly extract of customers created or changed in that hour), apply each file as an upsert, a MERGE on the key (or AUTO CDC in a declarative pipeline), so the table holds one current row per key. Replacing the table with a partial extract would delete every unchanged customer, and appending would create a second row for each updated one.
Incremental and streaming are the same engine in Databricks: a streaming read (Auto Loader, a Kafka source, STREAM read_files) remembers its progress, and the trigger decides whether it runs continuously or in scheduled bursts. The next two sections cover that choice and the checkpoint that makes it work.
Triggered vs continuous: running incremental loads on a schedule
Choose triggered execution when data can wait minutes or hours, and continuous execution only when it must land within seconds. A triggered run processes everything that has arrived since the last run and then stops, so you pay for compute only while it works; a continuous run keeps compute up all the time.
| Lakeflow Spark Declarative Pipelines | Structured Streaming / Auto Loader code | |
|---|---|---|
| Process what is available, then stop | Triggered pipeline mode; schedule updates with a job (for example every 15 minutes, hourly or nightly) | .trigger(availableNow=True) in a scheduled Lakeflow job on job compute |
| Run all the time | Continuous pipeline mode | The default trigger, or a processingTime trigger, on a cluster that never stops |
(spark.readStream.format("cloudFiles")
.option("cloudFiles.format", "json")
.option("cloudFiles.schemaLocation", "/Volumes/main/raw/_meta/orders_schema")
.load("/Volumes/main/raw/orders/")
.writeStream
.option("checkpointLocation", "/Volumes/main/raw/_meta/orders_ckpt")
.trigger(availableNow=True)
.toTable("main.bronze.orders"))
A long processingTime trigger (say, one hour) only spaces out micro-batches; the cluster still stays up between them, so it barely saves money. availableNow is different: the query ends when it has caught up, and the job's compute shuts down. Pick the schedule from the freshness requirement: a once-a-day delivery needs one triggered update after it lands and before its consumers read it; a freshness target of N minutes needs a triggered update at least every N minutes, not a continuous pipeline. For a message bus, keep the interval well inside the source's retention period, so no record expires before a run reads it.
Two pipeline behaviours matter when you change things later:
- A normal update is incremental. If you change a streaming table's query (for example to fix a parsing bug), the new logic applies only to rows processed from then on; rows already in the table are not recomputed. Switching to continuous mode changes only how often updates run, not what counts as already processed.
- A full refresh reprocesses everything. It clears the streaming table and its streaming state and requeries all data still available in the source. Use it deliberately, for example to apply a fix to historical rows when every source file still exists. Never schedule full refreshes as the routine load: each run reprocesses all history, and rows whose source files have since been deleted are lost.
Checkpoints: how incremental ingestion stays exactly-once
The checkpoint is what makes incremental and streaming ingestion exactly-once. For every committed micro-batch, a Structured Streaming query records its progress in the checkpoint location: for Auto Loader, the files it has discovered and processed; for Kafka or Kinesis, the offsets or sequence numbers it has read. Combined with Delta Lake's transactional writes, a stream that stops halfway (for example because its cluster was terminated) restarts from the last committed batch without loading a file twice or skipping one.
- A new or deleted checkpoint starts from scratch. Point a stream at an empty checkpoint path (easy to do when copying or moving a job) and Auto Loader treats every existing file as new. An append-only target then holds every historical record twice. Reset a checkpoint only on purpose, together with the target table. Creating a new checkpoint on every scheduled run turns incremental loading into repeated full loads with duplicates.
- The schema location is not the checkpoint. Auto Loader's
cloudFiles.schemaLocationstores inferred schemas and their evolution, not ingestion progress. Nothing is written back to the source files, and the cluster event log plays no part in resuming a stream. - Some options only count on the first start.
cloudFiles.includeExistingFiles(default true) decides whether files already in the path when the stream first starts are loaded. It is evaluated only then; changing it on a stream with an existing checkpoint has no effect. To reload old files into a streaming table, run a full refresh (or start a new checkpoint with a cleared target). - Deleting rows does not rewind progress. If you delete rows from a streaming table, the checkpoint still marks their files as processed, so a normal update will not reload them.
Streaming tables in Lakeflow Spark Declarative Pipelines manage their checkpoints for you, which is one reason they are the recommended way to ingest incrementally.
Incremental file loading in SQL: streaming tables, read_files and COPY INTO
In SQL, the recommended way to load only new files is a streaming table over STREAM read_files(...). read_files is a table-valued function that reads files from a volume or cloud storage path; wrapped in STREAM inside a streaming table, it becomes an incremental source (Auto Loader underneath) with its own checkpoint, so each refresh appends only files it has not seen.
CREATE OR REFRESH STREAMING TABLE sales.bronze.orders
AS SELECT * FROM STREAM read_files('/Volumes/sales/raw/orders/', format => 'json');
Schedule the refresh (for example with SCHEDULE EVERY 1 HOUR or a job) and each run picks up new files once. The same read_files call used without STREAM behaves very differently:
| Statement over read_files on a folder | What each run does | Rows from files later deleted at the source |
|---|---|---|
CREATE OR REFRESH STREAMING TABLE ... FROM STREAM read_files(...) | Reads only new files, appends them once | Kept: the table stores what it already appended |
CREATE OR REPLACE TABLE ... AS SELECT ... FROM read_files(...) | Rebuilds the table from every file present (full batch reload) | Lost on the next run |
INSERT INTO ... SELECT ... FROM read_files(...) | Appends every file again, duplicating earlier loads | Kept, but every remaining file is loaded again on each run |
CREATE OR REFRESH MATERIALIZED VIEW ... FROM read_files(...) | Recomputes a query result over the source as it is now; not an append-once ingestion log | Drop out of the result |
CREATE VIEW ... FROM read_files(...) | Stores nothing; every query rereads all files | Gone |
This matters when the landing zone has a retention rule (files are deleted after some period) and the table must keep every row ever received: only the streaming table appends each file once and keeps its rows afterwards, provided nobody runs a full refresh.
COPY INTO is the older SQL path. It is a retriable, idempotent command that loads files from a cloud storage path or volume into an existing Delta table and records which files it has loaded, so a rerun skips them. It suits occasional loads of up to thousands of files, scheduled from SQL. Databricks now positions streaming tables as the scalable SQL replacement, and Auto Loader for directories of millions of files. COPY INTO syntax, Auto Loader options and schema evolution are covered in the lesson on incremental file loading with COPY INTO and Auto Loader.
Choosing by data volume and arrival frequency
Volume and arrival frequency usually decide between the file-loading methods. Both COPY INTO and Auto Loader load only new files, but they scale differently: Databricks recommends COPY INTO for directories of thousands of files and Auto Loader for millions of files or more and for files that arrive continuously.
| Situation | Fits | Why |
|---|---|---|
| One small file, once, from a laptop | The create-or-modify-table upload page | A few clicks, no pipeline to maintain |
| A modest number of files on a regular schedule into an existing table, from SQL | COPY INTO on a schedule | Idempotent, skips loaded files, simple |
| Files arriving all day, growing to millions | Auto Loader (in code or a streaming table over STREAM read_files) | Tracks discovered files in its checkpoint and discovers new ones incrementally, with notification-based discovery for very large directories |
| Events on a message bus within seconds | Structured Streaming or a declarative pipeline in continuous mode | Only continuous processing gives seconds of latency |
When a COPY INTO job slows down because its directory keeps growing, more compute only treats the symptom, and a PATTERN filter does not help either: COPY INTO still lists the directory and checks candidates against its load history, so run time keeps growing with the directory. Moving to Auto Loader fixes the scaling problem. Then choose the trigger separately: if users need hourly data and cost matters, run Auto Loader as a triggered, hourly update rather than continuously.
Importing local files: the upload page and Unity Catalog volumes
For a small file on your own machine, use the workspace's create or modify table upload page: it accepts small CSV, TSV, JSON, Avro, Parquet and text files, previews the schema and writes a managed Delta table in a catalog and schema you choose. You need CREATE TABLE (with USE CATALOG and USE SCHEMA) on the destination and a running compute resource. It is ideal for small, one-off reference data and wrong for anything recurring: it is a manual step, does not leave you a governed raw copy of the file and does not turn documents such as PDFs into tables.
For larger files, or when the raw file must be kept, put the file in a Unity Catalog volume and load it from there:
- A volume's upload button in Catalog Explorer is convenient but has a per-file size limit. For larger files, use the Databricks CLI or SDK, which write to
/Volumes/<catalog>/<schema>/<volume>/paths and are limited only by what the cloud storage supports. - Then create the table from the volume path with
read_files, COPY INTO or Auto Loader. The raw file stays in the governed volume, which satisfies an audit-copy requirement. - Splitting a large file by hand to fit a browser upload is error-prone and still leaves no governed raw copy.
databricks fs cp ./vendor_extract.parquet dbfs:/Volumes/main/landing/vendor/vendor_extract.parquet
Do not use the DBFS root or the old FileStore folder as a landing zone. The DBFS root is a legacy, workspace-level location that Unity Catalog does not govern, so files there sit outside Unity Catalog grants, audit and lineage.
Lakeflow Connect: standard connectors and managed connectors
Lakeflow Connect is Databricks' set of ingestion connectors, in two families. Standard connectors are the building blocks you configure yourself: Auto Loader for files and Structured Streaming or declarative pipelines for message buses. Managed connectors are fully managed ingestion from enterprise applications, databases and file services, where Databricks handles authentication, incremental reads, schema evolution and retries.
| Standard connectors | Managed connectors | |
|---|---|---|
| Sources | Cloud object storage (S3, ADLS, GCS, volumes) via Auto Loader; SFTP via Auto Loader; message buses (Apache Kafka, Amazon Kinesis, Azure Event Hubs through its Kafka endpoint, Google Pub/Sub) | SaaS applications (for example Salesforce, Workday reports, ServiceNow); databases (for example SQL Server, MySQL, PostgreSQL); file services (SharePoint, Google Drive) |
| How you use them | Write Auto Loader or Structured Streaming code, or declare a streaming table in a Lakeflow Spark Declarative Pipeline | Configure a connection and an ingestion pipeline in the UI, API or bundles; no source API code |
| What you own | The query, its options, and (with raw Structured Streaming) checkpoints and retries | Only configuration: which objects, schedule, destination, history mode |
| Destination | Delta tables in Unity Catalog | Streaming tables in Unity Catalog |
Streaming sources
Message buses are read with Structured Streaming (spark.readStream.format("kafka"), "kinesis", and so on) or declaratively as a streaming table in a pipeline. They are not read with JDBC, COPY INTO, Auto Loader (which reads files, not streams) or Lakehouse Federation. A declarative pipeline is the more managed choice: it handles checkpoints, retries and orchestration, and lets you declare data quality rules as expectations on the streaming table. Raw Structured Streaming gives full control, but you code validation (for example in foreachBatch) and manage checkpoints and retries yourself.
SFTP
The SFTP connector extends Auto Loader: you create a Unity Catalog connection holding the SFTP credentials and point cloudFiles at an sftp:// path, getting incremental, exactly-once loads directly from the server with no copy step. COPY INTO and spark.read do not support SFTP sources.
How managed connectors work: SaaS, file services and databases
A managed connector is built from a few Unity Catalog-governed pieces, and the exam expects you to know what each one does:
- Connection: a Unity Catalog securable that stores the source's authentication details (OAuth tokens, user and password). It is not a volume, a storage credential (those are for cloud object storage) or a workspace secret scope.
- Ingestion pipeline: a serverless Lakeflow Spark Declarative Pipeline that reads the source incrementally and writes one streaming table per ingested object into the destination catalog and schema. The pipeline owns these tables, so do not edit them by hand.
- Ingestion gateway and staging (databases only): the gateway runs on classic compute close to the database, extracts snapshots and changes, and writes them to a staging volume that the ingestion pipeline applies.
SaaS and file-service connectors (Salesforce, Workday reports, ServiceNow, SharePoint, Google Drive) remove all API code: no pagination, token refresh or incremental logic to maintain, and new or changed records (or documents, for file services) arrive on the schedule you set. A file-service connector is how documents such as PDFs and Word files in SharePoint reach Unity Catalog; Auto Loader cannot read a SharePoint site URL.
Database connectors come in two kinds, and the difference is tested:
| CDC-based connector | Query-based connector | |
|---|---|---|
| Source prerequisite | Change data capture or change tracking enabled (SQL Server CDC or change tracking, MySQL binary log, PostgreSQL logical replication) | No log access; one monotonically increasing cursor column such as updated_at |
| Architecture | Ingestion gateway + staging + ingestion pipeline | Ingestion pipeline polls the table with the cursor |
| Changes captured | Every insert, update and delete, including intermediate values between runs | Only each changed row's latest state at run time |
| Deletes | Hard deletes propagate | Hard deletes are invisible; soft deletes (a flag column) are treated as deletes only if you set a deletion condition |
Separately, a managed connector's history tracking setting decides what the destination keeps. SCD type 1 overwrites each row with its latest values (current state only). SCD type 2 keeps every version with validity columns, which is what a change-history or audit requirement needs. A full change history including hard deletes therefore needs both a CDC-based connector and SCD type 2; either one alone falls short.
Compared with nightly JDBC full reloads, a CDC connector moves only changed rows, so data can be minutes old instead of a day, and deletes propagate. CSV extracts of changed rows lose deletes and add a custom export job.
Prioritizing ingestion methods: managed first, then partners, federation or code
Databricks' guidance is to start with the most managed layer that meets the requirements and move down only when that layer cannot meet one: a managed connector first, then Lakeflow Spark Declarative Pipelines, then raw Structured Streaming. Each step down adds code and operations you own. A preference for flexibility is not a reason to move down when the managed connector meets every stated requirement.
The type of data narrows the choice first: structured tables in a database or SaaS application go to a database or SaaS managed connector; files landing in cloud object storage go to Auto Loader (a standard connector); unstructured documents such as PDFs and Word files kept in a file service like SharePoint go to a file-service managed connector, which lands the files for downstream parsing rather than flattening them into rows.
Transformation needs are also not a reason to replace a connector. A managed connector lands raw (bronze) data; cleansing and filtering rules belong in a downstream pipeline that builds a silver table from the connector's output.
When no managed connector covers the source, the options are:
| Option | Fits when | Trade-offs |
|---|---|---|
| Partner connector (for example Fivetran through Partner Connect) | The company already licenses the tool, it supports the source, and a vendor-supported, no-code pipeline is wanted | A second vendor and contract; credentials are held in the partner's platform and usage is billed there, even when the destination is a Unity Catalog schema |
| Community or custom connector | An open-source connector exists for an unsupported source | Maintained by the community: no Databricks SLA and no vendor support |
| Your own code (JDBC, ODBC or REST in a notebook, scheduled with Lakeflow Jobs) | Nothing else fits | You own pagination, incremental logic, retries and API changes (covered in the lesson on Lakeflow Connect, JDBC/REST clients and semi-structured data) |
| Lakehouse Federation | Data in an external database or warehouse is needed rarely, must be current and should not be copied | Not ingestion: see below |
Governance can decide between two tools that both support a source. If policy requires that source credentials be held and granted in Unity Catalog and that ingestion cost appear in Databricks system tables, a Lakeflow Connect connector meets it (a Unity Catalog connection; serverless pipeline usage in system.billing.usage) and a partner tool does not.
Lakehouse Federation vs ingestion
Lakehouse Federation registers an external database (PostgreSQL, MySQL, SQL Server, Snowflake and others) in Unity Catalog through a connection and a foreign catalog, and pushes queries down to it. Nothing is copied, so data is always current and there is no pipeline, but every query runs on the source, and the foreign catalog shows only the current state. It targets databases and warehouses, not SaaS APIs, event streams or SFTP servers.
| Requirement | Federation | Ingestion (for example a CDC connector) |
|---|---|---|
| Occasional ad hoc lookups, no copy, no new pipeline | Fits | Adds a pipeline and a duplicate dataset |
| Many dashboards or heavy, repeated queries | Puts that load on the production database; a bigger SQL warehouse does not help | Fits: queries run on Delta tables |
| History of how rows changed | Not available | CDC with SCD type 2 |
A materialized view over a foreign catalog still queries the source on each refresh and holds only the latest result, so it fixes neither the load nor the history problem.
Governing ingestion with Unity Catalog
Every ingestion path should read and write through Unity Catalog objects, so that access is granted to groups, audited and traced in lineage. The relevant securables are:
- Connections for external systems (SaaS apps, databases, SFTP). Creating one needs
CREATE CONNECTIONon the metastore. Building an ingestion pipeline on an existing connection needsUSE CONNECTION(orALL PRIVILEGES) on it, plusUSE CATALOGon the destination catalog andUSE SCHEMAandCREATE TABLEon the destination schema. (The prerequisites list other combinations too, for exampleCREATE SCHEMAon the catalog instead of an existing schema.) Ownership orCREATE CONNECTIONgrants more than that;MODIFYchanges data in existing tables but does not let you create the pipeline's tables. - Storage credentials and external locations for cloud object storage. A storage credential wraps the cloud identity; an external location pairs it with a path. Granting
READ FILESon an external location lets a group read that path directly with its cloud URI. - Volumes for files. An external volume registers an existing path inside an external location, so files stay where they are;
READ VOLUMEon a volume created at a prefix such aslanding/limits a group to that prefix, and code reads/Volumes/<catalog>/<schema>/<volume>/paths with no cloud URI, which makes it portable across workspaces. A managed volume stores files in Unity Catalog's managed storage, so existing files would have to be copied in.
Legacy patterns sit outside this model. A DBFS mount backed by a cluster instance profile (or service principal) gives everyone on the cluster the same access, with no Unity Catalog grants, audit or lineage, and Unity Catalog tables and volumes cannot be defined on mount paths. Reading the S3 path directly with the same instance profile changes nothing. The fix is a storage credential plus an external location (or a volume) for the bucket, then pointing Auto Loader at the governed path.
Workspace secret scopes still hold secrets for custom notebook code, but they are a workspace feature outside Unity Catalog grants; managed connectors store credentials in connections instead.
Tip. This part of Section 2 is tested with short scenarios: a source, a freshness or history requirement and a constraint such as cost, no custom code, no extra vendor, least privilege or no copy step. Several options usually work technically, and the stated constraint separates them, for example a triggered versus continuous pipeline, COPY INTO versus Auto Loader at a given file volume, a CDC-based versus query-based connector, SCD type 1 versus type 2, a managed connector versus a partner tool, or federation versus ingestion. Expect short SQL and PySpark snippets (read_files with and without STREAM, availableNow triggers, checkpoint locations) and questions on what happens to already-processed data after a checkpoint change, a query change or a full refresh.
- Batch reloads suit complete snapshots; incremental loads suit accumulating data (append new records, MERGE changed ones on a key); continuous streaming is only for seconds-level latency.
- Triggered pipelines and trigger(availableNow=True) process what has arrived and then stop compute; a long processingTime trigger still keeps the cluster running.
- The checkpoint records processed files or offsets: a new or empty checkpoint reprocesses everything, and cloudFiles.includeExistingFiles only matters on a stream's first start.
- A changed streaming-table query affects only new rows; a full refresh clears the table and rereads all data still in the source.
- In SQL, CREATE OR REFRESH STREAMING TABLE ... FROM STREAM read_files loads each file once; CTAS and INSERT INTO over read_files reread every file.
- COPY INTO fits thousands of files and occasional batches; Auto Loader fits millions of files and continuous arrival.
- Standard connectors are Auto Loader (cloud storage, SFTP) and Structured Streaming or pipelines (Kafka, Kinesis, Event Hubs, Pub/Sub); managed connectors cover SaaS apps, databases and file services.
- CDC-based database connectors capture every change and hard deletes through a gateway; query-based connectors see only the latest state and only soft deletes via a deletion condition; SCD type 2 keeps history.
- Start with the most managed layer; use partner or community connectors only to fill gaps, and Lakehouse Federation for occasional in-place queries rather than heavy or historical workloads.
- Govern ingestion through Unity Catalog connections (USE CONNECTION to reuse), storage credentials, external locations and volumes, never DBFS mounts or the DBFS root.
Frequently asked questions
What is the difference between batch, incremental and streaming ingestion in Databricks?
Batch ingestion reads a complete dataset on each run, usually replacing the target, which suits full snapshots. Incremental ingestion processes only data that arrived since the last run, tracked by a checkpoint or load history, so cost follows new data. Streaming ingestion processes data continuously as it arrives for seconds-level latency. In Databricks, incremental and streaming use the same streaming engine; the trigger decides whether it runs in scheduled bursts or continuously.
When should a Lakeflow pipeline run in triggered mode instead of continuous mode?
Use triggered mode whenever the data can be minutes or hours old. A triggered update processes everything available since the last run and then stops its compute, and you schedule it to match the freshness requirement, such as once after a nightly delivery or every 15 minutes. Continuous mode keeps compute running and is worth its cost only when data must be processed within seconds of arrival.
Why does an Auto Loader stream load every file again after its checkpoint changes?
The checkpoint is where Auto Loader records which files it has already discovered and processed. A stream started on a new or empty checkpoint has no record of earlier work, so it treats every existing file as new and reloads it, duplicating rows in an append-only table. Keep the checkpoint with the stream and reset it only deliberately, together with the target table.
How do you load only new files with SQL in Databricks?
Create a streaming table over the read_files function wrapped in STREAM, for example CREATE OR REFRESH STREAMING TABLE orders AS SELECT * FROM STREAM read_files('/Volumes/sales/raw/orders/'). The streaming table keeps a checkpoint, so each refresh appends only files it has not seen. CREATE TABLE AS SELECT or INSERT INTO over read_files reread every file. COPY INTO is the older idempotent SQL command and suits up to thousands of files.
What is the difference between Lakeflow Connect standard and managed connectors?
Standard connectors are Auto Loader for files in cloud object storage or SFTP and Structured Streaming or declarative pipelines for message buses such as Kafka, Kinesis, Event Hubs and Pub/Sub; you write and configure the query. Managed connectors provide fully managed ingestion from SaaS applications such as Salesforce and Workday, databases such as SQL Server, and file services such as SharePoint, with Databricks handling authentication, incremental reads, schema evolution and retries through a Unity Catalog connection and a serverless ingestion pipeline.
What is the difference between CDC-based and query-based database connectors?
A CDC-based connector reads the database's change log (CDC or change tracking, the MySQL binary log, PostgreSQL logical replication) through an ingestion gateway, so it captures every insert, update and delete, including hard deletes and intermediate values. A query-based connector polls the table with a monotonically increasing cursor column, so it sees only each row's latest state and can treat soft-deleted rows as deletes only when a deletion condition is configured. Keeping change history additionally requires SCD type 2.
When should you use Lakehouse Federation instead of ingesting data?
Use Lakehouse Federation when data in an external database or warehouse is needed occasionally, must always be current and should not be copied: a foreign catalog makes its tables queryable in Unity Catalog with no pipeline. Ingest instead when queries are heavy or frequent, because federated queries run on the source system, or when you need change history, which a foreign catalog cannot provide.
Which privileges does a data engineer need to build an ingestion pipeline on an existing Unity Catalog connection?
USE CONNECTION (or ALL PRIVILEGES) on the connection, USE CATALOG on the destination catalog, and USE SCHEMA plus CREATE TABLE on the destination schema. CREATE CONNECTION on the metastore is needed only to create a new connection, and owning the connection grants far more than least privilege requires.
Source
This lesson covers the "Data Ingestion and Loading" domain of the official Databricks DEA exam guide. Vendors revise their guides — check the source for the current version.
Sign up free to mark lessons complete, bookmark topics and track your exam readiness.