<?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>topic Re: Best practices for initial large-scale ingestion from on‑premises Oracle to Databricks in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/best-practices-for-initial-large-scale-ingestion-from-on/m-p/155764#M54308</link>
    <description>&lt;P&gt;Hi &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/226887"&gt;@amirabedhiafi&lt;/a&gt;,&lt;/P&gt;&lt;P&gt;Thank you for your answer, I found it very helpful. It actually gave me an idea.&lt;/P&gt;&lt;P&gt;What if I use a database backup for the initial load instead of performing the first backfill step? This way, I could ingest all the historical data at once, and then store the last insert timestamp in the bronze Delta table to use it as a starting point for the continuous ingestion.&lt;/P&gt;&lt;P&gt;Do you think this approach would be reliable, or could it introduce consistency issues compared to using a defined cutoff point?&lt;/P&gt;</description>
    <pubDate>Wed, 29 Apr 2026 08:02:34 GMT</pubDate>
    <dc:creator>faruko</dc:creator>
    <dc:date>2026-04-29T08:02:34Z</dc:date>
    <item>
      <title>Best practices for initial large-scale ingestion from on‑premises Oracle to Databricks</title>
      <link>https://community.databricks.com/t5/data-engineering/best-practices-for-initial-large-scale-ingestion-from-on/m-p/155646#M54288</link>
      <description>&lt;DIV&gt;&lt;P&gt;&lt;STRONG&gt;Hello everyone,&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;I am responsible for designing and implementing a Lakehouse architecture in an industrial company.&lt;BR /&gt;I am currently facing some challenges regarding the initial ingestion of data from our on‑premise Oracle database into Databricks.&lt;/P&gt;&lt;P&gt;The data comes from production systems and is actively used by several applications. My main concern is that the initial load is very large, and I’m worried about impacting database performance or even causing issues if we extract all the data at once.&lt;/P&gt;&lt;P&gt;For the ongoing ingestion, the data volume will be much smaller and continuous, so that part is not an issue.&lt;BR /&gt;However, I would really appreciate advice or best practices on how to safely handle the &lt;STRONG&gt;first large‑scale ingestion&lt;/STRONG&gt; (initial load) without overloading or disrupting the Oracle database.&lt;/P&gt;&lt;P&gt;What approaches, tools, or patterns would you recommend in this situation?&lt;/P&gt;&lt;P&gt;Thank you in advance for your help.&lt;/P&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 28 Apr 2026 08:29:41 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/best-practices-for-initial-large-scale-ingestion-from-on/m-p/155646#M54288</guid>
      <dc:creator>faruko</dc:creator>
      <dc:date>2026-04-28T08:29:41Z</dc:date>
    </item>
    <item>
      <title>Re: Best practices for initial large-scale ingestion from on‑premises Oracle to Databricks</title>
      <link>https://community.databricks.com/t5/data-engineering/best-practices-for-initial-large-scale-ingestion-from-on/m-p/155667#M54291</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/226546"&gt;@faruko&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;You can split&amp;nbsp; split initial load using partitioned reads. We did that approach in one of projects. So instead doing something like this:&lt;/P&gt;&lt;LI-CODE lang="python"&gt;SELECT * FROM large_table&lt;/LI-CODE&gt;&lt;P&gt;You can do that:&lt;/P&gt;&lt;LI-CODE lang="python"&gt;SELECT *
FROM table
WHERE id BETWEEN 0 AND 1,000,000&lt;/LI-CODE&gt;&lt;P&gt;With that approach you can even stop and resume loading process if you implement it correctly. Also, the best time to load data initially from database is at night where there is limited number of active users/queries.&lt;/P&gt;</description>
      <pubDate>Tue, 28 Apr 2026 10:52:48 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/best-practices-for-initial-large-scale-ingestion-from-on/m-p/155667#M54291</guid>
      <dc:creator>szymon_dybczak</dc:creator>
      <dc:date>2026-04-28T10:52:48Z</dc:date>
    </item>
    <item>
      <title>Re: Best practices for initial large-scale ingestion from on‑premises Oracle to Databricks</title>
      <link>https://community.databricks.com/t5/data-engineering/best-practices-for-initial-large-scale-ingestion-from-on/m-p/155676#M54294</link>
      <description>&lt;P&gt;Thank you for your suggestion.&lt;/P&gt;&lt;P&gt;Unfortunately, we do not have a unique incremental ID. Our data is identified by multiple tag_ids, with one record per tag every minute, based on a timestamp.&lt;/P&gt;&lt;P&gt;We initially considered using spark.readStream to load historical data month by month during low-usage periods (e.g. weekends), but we are not certain whether changing the ingestion frequency afterwards to continuous would be compatible with checkpointing and state tracking.&lt;/P&gt;</description>
      <pubDate>Tue, 28 Apr 2026 11:22:10 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/best-practices-for-initial-large-scale-ingestion-from-on/m-p/155676#M54294</guid>
      <dc:creator>faruko</dc:creator>
      <dc:date>2026-04-28T11:22:10Z</dc:date>
    </item>
    <item>
      <title>Re: Best practices for initial large-scale ingestion from on‑premises Oracle to Databricks</title>
      <link>https://community.databricks.com/t5/data-engineering/best-practices-for-initial-large-scale-ingestion-from-on/m-p/155733#M54301</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/226546"&gt;@faruko&lt;/a&gt;&amp;nbsp; !&lt;/P&gt;&lt;P&gt;My idea is to treat the initial load as a controlled batch backfill&amp;nbsp;then start the CDC pipeline afterwards from a clear cutoff point.&lt;/P&gt;&lt;P&gt;You define a fixed cutoff timestamp or Oracle SCN for the initial snapshot and later load history in small time windows for example month by month or week by week or day by day depending on volume:&lt;/P&gt;&lt;PRE&gt;WHERE event_timestamp &amp;gt;= :start_ts
  AND event_timestamp &amp;lt;  :end_ts&lt;/PRE&gt;&lt;P&gt;and since you have many tag_ids you&amp;nbsp;split each time window further by tag buckets for example:&lt;/P&gt;&lt;PRE&gt;WHERE event_timestamp &amp;gt;= :start_ts
  AND event_timestamp &amp;lt;  :end_ts
  AND ORA_HASH(tag_id, 15) = :bucket&lt;/PRE&gt;&lt;P&gt;This gives you controlled parallelism without needing a unique numeric ID.&lt;/P&gt;&lt;P&gt;Then store the progress in a control table for example table_name, start_ts, end_ts, bucket, status, row_count, load_time this way&amp;nbsp;the load restartable if one chunk fails.&lt;/P&gt;&lt;P&gt;And later you write into a bronze delta table with idempotent key such as (tag_id, event_timestamp) or (tag_id, event_timestamp, source_id)&lt;/P&gt;&lt;P&gt;Once you finishthe historical backfill up to the cutoff timestamp or SCN,you can start the incremental ingestion from that same point.&lt;/P&gt;&lt;P&gt;I would not try to use the same streaming checkpoint for monthly historical loading and then later change it to continuous ingestion. I would keep the initial backfill and the ongoing ingestion as 2 separate pipelines.&lt;/P&gt;&lt;P&gt;You can find in the doc&amp;nbsp; the idea of doing initial hydration first then switching to triggered or continuous CDC processing afterwards.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="https://docs.azure.cn/en-us/databricks/ldp/what-is-change-data-capture" target="_blank"&gt;https://docs.azure.cn/en-us/databricks/ldp/what-is-change-data-capture&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 28 Apr 2026 18:33:39 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/best-practices-for-initial-large-scale-ingestion-from-on/m-p/155733#M54301</guid>
      <dc:creator>amirabedhiafi</dc:creator>
      <dc:date>2026-04-28T18:33:39Z</dc:date>
    </item>
    <item>
      <title>Re: Best practices for initial large-scale ingestion from on‑premises Oracle to Databricks</title>
      <link>https://community.databricks.com/t5/data-engineering/best-practices-for-initial-large-scale-ingestion-from-on/m-p/155764#M54308</link>
      <description>&lt;P&gt;Hi &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/226887"&gt;@amirabedhiafi&lt;/a&gt;,&lt;/P&gt;&lt;P&gt;Thank you for your answer, I found it very helpful. It actually gave me an idea.&lt;/P&gt;&lt;P&gt;What if I use a database backup for the initial load instead of performing the first backfill step? This way, I could ingest all the historical data at once, and then store the last insert timestamp in the bronze Delta table to use it as a starting point for the continuous ingestion.&lt;/P&gt;&lt;P&gt;Do you think this approach would be reliable, or could it introduce consistency issues compared to using a defined cutoff point?&lt;/P&gt;</description>
      <pubDate>Wed, 29 Apr 2026 08:02:34 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/best-practices-for-initial-large-scale-ingestion-from-on/m-p/155764#M54308</guid>
      <dc:creator>faruko</dc:creator>
      <dc:date>2026-04-29T08:02:34Z</dc:date>
    </item>
    <item>
      <title>Re: Best practices for initial large-scale ingestion from on‑premises Oracle to Databricks</title>
      <link>https://community.databricks.com/t5/data-engineering/best-practices-for-initial-large-scale-ingestion-from-on/m-p/155768#M54309</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/226546"&gt;@faruko&lt;/a&gt;&amp;nbsp;!&lt;/P&gt;&lt;P&gt;Yes why not &lt;span class="lia-unicode-emoji" title=":grinning_face_with_smiling_eyes:"&gt;😄&lt;/span&gt;&amp;nbsp;but only if the backup or export has a clear consistent cutoff point and the continuous ingestion starts from that exact point&amp;nbsp;ideally based on an Oracle SCN not just whatever was in the backup. I would not rely only on the maximum insert timestamp found in the bronze tablz because timestamps can miss rows arriving late (same for updates, deletes, clock differences or rows committed after the timestamp was generated).&lt;/P&gt;&lt;P&gt;For your case, where the natural key seems to be something like (tag_id, event_timestamp), I would use that as the merge key or add another source side technical key if duplicates are possible.&lt;/P&gt;&lt;P&gt;Oracle data pump exports are only guaranteed to be consistent across all exported tables at the same point in time when you use options like FLASHBACK_SCN or FLASHBACK_TIME (it is recommendation from Oracle)&lt;/P&gt;&lt;P&gt;For the DBKS side, you can keep the same logic and don't forget that&amp;nbsp;native DBKS lakeflow connect database connectors currently list MySQL, PostgreSQL and SQL Server but not Oracle so for Oracle CDC you may need Oracle GoldenGate or a custom CDC pipeline depending on what your company allows.&lt;/P&gt;</description>
      <pubDate>Wed, 29 Apr 2026 09:17:56 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/best-practices-for-initial-large-scale-ingestion-from-on/m-p/155768#M54309</guid>
      <dc:creator>amirabedhiafi</dc:creator>
      <dc:date>2026-04-29T09:17:56Z</dc:date>
    </item>
  </channel>
</rss>

