<?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 Delta Live Tables: How to determine what batch you have processed up to? in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/delta-live-tables-how-to-determine-what-batch-you-have-processed/m-p/92037#M38332</link>
    <description>&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;I am trying to use delta live tables in a production setting but I am having an issue in ensuring that I will be able to confirm the status of the data that the various tables have processed in the pipeline.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;In the most basic case let me imagine that I have 3 tables that are linked to one another in a chain.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;table_1 -&amp;gt; table_2 -&amp;gt; table_3&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;table_1 will be an autoloader instance pointing at blob storage.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;table_2 and 3 will do some subsequent transformations.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;The files are dropped in to the blob storage location in batched folders with the following folder structure:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;├── 2024/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ ├── Aug/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ ├── 19/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ ├── 07:05:40/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ ├── table_1_name/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_1_name_other_text_0_0_0.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_1_name_other_text_0_0_1.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ └── table_1_name_other_text_0_0_2.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ ├── table_2_name/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_2_name_other_text_0_0_0.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_2_name_other_text_0_0_1.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ └── table_2_name_other_text_0_0_2.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ └── ...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ ├── 10:07:22/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ ├── table_1_name/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_1_name_other_text_0_0_0.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_1_name_other_text_0_0_1.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ └── table_1_name_other_text_0_0_2.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ ├── table_2_name/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_2_name_other_text_0_0_0.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_2_name_other_text_0_0_1.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ └── table_2_name_other_text_0_0_2.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ └── ...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ └── ...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ └── ...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ └── ...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;└── ...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;The DLT pipeline will be triggered once a new batch of data has been loaded into the blob storage location.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;I would like to be able to trace the current status of the delta live tables pipeline to know that all of the tables have processsed all of the batches of data and are thus up to date.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;I have looked at the cloud_files_state for the autoloader instance and this allows me to easily determine which batches are available and have been discovered by autoloader.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;In theory I could populate a table with a query like:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/97035"&gt;@Dlt&lt;/a&gt;.table&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;def processed_batches():&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; return spark.sql("""SELECT DISTINCT folder &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; FROM (&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; SELECT regexp_extract(path, '^(.+)/', 1) AS folder &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; FROM cloud_files_state(TABLE(sandbox.trial.table_1))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;)""")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;but this doesn't work complaining that the table doesn't exist. I assume this is because it is looking to try and read this location before the DLT pipeline has made the table.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;If I wasn't using DLT I would write some functions to create a state management table: something like...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;## table_1_processed_batches:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;runID source &amp;nbsp;BatchID added_timestamp&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;uuid &amp;nbsp;external &amp;nbsp;20240101010101 &amp;nbsp;20240927010101&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;and then after a downstream process has run it would write out its own table&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;## table_2_processed_batches:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;runID source &amp;nbsp;BatchID added_timestamp&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;uuid &amp;nbsp;table_1 20240101010101 &amp;nbsp;20240927010101&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;I feel like this should be something that I can get from the built in tables in DLT but have not found a way of achieving this thus far. Any help would be greatly appreciated.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
    <pubDate>Fri, 27 Sep 2024 14:12:42 GMT</pubDate>
    <dc:creator>ChrisLawford_n1</dc:creator>
    <dc:date>2024-09-27T14:12:42Z</dc:date>
    <item>
      <title>Delta Live Tables: How to determine what batch you have processed up to?</title>
      <link>https://community.databricks.com/t5/data-engineering/delta-live-tables-how-to-determine-what-batch-you-have-processed/m-p/92037#M38332</link>
      <description>&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;I am trying to use delta live tables in a production setting but I am having an issue in ensuring that I will be able to confirm the status of the data that the various tables have processed in the pipeline.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;In the most basic case let me imagine that I have 3 tables that are linked to one another in a chain.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;table_1 -&amp;gt; table_2 -&amp;gt; table_3&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;table_1 will be an autoloader instance pointing at blob storage.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;table_2 and 3 will do some subsequent transformations.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;The files are dropped in to the blob storage location in batched folders with the following folder structure:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;├── 2024/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ ├── Aug/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ ├── 19/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ ├── 07:05:40/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ ├── table_1_name/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_1_name_other_text_0_0_0.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_1_name_other_text_0_0_1.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ └── table_1_name_other_text_0_0_2.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ ├── table_2_name/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_2_name_other_text_0_0_0.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_2_name_other_text_0_0_1.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ └── table_2_name_other_text_0_0_2.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ └── ...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ ├── 10:07:22/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ ├── table_1_name/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_1_name_other_text_0_0_0.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_1_name_other_text_0_0_1.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ └── table_1_name_other_text_0_0_2.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ ├── table_2_name/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_2_name_other_text_0_0_0.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ ├── table_2_name_other_text_0_0_1.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ │ └── table_2_name_other_text_0_0_2.snappy.parquet&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ │ └── ...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ │ └── ...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ │ └── ...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;│ └── ...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;└── ...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;The DLT pipeline will be triggered once a new batch of data has been loaded into the blob storage location.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;I would like to be able to trace the current status of the delta live tables pipeline to know that all of the tables have processsed all of the batches of data and are thus up to date.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;I have looked at the cloud_files_state for the autoloader instance and this allows me to easily determine which batches are available and have been discovered by autoloader.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;In theory I could populate a table with a query like:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/97035"&gt;@Dlt&lt;/a&gt;.table&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;def processed_batches():&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; return spark.sql("""SELECT DISTINCT folder &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; FROM (&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; SELECT regexp_extract(path, '^(.+)/', 1) AS folder &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; FROM cloud_files_state(TABLE(sandbox.trial.table_1))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;)""")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;but this doesn't work complaining that the table doesn't exist. I assume this is because it is looking to try and read this location before the DLT pipeline has made the table.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;If I wasn't using DLT I would write some functions to create a state management table: something like...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;## table_1_processed_batches:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;runID source &amp;nbsp;BatchID added_timestamp&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;uuid &amp;nbsp;external &amp;nbsp;20240101010101 &amp;nbsp;20240927010101&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;and then after a downstream process has run it would write out its own table&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;## table_2_processed_batches:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;runID source &amp;nbsp;BatchID added_timestamp&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;uuid &amp;nbsp;table_1 20240101010101 &amp;nbsp;20240927010101&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;I feel like this should be something that I can get from the built in tables in DLT but have not found a way of achieving this thus far. Any help would be greatly appreciated.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Fri, 27 Sep 2024 14:12:42 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/delta-live-tables-how-to-determine-what-batch-you-have-processed/m-p/92037#M38332</guid>
      <dc:creator>ChrisLawford_n1</dc:creator>
      <dc:date>2024-09-27T14:12:42Z</dc:date>
    </item>
    <item>
      <title>Re: Delta Live Tables: How to determine what batch you have processed up to?</title>
      <link>https://community.databricks.com/t5/data-engineering/delta-live-tables-how-to-determine-what-batch-you-have-processed/m-p/92042#M38334</link>
      <description>&lt;P&gt;Hi &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/121074"&gt;@ChrisLawford_n1&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;Maybe instead of passing table name to cloud_file_state function, pass checkpoint location of DLT pipeline. In your function you can add some condition to check if that location exists.&lt;/P&gt;&lt;P&gt;To find checkpoint location for DLT pipeline refer to Jacek Laskowski answer on stack overflow:&lt;/P&gt;&lt;P&gt;&lt;A href="https://stackoverflow.com/questions/75692260/how-to-get-the-checkpoint-location-of-delta-live-table" target="_blank"&gt;https://stackoverflow.com/questions/75692260/how-to-get-the-checkpoint-location-of-delta-live-table&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 27 Sep 2024 15:03:03 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/delta-live-tables-how-to-determine-what-batch-you-have-processed/m-p/92042#M38334</guid>
      <dc:creator>szymon_dybczak</dc:creator>
      <dc:date>2024-09-27T15:03:03Z</dc:date>
    </item>
  </channel>
</rss>

