<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Adi Polak</title>
    <description>The latest articles on Forem by Adi Polak (@adipolak).</description>
    <link>https://forem.com/adipolak</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F121127%2F0af4a894-56eb-4e81-890a-12e5ba022027.jpg</url>
      <title>Forem: Adi Polak</title>
      <link>https://forem.com/adipolak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/adipolak"/>
    <language>en</language>
    <item>
      <title>Delta Lake essential Fundamentals: Part 2 - The DeltaLog</title>
      <dc:creator>Adi Polak</dc:creator>
      <pubDate>Mon, 08 Mar 2021 07:54:50 +0000</pubDate>
      <link>https://forem.com/adipolak/delta-lake-essential-fundamentals-part-2-the-deltalog-5b7h</link>
      <guid>https://forem.com/adipolak/delta-lake-essential-fundamentals-part-2-the-deltalog-5b7h</guid>
      <description>&lt;p&gt;&lt;em&gt;this blog post was originally posted on &lt;a href="https://blog.adipolak.com/post/delta-lake-essential-fundamentals-the-deltalog/"&gt;blog.adipolak.com&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In the previous part, you learned what &lt;a href="https://blog.adipolak.com/post/delta-lake-essential-fundamentals"&gt;ACID transactions&lt;/a&gt; are.&lt;br&gt;&lt;br&gt;
In this part, you will understand how Delta Transaction Log, named DeltaLog, is achieving ACID.&lt;/p&gt;
&lt;h2&gt;
  
  
  Transaction Log
&lt;/h2&gt;

&lt;p&gt;A transaction log is a history of actions executed by a (TaDa 💡) database management system with the goal to guarantee &lt;a href="https://blog.adipolak.com/post/delta-lake-essential-fundamentals/"&gt;ACID properties&lt;/a&gt; over a crash.&lt;/p&gt;
&lt;h2&gt;
  
  
  DeltaLake transaction log - DetlaLog
&lt;/h2&gt;

&lt;p&gt;DeltaLog is a transaction log directory that holds an &lt;strong&gt;ordered&lt;/strong&gt; record of every transaction committed on a Delta Lake table since it was created.&lt;br&gt;
The goal of DeltaLog is to be the &lt;strong&gt;single&lt;/strong&gt; source of truth for readers who read from the same table at the same time. That means, parallel readers read the &lt;strong&gt;exact&lt;/strong&gt; same data.&lt;br&gt;
This is achieved by tracking all the changes that users do: read, delete, update, etc. in the DeltaLog.&lt;/p&gt;

&lt;p&gt;DeltaLog can also contain statistics on the data; depending on the type of the data/field/column, each column can have min/max values. Having this extra metadata can help with faster querying. DeltaTable read mechanism uses a simplified &lt;a href="https://medium.com/microsoftazure/data-at-scale-learn-how-predicate-pushdown-will-save-you-money-7063b80878d7"&gt;push down predict&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here is a simplification of DeltaLog on the file systems from Databricks site: &lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mCziKBNI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.adipolak.com/images/Detla/deltalake-deltalog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mCziKBNI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.adipolak.com/images/Detla/deltalake-deltalog.png" alt="drawing" width="800" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The DeltaLog itself is a folder that consists of multiple JSON files. When it reaches 10 files, DeltaTable does a checkpoint and compaction operations (we will dive into it in the next chapter).&lt;/p&gt;

&lt;p&gt;Here is an example of a DeltaLog JSON file from the code source test resources, each entry in the file is on JSON:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"remove"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"part-00001-f1cb1cf9-7a73-439c-b0ea-dcba5c2280a6-c000.snappy.parquet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"dataChange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"remove"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"part-00000-f4aeebd0-a689-4e1b-bc7a-bbb0ec59dce5-c000.snappy.parquet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"dataChange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There was a total of two commits captured in this file:&lt;br&gt;
&lt;em&gt;remove&lt;/em&gt; -it can be a delete operation on a whole column or only specific values in it. In this operation the metadata field &lt;em&gt;dataChange&lt;/em&gt; is set to true.&lt;/p&gt;

&lt;p&gt;Here is a more complex JSON file example, each entry in the file is on JSON:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"metaData"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"2edf2c02-bb63-44e9-a84c-517fad0db296"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"provider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"parquet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{}},&lt;/span&gt;&lt;span class="nl"&gt;"schemaString"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"{&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;struct&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;fields&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:[{&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;integer&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;nullable&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:true,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;metadata&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:{}},{&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;value&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;nullable&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:true,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;metadata&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:{}}]}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"partitionColumns"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"configuration"&lt;/span&gt;&lt;span class="p"&gt;:{}}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"remove"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"part-00001-6d252218-2632-416e-9e46-f32316ec314a-c000.snappy.parquet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"dataChange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"remove"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"part-00000-348d7f43-38f6-4778-88c7-45f379471c49-c000.snappy.parquet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"dataChange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"add"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"id=5/part-00000-f1e0b560-ca00-409e-a274-f1ab264bc412.c000.snappy.parquet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"partitionValues"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"5"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;362&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"modificationTime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1501109076000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"dataChange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"add"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"id=6/part-00000-adb59f54-6b8f-4bfd-9915-ae26bd0f0e2c.c000.snappy.parquet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"partitionValues"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"6"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;362&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"modificationTime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1501109076000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"dataChange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"add"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"id=4/part-00001-36c738bf-7836-479b-9cc1-7a4934207856.c000.snappy.parquet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"partitionValues"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"4"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;362&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"modificationTime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1501109076000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"dataChange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, there is the &lt;em&gt;metadata&lt;/em&gt; object entry - it represents a change in the table columns either an update to the table schema or that a new table was created.&lt;br&gt;
Later we see two &lt;em&gt;remove&lt;/em&gt; operations, followed by three &lt;em&gt;add&lt;/em&gt; operations. These operation objects can have a &lt;em&gt;stat&lt;/em&gt; field, which contains statistical information, such as the number of records, minValues, maxValues, and more.&lt;/p&gt;

&lt;p&gt;These JSON files might also contain operation objects with fields such as - "STREAMING UPDATE", "NOTEBOOK"  if the operation took place from a notebook, isolationLevel, etc.&lt;/p&gt;

&lt;p&gt;This information is valuable for managing the table and avoiding redundant full scan on the storage.&lt;/p&gt;

&lt;p&gt;To simplify the connection between DeltaTable and DeltaLog, it's easier to think about DeltaTable as a direct result of a set of actions audited by the DeltaLog.&lt;/p&gt;
&lt;h2&gt;
  
  
  DeltaLog and Atomicity
&lt;/h2&gt;

&lt;p&gt;From &lt;a href="https://blog.adipolak.com/post/delta-lake-essential-fundamentals"&gt;part one&lt;/a&gt;, you already know that atomicity means that a transaction, either happened or not. The DeltaLog itself consists of atomic operations; each line in the log (like the ones you saw above) represents an action, which is an atomic unit; These are called commits.&lt;br&gt;
The transactions that took place on the data can be broken into multiple components in which each one individually represents a commit in the DeltaLog. These breaking complex operations into small transactions help with ensuring atomicity.&lt;/p&gt;
&lt;h2&gt;
  
  
  DeltaLog and Isolation
&lt;/h2&gt;

&lt;p&gt;Operations such as Update, Delete, Add can harm isolation; Hence, since we want to guarantee isolation with DeltaTable, readers only get access to the table snapshot. This guarantees all parallel readers read the exact data. For handling deletion operations, Delta postpones the actual delete operation on the files; it first tags the files as deleted and later, remove them when considered safe (similar to Cassandra, and ElasticSearch delete operations with a tombstone).&lt;/p&gt;

&lt;p&gt;In DeltaLake 0.8.1 source code, there is a comment saying that it's recommended to have the delete retention set to at least 2 weeks or longer than a duration of a job. &lt;br&gt;&lt;br&gt;
&lt;em&gt;Note:&lt;/em&gt; This will impact streaming workload as well, because there will be a need to delete the actual files at some point, which might result in blocking the stream.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cUb-XFm8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.adipolak.com/images/Detla/delta-tombston-retention.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cUb-XFm8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.adipolak.com/images/Detla/delta-tombston-retention.png" alt="drawing" width="800" height="238"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  DeltaLog and Consistency
&lt;/h2&gt;

&lt;p&gt;Delta Lake solves the problem of consistency by solving conflicts with an optimistic concurrency algorithm.&lt;br&gt;
The class in charge of this algorithm is the OptimisticTransaction class. It achieves it by using &lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html"&gt;Java 8 ReentrantLock&lt;/a&gt; that is controlled from a DeltaLog instance. &lt;br&gt;&lt;br&gt;
Here is the code snippet: &lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JcsRXOmQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.adipolak.com/images/Detla/delta-log-optimistic-concurrency-algo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JcsRXOmQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.adipolak.com/images/Detla/delta-log-optimistic-concurrency-algo.png" alt="drawing" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A DeltaTable instance actively uses the ReentrantLock in the OptimisticTransaction under the &lt;code&gt;doCommitRetryIteratively&lt;/code&gt; function.&lt;br&gt;
The optimistic approach was chosen here because in the big data world there is a tendency to add more data than to update existing records.&lt;br&gt;
It's rare to find and update a specific record, it is usually done when there was some data corruption on necessary data.&lt;/p&gt;

&lt;p&gt;Here is the code snippet for the optimistic algorithm:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WN4pH_X5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.adipolak.com/images/Detla/delta-log-OptimisticTransaction.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WN4pH_X5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.adipolak.com/images/Detla/delta-log-OptimisticTransaction.png" alt="drawing" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice that in line 572, the program records the attempted version as the &lt;code&gt;commitVersion&lt;/code&gt; instance which is of type &lt;code&gt;var&lt;/code&gt;.&lt;br&gt;
&lt;code&gt;var&lt;/code&gt; in Scala represents a mutable object instance, which means we should expect its value to change.&lt;/p&gt;

&lt;p&gt;In line 575, we start the algorithm:&lt;br&gt;
 it starts the &lt;code&gt;while(true)&lt;/code&gt; loop and maintains an &lt;code&gt;attemptNumber&lt;/code&gt; counter; if it's &lt;code&gt;==0&lt;/code&gt;, it will try to commit; if it fails here, that means that a file with this &lt;code&gt;commitVersion&lt;/code&gt; was already written/committed into the table and it will throw an exception. That exception is being caught in lines 592+593. From there, with each failure, the algorithm is increasing the attemptNumber by 1.&lt;br&gt;
After the first failure, the program won't go into the first if statement on line 577; it will go straights into the &lt;code&gt;else if&lt;/code&gt; on line 579.&lt;br&gt;
If the program reached the state where &lt;code&gt;attemptNumber&lt;/code&gt; is bigger than the maximum allowed/configured, it will throw a &lt;code&gt;DeltaErrors.maxCommitRetriesExceededException&lt;/code&gt; exception.&lt;br&gt;
maxCommitRetriesExceededException exception will provide information about the commit version, the first commit version attempt, the number of attempted commits, and total time spent attempting this commit in ms.&lt;br&gt;
Otherwise, it will try to record this update with checkForConflict functionality in line 588.&lt;br&gt;
Multiple scenarios can bring us to this state.&lt;/p&gt;

&lt;p&gt;High-level pseudo-code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;while(tryCommit)
    if first attempt:
        do commit
    else if: attempt number &amp;gt; max retries
            throw an exception - exit loop
        else:
            record retry operation
            try fixing logical conflicts - return valid commit version or throw an exception
            do commit
    retry on exceptions and attempt version +1
    if no exception - end loop
end     
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To support the users, DeltaLake introduces a set of conflict exceptions that provide more information about the data and the conflicts:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bLgba9VW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.adipolak.com/images/Detla/delte-concurrent-exceptions.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bLgba9VW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.adipolak.com/images/Detla/delte-concurrent-exceptions.png" alt="drawing" width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's look at some of the conflict scenarios.&lt;/p&gt;

&lt;h3&gt;
  
  
  Two Writers:
&lt;/h3&gt;

&lt;p&gt;This is the case of two writers who appends data to the same table simultaneously, without reading anything. In this scenario, one writer will commit, and the second writer will read the first one's updates before adding their own updates. Suppose it was only an append operation, like a counter which both are incrementing. In that case, there is no need to redo all computations, and it will automatically commit; if that's not the case, writer number two will need to redo the computation given the new information from writer one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Delete and Read:
&lt;/h3&gt;

&lt;p&gt;In a more complex scenario like this one, there is no automated solution. For concurrent Delete-Read, there is a dedicated &lt;code&gt;ConcurentDeleteReadException&lt;/code&gt;.&lt;br&gt;
That means that if there is a request to delete a file that at the same time is being used for a read, the program throws an exception.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H6iQkt-U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.adipolak.com/images/Detla/ConcurrentDeleteReadException.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H6iQkt-U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.adipolak.com/images/Detla/ConcurrentDeleteReadException.png" alt="drawing" width="800" height="162"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Delete and Delete:
&lt;/h3&gt;

&lt;p&gt;When two operations delete the same file, it might be due to a compaction mechanism or other operation, here too an exception will occur.&lt;/p&gt;
&lt;h2&gt;
  
  
  DeltaLog and Durability
&lt;/h2&gt;

&lt;p&gt;Since all transactions made on a DeltaTable are being stored directly to the disk/file system, durability is a given. All commits are being &lt;em&gt;persisted&lt;/em&gt; to disk.  In case of a system failure, they can be restored from the disk.&lt;br&gt;
(Unless there is a true disaster like fire etc and damage to the actual disks holding the information).&lt;/p&gt;



&lt;p&gt;For exploring and learning about Delta, I did a deep dive into the code source itself. If you are interested in joining me, I captured it through videos, let me know if that is useful for you.&lt;/p&gt;
&lt;h1&gt;
  
  
  What's next?
&lt;/h1&gt;

&lt;p&gt;Next, we will see more examples, scenarios, and use cases for DeltaLake! We will learn about the compaction mechanism, schema enforcement, and how it can enforce exactly once operation.&lt;/p&gt;

&lt;p&gt;As always, I would love to get your comments and feedback on &lt;a href="https://twitter.com/intent/follow?original_referer=http%3A%2F%2Flocalhost%3A1313%2F&amp;amp;ref_src=twsrc%5Etfw&amp;amp;region=follow_link&amp;amp;screen_name=AdiPolak&amp;amp;tw_p=followbutton"&gt;Adi Polak&lt;/a&gt; 🐦.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/i24ZA6mmvDI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;If you would like to get monthly updates, consider &lt;a href="https://sub.adipolak.com/subscribe"&gt;subscribing&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Delta Lake essential Fundamentals: Part 1 - ACID</title>
      <dc:creator>Adi Polak</dc:creator>
      <pubDate>Mon, 22 Feb 2021 07:49:53 +0000</pubDate>
      <link>https://forem.com/adipolak/delta-lake-essential-fundamentals-part-1-acid-1be0</link>
      <guid>https://forem.com/adipolak/delta-lake-essential-fundamentals-part-1-acid-1be0</guid>
      <description>&lt;p&gt;Multi-part series that will take you from beginner to expert in Delta Lake.&lt;/p&gt;

&lt;p&gt;🎉 Welcome to the first part of Delta Lake essential fundamentals! 🎉&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Delta Lake ?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Delta Lake is an open-source storage layer that brings ACID
transactions to Apache Spark™ and big data workloads. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;DeltaLake open source consists of 3 projects:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://github.com/delta-io/delta"&gt;detla&lt;/a&gt; - Delta Lake core, written in Scala.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/delta-io/delta-rs"&gt;delta-rs&lt;/a&gt; - Rust library for binding with Python and Ruby.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/delta-io/connectors"&gt;connectors&lt;/a&gt; - Connectors to popular big data engines outside Spark, written mostly in Scala.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Delta provides us the ability to &lt;u&gt;"travel back in time"&lt;/u&gt; into previous versions of our data, &lt;u&gt;scalable metadata&lt;/u&gt; - that means if we have a large set of raw data stored in a data lake, having metadata provides us with the flexibility needed for analytics and exploration of the data. It also provides a mechanism to &lt;u&gt;unify streaming and batch data&lt;/u&gt;.&lt;br&gt;&lt;br&gt;
&lt;u&gt;Schema enforcement&lt;/u&gt; - handel schema variations to prevent insertion of bad/non-compliant records, and &lt;u&gt;ACID transactions&lt;/u&gt; to ensure that the users/readers never see inconsistent data.&lt;/p&gt;



&lt;p&gt;It's important to remember that Delta Lake is not a DataBase (DB), yes, just like Apache Kafka is not a DB.&lt;br&gt;
It might 'feel' like one due to the support of ACID transactions, schema enforcements, etc.&lt;br&gt;
But it's not.&lt;/p&gt;



&lt;p&gt;Part 1 focuses on ACID Fundamentals:&lt;/p&gt;

&lt;h2&gt;
  
  
  ACID Fundamentals in Delta Lake:
&lt;/h2&gt;

&lt;p&gt;Let's break it down to understand what each means and how it translates in Delta:&lt;/p&gt;

&lt;h4&gt;
  
  
  Atomicity
&lt;/h4&gt;

&lt;p&gt;The transaction succeeded or not, all changes, updates, deletes, and other operations either happened as a single unit or not. Think Binary, there is only yes or no - 1 or 0. In Delta, it means that a commit of a transaction happened, and a new transaction log file was written. Transaction log file name example - &lt;code&gt;000001.json&lt;/code&gt;, the number represents the commit number.&lt;/p&gt;

&lt;h4&gt;
  
  
  Consistency
&lt;/h4&gt;

&lt;p&gt;A transaction can only bring the DB from one state to another; data is valid according to all the rules, constraints, triggers, etc. The transaction itself can be consistent but incorrect. To achieve consistency, DeltaLake relay on the commit timestamp that comes from the storage system modification timestamps. If you are using cloud provider storage such as &lt;a href="https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction?WT.mc_id=delta-13569-adpolak"&gt;Azure blob&lt;/a&gt; or AWS S3, the timestamp will come from the storage server.&lt;/p&gt;

&lt;h4&gt;
  
  
  Isolation
&lt;/h4&gt;

&lt;p&gt;Transactions taking place concurrently result in an equals state as if transactions would have been executed sequentially. This is the primary goal of Concurrency control strategies. In Delta, after 10 commits, there is a merging mechanism that marges these commits into a checkpoint file. The checkpoint file has a timestamp. 1 second is being added to the modification timestamp to avoid flakiness. This is how it looks in the code base of Delta: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VyFkynTU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.adipolak.com/images/delta-lake-avoid-flakiness-commit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VyFkynTU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.adipolak.com/images/delta-lake-avoid-flakiness-commit.png" alt="drawing" width="800" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Durability
&lt;/h4&gt;

&lt;p&gt;Once a transaction has been committed, it will remain committed even if the system fails. Think about writing to disk vs. writing to Ram memory. A machine can fail, but if the commit data was written to disk, it could be restored. Delta writes all the commits in a JSON file directly to the storage; it is not left floating in RAM space for too long.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;After understanding ACID basics and a bit about the Transaction Log (aka DeltaLog), you are ready to take the next chapter! &lt;br&gt; In Diving deeper into to DeltaLog, how it looks on disk, and the open-source code you need to be familiar with. &lt;/p&gt;

&lt;p&gt;More post from the series:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://blog.adipolak.com/post/delta-lake-essential-fundamentals-the-deltalog/"&gt;Delta Lake essential Fundamentals: Part 2 - The DeltaLog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.adipolak.com/post/delta-lake-essential-fundamentals-part-3/"&gt;Delta Lake essential Fundamentals: Part 3 - Compaction and Checkpoint&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;As always, I would love to get your comments and feedback on &lt;a href="https://twitter.com/intent/follow?original_referer=http%3A%2F%2Flocalhost%3A1313%2F&amp;amp;ref_src=twsrc%5Etfw&amp;amp;region=follow_link&amp;amp;screen_name=AdiPolak&amp;amp;tw_p=followbutton"&gt;Adi Polak&lt;/a&gt; 🐦.&lt;/p&gt;

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Tech Exceptions Show: Accelerating Data Engineering with Azure</title>
      <dc:creator>Adi Polak</dc:creator>
      <pubDate>Tue, 02 Feb 2021 07:49:13 +0000</pubDate>
      <link>https://forem.com/azure/tech-exceptions-show-accelerating-data-engineering-with-azure-fe5</link>
      <guid>https://forem.com/azure/tech-exceptions-show-accelerating-data-engineering-with-azure-fe5</guid>
      <description>&lt;p&gt;Data Engineers is the new hotness, many developers have been already working with distributed data technologies, such as &lt;a href="https://docs.microsoft.com/en-us/azure/hdinsight/kafka/apache-kafka-introduction?WT.mc_id=techexceptions-10917-adpolak"&gt;Apache Kafka&lt;/a&gt;, &lt;a href="https://docs.microsoft.com/en-us/azure/hdinsight/spark/apache-spark-overview?WT.mc_id=techexceptions-10917-adpolak"&gt;Apache Spark&lt;/a&gt;, &lt;a href="https://docs.microsoft.com/en-us/azure/cosmos-db/cassandra-introduction?WT.mc_id=techexceptions-10917-adpolak"&gt;Apache Cassandra&lt;/a&gt; as backend developers, building infrastructure for analytics and enabling a healthy flow of data in the organization. &lt;/p&gt;

&lt;p&gt;The reason we see more media coverage for that topic is the maturity of Data Science and Machine Learning. ML used to be most hyped. Following the hype, companies realized that they need to enable smarter products, So what did they do? they started hiring Data Scientists, although, they didn't have the infra to support them.&lt;/p&gt;

&lt;p&gt;Due to that, many companies are now focused on building in-house ML platforms to enable their Data Scientists to get more value out of the data.&lt;br&gt;
Yes, you read correctly, more value out of the data.&lt;br&gt;
Let's take a look at the Data Science needs pyramid: &lt;/p&gt;

&lt;p&gt;Data science layers towards AI by Monica Rogati: &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---MtptPW5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/9znpas8a0kplmw58pvp5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---MtptPW5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/9znpas8a0kplmw58pvp5.png" alt="Alt Text" width="700" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see the clear need for Data Infrastructure Engineers and Data Engineers, they are at the base of the pyramid. This means, without them, data scientists won't be able to do their job efficiently. Think about it as similar to Maslow's Human needs pyramid. At the base, there are the physical needs, without them, we won't exist.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ci2Jp0bH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/z5qhbb6wsa1c8vsam4m2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ci2Jp0bH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/z5qhbb6wsa1c8vsam4m2.jpg" alt="Alt Text" width="800" height="595"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;you are probably curious, why do I share this with you, well I had a wonderful conversation with Sheel Choksi, Solution Architect at &lt;a href="//ascend.io"&gt;Ascend&lt;/a&gt; and we talked exactly about that. How we can help Data Engineers do more and accelerate development and ML in organizations. &lt;a href="https://aka.ms/AAb08x8"&gt;Watch Now&lt;/a&gt; 📺! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://aka.ms/AAb08x8"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bpk-gy7P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/8arn7bljqccx7q5wjs7p.png" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dataengineering</category>
      <category>cloudskills</category>
      <category>techtalks</category>
      <category>startup</category>
    </item>
    <item>
      <title>Tech Exceptions new Episode - The Importance of Testing data Applications</title>
      <dc:creator>Adi Polak</dc:creator>
      <pubDate>Tue, 26 Jan 2021 14:02:37 +0000</pubDate>
      <link>https://forem.com/azure/tech-exceptions-new-episode-the-importance-of-testing-data-applications-3e7h</link>
      <guid>https://forem.com/azure/tech-exceptions-new-episode-the-importance-of-testing-data-applications-3e7h</guid>
      <description>&lt;p&gt;It was a true pleasure to have Angie Jones on the Microsoft Tech Exceptions show.&lt;/p&gt;

&lt;p&gt;Angie shared the Tech Univesity she built, the importance of software testing too, the role of a QA, and how you can leverage AI and Data to help you with testing.&lt;br&gt;
And last but not least, how you can automate this whole process and make it an integral part of your CI/CD process using &lt;a href="https://docs.microsoft.com/en-us/azure/developer/github/github-actions?WT.mc_id=techexceptions-10917-adpolak"&gt;GitHub Actions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A GitHub actions workflow helps you automate the build, test, package, release or deployment of any project on GitHub using a dedicated &lt;em&gt;workflow&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Each &lt;em&gt;workflow&lt;/em&gt; is made up o individual actions that run after a specific event, trigger, for example, git commit or a pull request. Each action is a packaged script that is part of the whole automated software development tasks.&lt;/p&gt;

&lt;p&gt;Many Microsoft services have support for GitHub actions.&lt;/p&gt;

&lt;p&gt;For example, if you work with AKS (Azure Kubernetes service), you can &lt;a href="https://azure.microsoft.com/en-us/blog/github-actions-for-azure-is-now-generally-available/?WT.mc_id=techexceptions-10917-adpolak"&gt;customize and automate the deployment&lt;/a&gt; process to your cluster. Same with &lt;a href="https://docs.microsoft.com/en-us/learn/paths/azure-sql-fundamentals/?WT.mc_id=techexceptions-10917-adpolak"&gt;Azure SQL&lt;/a&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Watch NOW! 📺
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://bit.ly/applitools-techexceptions"&gt;Tech Exceptions - The Importance of Testing data Applications&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bit.ly/applitools-techexceptions"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--flA2iM6r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/jiuq3efhub1ent36o2kk.png" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Curious to learn more? Check out these free online courses:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Implement a coding workflow in your build pipeline by using Git and GitHub
&lt;/h3&gt;

&lt;p&gt;Collaborate with others and merge only the highest quality code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/learn/modules/implement-code-workflow/?WT.mc_id=techexceptions-10917-adpolak"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OW6BmWwK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/sm4hh4km3ml68m3abbjz.png" width="567" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Migrate your repository by using GitHub best practices
&lt;/h3&gt;

&lt;p&gt;Learn to move your existing project to GitHub from a legacy version control system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/learn/modules/migrate-repository-github/?WT.mc_id=techexceptions-10917-adpolak"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cRC0UMUk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/zkgotx9wwdcltfc4xw12.png" width="567" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Monitor GitHub events by using a webhook with Azure Functions
&lt;/h3&gt;

&lt;p&gt;Webhooks offer a lightweight mechanism for your app to be notified by another service when something of interest happens. In this module. you'll learn how to trigger an Azure Function with a GitHub webhook and parse the payload for insights.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/learn/modules/monitor-github-events-with-a-function-triggered-by-a-webhook/?WT.mc_id=techexceptions-10917-adpolak"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sfEM_8F3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/q3wtpialcetf7tpueim0.png" width="567" height="432"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;I hope you gained value and learn something new, as always I'm happy to take your career and startup questions at &lt;a href="https://twitter.com/AdiPolak"&gt;@adipolak&lt;/a&gt; and &lt;a href="https://twitter.com/TechExceptions"&gt;@TechExceptions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>techtalks</category>
      <category>startup</category>
      <category>career</category>
    </item>
    <item>
      <title>Tech Exceptions new Episode - Data Management and External Organization Collaboration</title>
      <dc:creator>Adi Polak</dc:creator>
      <pubDate>Tue, 19 Jan 2021 08:04:40 +0000</pubDate>
      <link>https://forem.com/azure/tech-exceptions-new-episode-data-management-and-external-organization-collaboration-1j29</link>
      <guid>https://forem.com/azure/tech-exceptions-new-episode-data-management-and-external-organization-collaboration-1j29</guid>
      <description>&lt;p&gt;Remote work increases the chances of data breaches for organizations. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A &lt;strong&gt;data breach&lt;/strong&gt; is the intentional or unintentional release of secure or private/confidential information to an untrusted environment. Other terms for this phenomenon include unintentional information disclosure, data leak, information leakage, and data spill.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Microsoft is highly investing in that space to allow every customer to get maximum protection for their data. &lt;br&gt;
For example, the &lt;a href="https://docs.microsoft.com/en-us/compliance/regulatory/gdpr-breach-notification?WT.mc_id=techexceptions-13005-adpolak"&gt;Microsoft GDPR Breach Notification&lt;/a&gt; that helps you set notification and better track and audit your data to avoid breaking compliance.&lt;/p&gt;

&lt;p&gt;Microsoft also provides dedicated services for tracking and adhering to multiple compliances. These services help your organization comply with national, regional, and industry-specific requirements governing the collection and use of data. For various industries and regions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/compliance/regulatory/offering-home?WT.mc_id=techexceptions-13005-adpolak"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FGgwpU7C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/5qmsnx4harg616ixv10o.png" width="800" height="760"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/microsoft-365/admin/admin-overview/get-started-with-office-365?view=o365-worldwide?WT.mc_id=techexceptions-13005-adpolak"&gt;Microsoft 365&lt;/a&gt; can be used together with &lt;a href="https://docs.microsoft.com/en-us/azure/purview/?WT.mc_id=techexceptions-13005-adpolak"&gt;Azure Purview&lt;/a&gt;. &lt;br&gt;
Using them together will give you better control of your data, will help you understand who has control of your data, the various iterations it went through, including data lineage tracking.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Data lineage includes the data origin, what happens to it, and where it moves over time. Data lineage gives visibility while greatly simplifying the ability to trace errors back to the root cause in a data analytics process. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Data Lineage View Graph example:
&lt;/h3&gt;

&lt;p&gt;You can see how the information is represented in a graph, showing you exactly what happened, including data extraction, transformation, analytics, visualization, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/azure/purview/media/concept-lineage/lineage-end-end.png?WT.mc_id=techexceptions-13005-adpolak"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bpFlzNBK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/zo2hcck8jf6g9urhafj2.png" width="800" height="290"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more&lt;/strong&gt; about it &lt;a href="https://docs.microsoft.com/en-us/azure/purview/concept-data-lineage?WT.mc_id=techexceptions-13005-adpolak"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Breaches when collaborating with People outside of your Organization
&lt;/h2&gt;

&lt;p&gt;Managing and avoiding data breaches get more complicated when you want to share your business-sensitive data with a stakeholder outside your organization. You share this data as part of a collaboration and partnership, but you can't control it anymore.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The external sharing capabilities in Microsoft 365 provide an opportunity for people in your organization to collaborate with partners, vendors, customers, and others who don't have an account in your directory. You can share entire teams or sites with people outside your organization or just individual files.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why External Data Management is important? Watch Tech Exceptions episode:
&lt;/h2&gt;

&lt;p&gt;Grab your favorite ☕ and &lt;a href="https://channel9.msdn.com/Series/Tech-Exceptions/SpecterX--Data-Management-and-External-Organization-Collaboration?WT.mc_id=techexceptions-13005-adpolak"&gt;Learn More&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://channel9.msdn.com/Series/Tech-Exceptions/SpecterX--Data-Management-and-External-Organization-Collaboration?WT.mc_id=techexceptions-13005-adpolak"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tX4O3Hit--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/15jj0iy7nd21jbyf68ic.png" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;I hope you will enjoy it and happy to take your career and startup questions at &lt;a href="https://twitter.com/AdiPolak"&gt;@adipolak&lt;/a&gt; and &lt;a href="https://twitter.com/TechExceptions"&gt;@TechExceptions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>cloudskills</category>
      <category>techtalks</category>
      <category>startup</category>
    </item>
    <item>
      <title>Apache Spark Ecosystem, Jan 2021 Highlights</title>
      <dc:creator>Adi Polak</dc:creator>
      <pubDate>Thu, 14 Jan 2021 09:39:49 +0000</pubDate>
      <link>https://forem.com/adipolak/apache-spark-ecosystem-jan-2021-highlights-4i9o</link>
      <guid>https://forem.com/adipolak/apache-spark-ecosystem-jan-2021-highlights-4i9o</guid>
      <description>&lt;p&gt;If you've been reading here for a while, you know that I'm a big fan of Apache Spark and have been using it for many years.&lt;br&gt;
Apache Spark is continually growing. It started as part of the Hadoop family,&lt;br&gt;
With &lt;a href="https://medium.com/@acmurthy/hadoop-is-dead-long-live-hadoop-f22069b264ac" rel="noopener noreferrer"&gt;the slow death of hadoop&lt;/a&gt; and the fast growth of Kubernetes, many new tools, connectors, and open source have emerged.&lt;br&gt;
This highlights more about the data and ML pieces that will help you build your platform on your preferable resource manager. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Ray:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fray-project%2Fray%2Fraw%2Fmaster%2Fdoc%2Fsource%2Fimages%2Fray_header_logo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fray-project%2Fray%2Fraw%2Fmaster%2Fdoc%2Fsource%2Fimages%2Fray_header_logo.png" alt="drawing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ray is an open-source, python-based framework for building distributed applications.&lt;br&gt;
 Their main audience is ML developers and Data Scientists who would like to accelerate their machine learning workloads using distributed computing.&lt;br&gt;
Ray was open-sourced by UC Berkly &lt;a href="https://rise.cs.berkeley.edu/" rel="noopener noreferrer"&gt;RISELab&lt;/a&gt;, the same lab who created the &lt;a href="https://amplab.cs.berkeley.edu/" rel="noopener noreferrer"&gt;AMPLab&lt;/a&gt; project, where Apache Spark was created.&lt;br&gt;
If you are curious, their next big 5 years project is all about &lt;strong&gt;Real-time Intelligence with Secure Explainable decision&lt;/strong&gt;.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt; RayOnSpark &lt;/span&gt; is a feature that was recently added to &lt;a href="https://github.com/intel-analytics/analytics-zoo" rel="noopener noreferrer"&gt;Analytic Zoo&lt;/a&gt;, end to end data analytics + AI open-sourced platform, that helps you unified multiple analytics workloads like a recommendation, time series, computer vision, NLP and more into one platform running on Spark, Yarn or K8S.&lt;br&gt;
 &lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt; "RayOnSpark allows users to run Ray programs on Apache Hadoop*/YARN directly so that users can easily try various emerging AI applications on their existing Big Data clusters in a distributed fashion. Instead of running big data applications and AI applications on two separate systems, which often introduces expensive data transfer and long end-to-end learning latency, RayOnSpark allows Ray applications to seamlessly integrate into Apache Spark* data processing pipeline and directly run on in-memory Spark RDDs or DataFrames." Jason Dai. &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F728%2F1%2AJv085PlSKouE9RRuvFNlDQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F728%2F1%2AJv085PlSKouE9RRuvFNlDQ.png" alt="drawing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To learn more about Ray and RayOnSpark, checkout &lt;a href="https://medium.com/riselab/rayonspark-running-emerging-ai-applications-on-big-data-clusters-with-ray-and-analytics-zoo-923e0136ed6a" rel="noopener noreferrer"&gt;Jason Dai article from RISELab publication&lt;/a&gt;.&lt;/p&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Koalas:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fdatabricks%2Fkoalas%2Fmaster%2Ficons%2Fkoalas-logo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fdatabricks%2Fkoalas%2Fmaster%2Ficons%2Fkoalas-logo.png" alt="drawing"&gt;&lt;/a&gt; &lt;br&gt;
&lt;br&gt;&lt;br&gt;
 &lt;span&gt; Koalas &lt;/span&gt; is Pandas scalable Sibling:&lt;/p&gt;

&lt;p&gt;From the &lt;a href="https://pandas.pydata.org/docs/" rel="noopener noreferrer"&gt;Pandas&lt;/a&gt; docs: &lt;em&gt;" pandas is an open-source, BSD-licensed library providing high-performance,&lt;br&gt;
 easy-to-use data structures and data analysis tools for the Python programming language."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;From the &lt;a href="https://koalas.readthedocs.io/en/latest/" rel="noopener noreferrer"&gt;Koalas&lt;/a&gt; docs: &lt;em&gt;"The Koalas project makes data scientists more productive when interacting with big data,&lt;br&gt;
 by implementing the pandas DataFrame API on top of Apache Spark."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you are familiar with exploring and running analytics on data with &lt;em&gt;panads&lt;/em&gt;,&lt;br&gt;
 &lt;em&gt;Koalas&lt;/em&gt; provides a similar API for running the same analytics on Apache Spark DataFrames.&lt;br&gt;
 Which makes it easier for Pandas user to run their workloads at scale.&lt;br&gt;
When using it, notice the different Koalas versions; many new versions are NOT available with Spark 2.4 and require Spark 3.0 cluster.&lt;/p&gt;

&lt;p&gt;Koalas is built with an internal frame to hold indexes and information on top of Spark DataFrame.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ytimg.com%2Fvi%2FNpAMbzerAp0%2Fmaxresdefault.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ytimg.com%2Fvi%2FNpAMbzerAp0%2Fmaxresdefault.jpg" alt="drawing"&gt;&lt;/a&gt;&lt;br&gt;
 &lt;br&gt;&lt;/p&gt;

&lt;p&gt;To learn more about it, check out &lt;a href="https://databricks.com/session_eu19/koalas-pandas-on-apache-spark" rel="noopener noreferrer"&gt;Tim Hunter talk on Koalas&lt;/a&gt; from Spark Summit 2019.&lt;/p&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Delta Lake:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://camo.githubusercontent.com/5535944a613e60c9be4d3a96e3d9bd34e5aba5cddc1aa6c6153123a958698289/68747470733a2f2f646f63732e64656c74612e696f2f6c61746573742f5f7374617469632f64656c74612d6c616b652d77686974652e706e67" class="article-body-image-wrapper"&gt;&lt;img src="https://camo.githubusercontent.com/5535944a613e60c9be4d3a96e3d9bd34e5aba5cddc1aa6c6153123a958698289/68747470733a2f2f646f63732e64656c74612e696f2f6c61746573742f5f7374617469632f64656c74612d6c616b652d77686974652e706e67" alt="drawing"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://delta.io/" rel="noopener noreferrer"&gt;Delta Lake&lt;/a&gt; is nothing new with the Spark ecosystem, but still, many confuse Delta Lake to be a ... DataBase! (DB) well.. delta lake is NOT a database.&lt;br&gt;
Delta Lake is an open-source storage layer that brings ACID (atomicity, consistency,&lt;br&gt;
 isolation, and durability) transactions to Apache Spark and Big data workloads but is not a DB! Just like &lt;a href="https://docs.microsoft.com/en-us/learn/paths/store-data-in-azure/?WT.mc_id=blog-00000-adpolak" rel="noopener noreferrer"&gt;Azure Blog storage&lt;/a&gt; and &lt;a href="https://aws.amazon.com/s3/" rel="noopener noreferrer"&gt;AWS S3&lt;/a&gt; are not acting as databases, they are defined as storage.&lt;br&gt;
Delta helps with ACID that is hard to achieve and a great pain point with distributed storage.&lt;br&gt;
It provides scalable metadata handling on the data itself.&lt;br&gt;&lt;br&gt;
When combined with Spark, this is highly useful due to the nature of Spark SQL engine&lt;br&gt;
the catalyst which uses this metadata to better plan and executed big data queries.&lt;/p&gt;

&lt;p&gt;There is also data versioning through a snapshot of the storage named Time Travel feature.&lt;br&gt;
I recommend being mindful with using this feature as saving snapshots, and later using them might create an overhead to the size and compute of your data.&lt;/p&gt;

&lt;p&gt;If you are curious to learn more about it, read &lt;a href="https://databricks.com/blog/2020/06/18/time-traveling-with-delta-lake-a-retrospective-of-the-last-year.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  That's it.
&lt;/h2&gt;

&lt;p&gt;I hope you enjoyed reading this short recap on open sources for January 2021.&lt;br&gt;
If you are interested in learning more and getting updates, follow &lt;a href="https://twitter.com/AdiPolak" rel="noopener noreferrer"&gt;Adi Polak on Twitter.&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This post originally appeared on &lt;a href="https://blog.adipolak.com/post/apache-spark-ecosystem/" rel="noopener noreferrer"&gt;Adi Polak's Personal Blog&lt;/a&gt;.&lt;/em&gt; &lt;/p&gt;

</description>
      <category>opensource</category>
      <category>datascience</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>Tech Exceptions new Episode -The Data Behind MLOps</title>
      <dc:creator>Adi Polak</dc:creator>
      <pubDate>Tue, 12 Jan 2021 09:55:08 +0000</pubDate>
      <link>https://forem.com/azure/tech-exceptions-new-episode-the-data-behind-mlops-3in6</link>
      <guid>https://forem.com/azure/tech-exceptions-new-episode-the-data-behind-mlops-3in6</guid>
      <description>&lt;p&gt;Many times, when an organization is asked to add more ML-based features or products, they immediately start with hiring ML experts or experienced data scientists.&lt;br&gt;
After finding the best talent in the market, the new data scientists are facing the challenge of access to data and no existing infra to support their needs.&lt;br&gt;
The new data scientists team is now facing a data and MLOps challenge rather than a pure data science one. They spend 70% of their time collecting, cleaning, and preparing the data for ingesting them to the machine learning algorithms. &lt;br&gt;
Later they face the challenge of validating the models and communicating the outcomes to the engineering teams to code the model and deploy to production.&lt;/p&gt;

&lt;p&gt;This full cycle can take months, and by the time the ML model is being deployed to productions, the competitors already developed a better one, and the company losses its technical edge. &lt;/p&gt;

&lt;p&gt;This is why data scientists need a platform to create and build their state of the art machine learning models.&lt;/p&gt;

&lt;p&gt;Microsoft Azure is offering Azure Machine Learning to help with this task.&lt;/p&gt;

&lt;p&gt;Here is a free 1 hour course for you to learn about it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/learn/modules/intro-to-azure-machine-learning-service/?WT.mc_id=techexceptions-10917-adpolak"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JE2y0LzI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/5b9kofg7r2hvbr3yt9gh.png" width="800" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To understand the importance of such a platform, we've met with Yaron Haviv, Co-founder and CTO of Iguazio for a chat on how they work with Microsoft and the evolving world of productionizing Machine Learning.  &lt;/p&gt;

&lt;p&gt;Watch here:&lt;br&gt;
&lt;a href="https://aka.ms/AAakfzh"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qPwwwS3p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/d4xle49t7fe9wky3t6kx.png" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We hope you will enjoy it and happy to take your career and startup questions at &lt;a href="https://twitter.com/AdiPolak"&gt;@adipolak&lt;/a&gt; and &lt;a href="https://twitter.com/TechExceptions"&gt;@TechExceptions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>azure</category>
      <category>startup</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>Tech Exceptions new Episode - From Open Source to Multi B$$$ IPO</title>
      <dc:creator>Adi Polak</dc:creator>
      <pubDate>Tue, 12 Jan 2021 09:21:44 +0000</pubDate>
      <link>https://forem.com/adipolak/tech-exceptions-new-episode-from-open-source-to-multi-b-ipo-4a4j</link>
      <guid>https://forem.com/adipolak/tech-exceptions-new-episode-from-open-source-to-multi-b-ipo-4a4j</guid>
      <description>&lt;p&gt;When JFrog started 12 years ago, they were built on the founders' open source project. They were among the first startups to believe that a company can be built and make money while sharing free code. Some years later, they IPOed at a valuation of $6.36 Billion. which is an incredible number for the startup community.&lt;/p&gt;

&lt;p&gt;JFrog is collaborating closely with Microsoft, on both the business side and the technical side.&lt;br&gt;
JFrog Artifactory hosted on Microsoft Azure is a solution for developers and DevOps engineers that provides complete control, insight, and binary management throughout the software development lifecycle. DevOps teams have transparency and control of their entire build and release process, all with the power of cloud-based development.&lt;/p&gt;

&lt;p&gt;Read here to learn more about &lt;a href="https://docs.microsoft.com/en-us/azure/devops/artifacts/overview?view=azure-devops&amp;amp;WT.mc_id=techexceptions-10917-adpolak"&gt;Azure Artifacts&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Recently we interviewed Casey O'Mara who is an active board member of the CNCF (Cloud Native Computing Foundation), previously worked for AWS and Microsoft as an architect, and today, he is the JFrog VP of Business Development.&lt;/p&gt;

&lt;p&gt;Curious what Casey had to say about Open Source? Watch the interview here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aka.ms/AAaeqb8"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SEaA0zv6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/6tn6oeffz8mh2txkmj09.png" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We hope you will enjoy it and happy to take your career and startup questions at &lt;a href="https://twitter.com/AdiPolak"&gt;@adipolak&lt;/a&gt; and &lt;a href="https://twitter.com/TechExceptions"&gt;@TechExceptions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>startup</category>
      <category>techtalks</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Tech Exceptions new Episode - Stop wasting your time with Old-School Logging</title>
      <dc:creator>Adi Polak</dc:creator>
      <pubDate>Wed, 09 Dec 2020 09:45:40 +0000</pubDate>
      <link>https://forem.com/adipolak/tech-exceptions-new-episode-stop-wasting-your-time-with-old-school-logging-idg</link>
      <guid>https://forem.com/adipolak/tech-exceptions-new-episode-stop-wasting-your-time-with-old-school-logging-idg</guid>
      <description>&lt;p&gt;🎙️ Jonah Kowall, CTO of &lt;a href="https://logz.io/freetrial/?utm_source=microsoft_youtube&amp;amp;utm_medium=referral&amp;amp;utm_campaign=tech_exceptions%C2%A0"&gt;Logz.io&lt;/a&gt;, joins &lt;a href="https://twitter.com/AdiPolak"&gt;Adi Polak&lt;/a&gt; to discuss his career path transition from engineering, an analyst at Gartner and all the way to becoming CTO of Logz.io. &lt;/p&gt;

&lt;p&gt;Logz.io recently closed the latest funding round which brings the total capital raised to a whopping $120 + million greens 🤑 .&lt;br&gt;
That includes $74 million raised over the last 18 months. That amount of available capital allows the company to accelerate product development initiatives around AI and Machine Learning, expand headcount and propel go-to-market activities around the globe. &lt;/p&gt;

&lt;p&gt;📊 Fun fact, Logz.io is built on Open Source alone, they built the platform to be completely cloud-agnostic. &lt;br&gt;
However, for their machine learning purposes, they use &lt;a href="https://docs.microsoft.com/en-us/azure/cognitive-services/bing-web-search/?WT.mc_id=techexceptions-11139-adpolak"&gt;Bing Search API&lt;/a&gt; to enrich the data, which gives you 1000 transactions free per month to search for images, news, videos, visuals, and general web search.&lt;/p&gt;

&lt;p&gt;If you are interested to learn how to deploy ELK (Elastic, Logstash, and Kibana) stack on Azure, check this link &lt;a href="https://azure.microsoft.com/en-us/overview/linux-on-azure/elastic/?WT.mc_id=techexceptions-11139-adpolak"&gt;here&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Alright,
&lt;/h2&gt;

&lt;p&gt;Grab your favorite drink and get ready to be enlightened ✨&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://aka.ms/AAadtr0"&gt;Watch Now!&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/3oxHQoNY93SgETHh2E/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/3oxHQoNY93SgETHh2E/giphy.gif" alt="" width="490" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We hope you will enjoy it and happy to take your career and startup questions at &lt;a href="https://twitter.com/AdiPolak"&gt;@adipolak&lt;/a&gt; and &lt;a href="https://twitter.com/TechExceptions"&gt;@TechExceptions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>azure</category>
      <category>startup</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>Panel Discussion: Data for Good [Create: Data]</title>
      <dc:creator>Adi Polak</dc:creator>
      <pubDate>Tue, 01 Dec 2020 11:21:56 +0000</pubDate>
      <link>https://forem.com/azure/panel-discussion-data-for-good-create-data-5e41</link>
      <guid>https://forem.com/azure/panel-discussion-data-for-good-create-data-5e41</guid>
      <description>&lt;p&gt;Panel: Data for Good&lt;/p&gt;

&lt;h1&gt;
  
  
  Update!
&lt;/h1&gt;

&lt;p&gt;Few, what an experience, alright.&lt;br&gt;
Want to catch up with the panel session? You can watch it on demand -&amp;gt; &lt;a href="https://channel9.msdn.com/Events/MS-Create/Data/Panel-Data-for-Good?WT.mc_id=data-11733-adpolak"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For watching more sessions from Create: Data on-demand, click &lt;a href="https://channel9.msdn.com/Events/MS-Create/Data?WT.mc_id=data-11733-adpolak"&gt;here&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Provably one of the most exciting topics of the year for everyone who works with data. How can we leverage data to do good for our communities and improve people's lives?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/qEA9njXuIMz6w01GaC/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/qEA9njXuIMz6w01GaC/giphy.gif" alt="" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Join four inspiring and accomplished leaders in the data space for this Data For Good panel. They share their perspectives about what good data is and how it relates to actually doing good. Take away learnings on how data tools can help us in keeping our data healthy.&lt;/p&gt;




&lt;p&gt;Register now for &lt;a href="https://aka.ms/createdata"&gt;free&lt;/a&gt;; please share your questions, ideas, and thoughts in the comment section. I'm happy to bring it with the panel experts to make sure all your questions are answered! &lt;/p&gt;

</description>
      <category>news</category>
      <category>datascience</category>
      <category>azure</category>
    </item>
    <item>
      <title>Driving a Data culture in a world of Remote Everything [Create: Data]</title>
      <dc:creator>Adi Polak</dc:creator>
      <pubDate>Tue, 01 Dec 2020 11:17:30 +0000</pubDate>
      <link>https://forem.com/azure/driving-a-data-culture-in-a-world-of-remote-everything-create-data-2lnb</link>
      <guid>https://forem.com/azure/driving-a-data-culture-in-a-world-of-remote-everything-create-data-2lnb</guid>
      <description>&lt;p&gt;You know data is important to create a data-driven decision that will create value for you and your colleagues.&lt;br&gt;
But, what if no one from the team? or you, never collected any data? how do you drive that data culture especially now when many in the tech sector shifted to work remotely? &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/2H67VmB5UEBmU/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/2H67VmB5UEBmU/giphy.gif" alt="" width="460" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Join Arun Ulag and Heather Newman to learn how to build an organizational data culture with a remote workforce, How to integrate BI into the fabric of the organization, and how individuals can quickly adapt to working digitally remotely and possess a data-driven culture that will lead to better, more suitable data-driven decisions.&lt;/p&gt;

&lt;h1&gt;
  
  
  All this goodness, in the &lt;a href="https://aka.ms/createdata"&gt;free Create: Data&lt;/a&gt; event.
&lt;/h1&gt;

&lt;p&gt;See you there! &lt;/p&gt;

</description>
      <category>azure</category>
      <category>news</category>
      <category>analytics</category>
    </item>
    <item>
      <title>The Journey to Modern Warehousing [Create: Data]</title>
      <dc:creator>Adi Polak</dc:creator>
      <pubDate>Tue, 01 Dec 2020 11:06:55 +0000</pubDate>
      <link>https://forem.com/azure/the-journey-to-modern-warehousing-create-data-4k91</link>
      <guid>https://forem.com/azure/the-journey-to-modern-warehousing-create-data-4k91</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fo1817olyiydm016kgj0g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fo1817olyiydm016kgj0g.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is so very true, and just right on time for you to learn about Modern Data Warehousing.&lt;/p&gt;

&lt;p&gt;Please join us for &lt;a href="https://aka.ms/createdata" rel="noopener noreferrer"&gt;Create: Data&lt;/a&gt; on a unique session about the journey of Big Data.&lt;/p&gt;

&lt;p&gt;In this session, Saveen Reddy and Simon Whiteley will walk us through how Microsoft goes on a wild Big Data journey to get to the technology shift that is Azure Synapse Analytics. Join Simon and Saveen as they talk through the journey to modern analytics and how the barriers have been lowered for big data adoption.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2q806361g3asyg97oux.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2q806361g3asyg97oux.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Remember!
&lt;/h1&gt;

&lt;p&gt;Register &lt;a href="https://aka.ms/createdata" rel="noopener noreferrer"&gt;here&lt;/a&gt; for free.&lt;/p&gt;




</description>
      <category>database</category>
      <category>analytics</category>
      <category>azure</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
