<?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>DEV Community: Israel Mendes</title>
    <description>The latest articles on DEV Community by Israel Mendes (@israel_mendes).</description>
    <link>https://dev.to/israel_mendes</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3968589%2F0bed3bf7-b4e7-4630-8ed8-baf9b17e32b8.jpeg</url>
      <title>DEV Community: Israel Mendes</title>
      <link>https://dev.to/israel_mendes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/israel_mendes"/>
    <language>en</language>
    <item>
      <title>What is the best data compression for data lakes? (with benchmark!)</title>
      <dc:creator>Israel Mendes</dc:creator>
      <pubDate>Mon, 22 Jun 2026 10:27:30 +0000</pubDate>
      <link>https://dev.to/israel_mendes/what-is-the-best-data-compression-for-data-lakes-with-benchmark-33kn</link>
      <guid>https://dev.to/israel_mendes/what-is-the-best-data-compression-for-data-lakes-with-benchmark-33kn</guid>
      <description>&lt;p&gt;Every time that I'm in a project starting a data lake or storing some information in a blob storage like S3, I start to think about a few basic things. Such as:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What would be the format of the files&lt;/li&gt;
&lt;li&gt;The partition that is required to organize/improve performance when reading it&lt;/li&gt;
&lt;li&gt;What are the access patterns for the data. What frequency and main ways to consume it&lt;/li&gt;
&lt;li&gt;Naming of the files, specific patterns to follow&lt;/li&gt;
&lt;li&gt;Versioning of the files in the storage&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And much more. Data engineers can spend hours debating those topics but one thing that I see less or not even being discussed deeply online is about data compression itself. Recently I was reading &lt;a href="https://paulcalvano.com/2024-03-19-choosing-between-gzip-brotli-and-zstandard-compression/" rel="noopener noreferrer"&gt;Choosing Between gzip, Brotli and zStandard compression&lt;/a&gt; from Paul Calvano and I decided to do a similar work he did but thinking on big data patterns instead of focusing on web consumption.&lt;/p&gt;

&lt;p&gt;To be fair, I'm aware there is plenty of benchmarks for data compression in the market (for example, with &lt;a href="https://quixdb.github.io/squash-benchmark/" rel="noopener noreferrer"&gt;Squash&lt;/a&gt;), but I want to be able to consider the following details:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Control or give more details about the compute/memory (which may be not clear in specific benchmarks)&lt;/li&gt;
&lt;li&gt;To use Spark in the process, see details of the codec and check for more advance features (like splitting large parquet files)&lt;/li&gt;
&lt;li&gt;Evaluate different compression algoritims and levels based on a data lake purpose&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Before diving into the benchmark itself, I want to spend briefly some time and introduce the data compression topics, allowing to explain the process now will make it easier to understand how to compare each algorithm/codec later.&lt;/p&gt;

&lt;p&gt;Let's dive into it!&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 1: Intro do data compression
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is data compression
&lt;/h3&gt;

&lt;p&gt;In a nutshell:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It is the process to reduce the size of the files by an algorithm. It will identify redundancies or patterns, which can help "compact" information more efficiently.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Each compression algorithm can be different (the way that details can vary, so the programming language and methods used), but the main idea is that they identify some redundancies of the data, to reduce that part and represent it in the least volume of data/bits as possible. &lt;/p&gt;

&lt;p&gt;Each compression accounts for the following elements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Algorithm to be used&lt;/strong&gt;: The main method used to compress/decompress the data. It can support different types (lossless, lossy), levels, programming languages and so forth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compression Type&lt;/strong&gt;: There are, basically, two ways to make the file smaller. 

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lossless&lt;/strong&gt;: Rewrite the data to reduce size, then rebuild exactly as it was for consumption. Very common for text/code/executables.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lossy&lt;/strong&gt;: Rewrite the data to reduce the size, but since humans will consume it, the quality can be lower since (usually) they don't detect small differences and changes. Very common for content like photos/audio/video.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compression Level&lt;/strong&gt;: Some algorithms has a way to determine on how "much" you want to compress, and thus reduce size (but there is always a catch/tradeoff).

&lt;ol&gt;
&lt;li&gt;For &lt;strong&gt;lossless&lt;/strong&gt;, this represents how much the encoder searches until it find an identical at every level. The main drawback here is CPU, where you will have more processing to conduct that activity (compressing and decompressing, which can cause the speed for each stage to vary).&lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;lossy&lt;/strong&gt;, it means how much detail you want to keep or how much quality will eliminate because of the file size.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Splitability&lt;/strong&gt;: Depending of the file type/format and algorithm, the compression can split the file without decompressing it first. This is useful for reading/processing large files.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When comparing algorithms, it is important to keep an eye in the following metrics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compression Ratio&lt;/strong&gt;: A comparison between the original file size and the new size after a compression. For example, if a file has 100 MB and, after a compression, it went to 50 MB, the ratio would be 100 / 50 = 2x.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compression Speed/Time&lt;/strong&gt;: How fast is the data being written after the compression.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decompression Speed/Time&lt;/strong&gt;: How fast is the data being read back to the computer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;The simple situation to explain how data compression works is basically to reduce redundancy. Let's say you have a file that has the following text:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;A A A A A A B B B B B B B B C C C C A A A A A A A A&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can see, there is a lot of repetition there, right? Several As, Bs, Cs and then As. What if we could group them, to save space? For example, you can put like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;6xA 8xB 4xC 8xA&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then, once you decompress it, you can put exactly as the original content and no loss happened (lossless) plus you saved some space.&lt;/p&gt;

&lt;p&gt;Now, other algorithms have more complex processes to save even more space. For example, &lt;a href="https://en.wikipedia.org/wiki/Huffman_coding" rel="noopener noreferrer"&gt;Huffman coding&lt;/a&gt; builds a custom alphabet where the most frequent symbol get the shortest bit-string, rare ones get longer, so forth. This way, you can save even more space! If you use, for example in a word like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;ABRACADABRA&lt;/code&gt;:

&lt;ol&gt;
&lt;li&gt;Each word is 1 byte and lead to 8 bits each, so we have &lt;code&gt;88 bits&lt;/code&gt; in total&lt;/li&gt;
&lt;li&gt;But if you compress it in that method, you will have &lt;code&gt;23 bits&lt;/code&gt; in total

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;A&lt;/code&gt; appears 5 times and has 1 bit each = Total of 5&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;B&lt;/code&gt; appears 2 times and has 3 bits each = Total of 6&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;R&lt;/code&gt; appears 2 times and has 3 bits each = Total of 6&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;C&lt;/code&gt; appears 1 times and has 3 bits each = Total of 3&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;D&lt;/code&gt; appears 1 times and has 3 bits each = Total of 3&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Compression ratio: &lt;code&gt;88 / 23 = 3.82x&lt;/code&gt;!&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is the breakdown of the method, in a diagram:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpd9hobbyze8weufq5uu5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpd9hobbyze8weufq5uu5.png" alt="huffman coding diagram" width="800" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why to (or not to) do it
&lt;/h3&gt;

&lt;p&gt;Ideally, you want to use compression in a few scenarios, and that can bring in the following benefits:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Save space&lt;/strong&gt;: That is the most obvious benefit. When you compress, it is a process that you can basically "compact" so you can fit more with less. When you have, for example, 1 GB of a CSV file, after compression, it can go to half of that or even more (depending on the method, how the file is structured, and so forth).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Save on cost&lt;/strong&gt;: Since cloud providers, which are mostly the focus of this blog, charge you per use (how much you store, how much you write/read, and so forth). Having "less volume" of the same data can be a significant way to reduce your expenses in that front.

&lt;ol&gt;
&lt;li&gt;This can also reference about the transfer of the data. For example, data transfer and egress costs or compressing data in a streaming pipeline to "take more with less".&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improve performance&lt;/strong&gt;: Although the compression/decompression process trades a bit of CPU for a larger saving on cost, you would assume this could affect performance, right? Not necessarily. You can have significant gains:

&lt;ol&gt;
&lt;li&gt;Query time can be significantly decreased since with less data (especially for a columnar format) is easier to select the parts you need. If the data compression is splittable, you can even read and process each part in parallel&lt;/li&gt;
&lt;li&gt;This can be useful while computing data for specific tools, for example, when Spark tasks have compression enabled with shuffle spill, this can reduce disk I/O and speed up re-reads.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Although there are reasons to do data compression, it is important to know when NOT to do it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Latency-critical architectures&lt;/strong&gt;: If you need absolute performance by reading the files as fast as possible, the decompression process adds a CPU cost and some latency, which is not ideal for your requirement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small but significant volume of files&lt;/strong&gt;: Compression works better when you are handling bigger files (around 100 MBs or more). But if you have, let's say, millions of small files, like 1 KB for log or JSON, compression will create a big overhead for no significant improvement in performance (assuming that you're not aggregating/joining those files, keeping them as it is for some reason).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What are the main types of compression
&lt;/h2&gt;

&lt;p&gt;There are several algorithms and each one can have distinct features or functionalities. For the sake of this blog post, I will keep it brief and show the mains used for building data lakes or using with Spark in AWS (via Glue Jobs, which is relevant for the benchmark). Here are the main algorithms and codecs, using a basic definition from their official sites:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algorithm/Codec&lt;/th&gt;
&lt;th&gt;Natively Supported By AWS Glue&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://www.gnu.org/software/gzip/" rel="noopener noreferrer"&gt;GZIP&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;A single-file lossless compression utility built on the DEFLATE algorithm (zlib). The resulting compressed output generally carries the &lt;code&gt;.gz&lt;/code&gt; suffix. Widely supported across every tool, OS, and cloud service.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://github.com/google/snappy" rel="noopener noreferrer"&gt;Snappy&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;A compression/decompression library from Google that targets speed over ratio. It does not aim for maximum compression or compatibility with other libraries: the design goal is very high throughput with reasonable compression.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://lz4.org/" rel="noopener noreferrer"&gt;LZ4&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Designed for extreme speed. LZ4 is a lossless compression algorithm providing compression speed greater than 500 MB/s per core, and decompression speed reaching multiple GB/s. It is the first algorithm on this list to have distinct levels of compressions, going up to 14.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="http://www.oberhumer.com/opensource/lzo/" rel="noopener noreferrer"&gt;LZO&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;A data compression library that prioritises decompression speed. The &lt;code&gt;lzo1b&lt;/code&gt; variant tested here can decompress faster than it compresses. Like BZIP2, LZO files can be made splittable in Hadoop/Spark with a companion index file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://facebook.github.io/zstd/" rel="noopener noreferrer"&gt;ZSTD&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Zstandard, developed at Meta, is designed to replace GZIP as the general-purpose default. The levels range from 0 to 22, and speed/compression ratio can vary between each level.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://github.com/google/brotli" rel="noopener noreferrer"&gt;Brotli&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;A modern lossless compression algorithm from Google that uses a combination of LZ77, Huffman coding, and 2nd-order context modelling. Quality levels can go from 0 to 11. Decompression is consistently fast regardless of the quality level used to compress.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc1951" rel="noopener noreferrer"&gt;DEFLATE&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;The lossless algorithm at the heart of GZIP, zlib, ZIP, and PNG, defined in RFC 1951. It combines LZ77 dictionary matching with Huffman coding: the same engine GZIP uses. A raw &lt;code&gt;.deflate&lt;/code&gt; stream is essentially GZIP without the wrapper.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://sourceware.org/bzip2/" rel="noopener noreferrer"&gt;BZIP2&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;A block-sorting lossless compressor that typically reaches a higher compression ratio than GZIP, at the cost of considerably more CPU time. Instead of LZ77, it chains the Burrows-Wheeler Transform (BWT), Move-To-Front coding, run-length encoding, and Huffman coding.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;! The algorithms and levels, for the benchmark, are only being considered in the ones that a Glue Job plainly support it, in which there is no requirement to install any external dependency. This eliminates &lt;code&gt;deflate&lt;/code&gt;, &lt;code&gt;brotli&lt;/code&gt; and &lt;code&gt;bzip2&lt;/code&gt;, for example.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's see if they are actual fast or relevant to use, based on their official guidelines!&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 2: Benchmark
&lt;/h2&gt;

&lt;p&gt;To assess properly the compression algorithms, I consider the following details:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I've used a public dataset so people can reproduce the results if someone wants to. Access it in &lt;a href="https://www.kaggle.com/datasets/eoinamoore/historical-nba-data-and-player-box-scores?select=Games.csv" rel="noopener noreferrer"&gt;Kaggle, NBA Dataset: Box Scores and Stats (1947 - Today)&lt;/a&gt;. The dataset contains basically:

&lt;ol&gt;
&lt;li&gt;One &lt;code&gt;.parquet&lt;/code&gt; file and nine &lt;code&gt;.csv&lt;/code&gt; files&lt;/li&gt;
&lt;li&gt;In total, the dataset has around 1.86 GB uncompressed&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Similar idea, I ran the transformation/compression/decompression jobs in AWS via &lt;a href="https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html" rel="noopener noreferrer"&gt;Glue&lt;/a&gt;. Here is the main configuration:

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Worker Type&lt;/strong&gt;: G.1X

&lt;ol&gt;
&lt;li&gt;1 DPU (4 vCPUs, 16 GB memory) &lt;/li&gt;
&lt;li&gt;94GB disk (approximately 44GB free)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version&lt;/strong&gt;: 4.0&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workers&lt;/strong&gt;: 2&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I don't intend to show every single Python/Shell Script/SQL code since it would make a large and unnecessary post, but you can check on my GitHub &lt;a href="https://github.com/israelmendez232/compression-benchmark" rel="noopener noreferrer"&gt;here&lt;/a&gt; and the links above for the main scripts that I used to support this work.&lt;/p&gt;

&lt;p&gt;The process followed for the benchmark:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the NBA dataset and paste in a S3 bucket

&lt;ol&gt;
&lt;li&gt;Via &lt;a href="https://github.com/israelmendez232/compression-benchmark/blob/main/datasets/download_aml.sh" rel="noopener noreferrer"&gt;./datasets/download_aml.sh&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Create a Glue job, run the compression and decompression

&lt;ol&gt;
&lt;li&gt;Via &lt;a href="https://github.com/israelmendez232/compression-benchmark/blob/main/glue/deploy.sh" rel="noopener noreferrer"&gt;./glue/deploy.sh --bucket my-bucket --region us-east-1&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Run the Glue Job that will compress/decompress the files, across different codecs/algorithms and levels

&lt;ol&gt;
&lt;li&gt;With &lt;code&gt;aws glue start-job-run --job-name consumption-benchmark --arguments '{"--s3_bucket":"my-bucket","--dataset":"historical-nba-data-and-player-box-scores","--engine":"glue_spark"}'&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Collect metrics and send to S3

&lt;ol&gt;
&lt;li&gt;Already performed by each Glue Job automatically &lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Collect all the metrics and produce a report to show here

&lt;ol&gt;
&lt;li&gt;With &lt;code&gt;aws s3 cp s3://&amp;lt;my-bucket&amp;gt;/reports/compression/ reports/compression/ --recursive&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Results
&lt;/h3&gt;

&lt;p&gt;Here is the successful run:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fueplx6gqj1sukhvbwp3i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fueplx6gqj1sukhvbwp3i.png" alt="glue-successful-run" width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here are some of the logs, it is possible to see each algorithm and level:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj990z7soesz63jvjztrn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj990z7soesz63jvjztrn.png" alt="logs of the glue job" width="800" height="790"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The raw results of the report are hosted here, &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/israelmendez232/compression-benchmark/blob/main/reports/compression/historical-nba-data-and-player-box-scores%20(4).csv" rel="noopener noreferrer"&gt;compression-historical-nba-data-and-player-box-scores.csv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/israelmendez232/compression-benchmark/blob/main/reports/benchmark-report.html" rel="noopener noreferrer"&gt;Report produced with Claude.ai&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  The Numbers
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2hjvmb5pgazlzbebegi9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2hjvmb5pgazlzbebegi9.png" alt="main numbers of the benchmark" width="800" height="91"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Best compression ratio is &lt;code&gt;gzip-9&lt;/code&gt; (the last digit being the number of the level of the codec during compression/decompression) with 3.5185x (although other codecs and levels are quite similar)&lt;/li&gt;
&lt;li&gt;Best compression is &lt;code&gt;lz4-7&lt;/code&gt;, with 250 mb/s&lt;/li&gt;
&lt;li&gt;Best decompression is &lt;code&gt;zstd-22&lt;/code&gt;, with 2,077 mb/s&lt;/li&gt;
&lt;li&gt;The compression process that costed the less while running in Glue is &lt;code&gt;lz4-7&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3sg47rons15blnrd70zl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3sg47rons15blnrd70zl.png" alt="list of all compression ratio per codec/algo and level" width="800" height="1459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is a list of all compression ratio per codec/algo and level. Some insights that I can drive from this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you use just any lower level, without thinking too much, you may end up with worst cases and bloated data like with &lt;code&gt;zstd-1&lt;/code&gt; or &lt;code&gt;lz4-1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;There are some good plain options like &lt;code&gt;snappy&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;But you can do better if you go above the traditional and explore different levels with &lt;code&gt;zstd&lt;/code&gt; and &lt;code&gt;gzip&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmqpm0sfgxhuuqrmxpvpx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmqpm0sfgxhuuqrmxpvpx.png" alt="decompression speed vs ratio" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's compare decompression speed versus the compression ratio. The biggest one for both metrics is the ideal option for queries that will read and consume the data more than writing. As it is possible to see, the best ones will be &lt;code&gt;zstd&lt;/code&gt; with higher levels, from 9 to above.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe60coq1frzjneiwdimpa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe60coq1frzjneiwdimpa.png" alt="compress vs decompress time (MS) at log scale" width="800" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not able to show all the algorithms and their compression/decompression time, but this is interesting to see that the compression time of each &lt;code&gt;gzip&lt;/code&gt; level can take up to 6x more than any other algorithm/codec.&lt;/p&gt;

&lt;p&gt;This is a good indication that, although &lt;code&gt;gzip&lt;/code&gt; has a better compression ration, it may not be worth it since it would take more resources to run over with it.&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;Here are some insights I can draw from that experiment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;New Architecture&lt;/strong&gt;: When starting a new data solution, aim to explore different compression algorithms based on your use case and design.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Lakes&lt;/strong&gt;: My suggestion is to use &lt;code&gt;zstd&lt;/code&gt; at a level 3 or higher. You will have a performance that can be 6x faster than gzip and can lead to significant performance gains when reading the data, which is great for production consumption.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ingestion focus&lt;/strong&gt;: If you have a case where, for example, you need to receive the streaming of logs and storage/archive, consider to use &lt;code&gt;lz4&lt;/code&gt; with level 7 or above, since it is more important write-heavy scenario and that can support up to 250 MB/sec.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compression Levels&lt;/strong&gt;: There is a moment that more levels does not indicate significant improvements of reducing the file size. 

&lt;ol&gt;
&lt;li&gt;If you need extreme results (collect the "last drop" of performance), then explore the level of the codec. &lt;/li&gt;
&lt;li&gt;If you just need a good enough result, go to a mid level of each codec and you should be fine (from 3 to 7, but it can very per codec/algorithm).&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't only consider compression ratio&lt;/strong&gt;: Evaluate compression/decompression time since it can lead to more CPU/memory being consumed and a higher cost (depending on your infrastructure). For example, &lt;code&gt;gzip&lt;/code&gt; has the best compression ratio, but it can take up to 6x more of compress time compared with other algorithms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always check the support of each codec/algorithm for your application and platform&lt;/strong&gt;: If you intend to run in a serverless option, like AWS Lambda or Glue, or in a specific programming language, does the current underlying infrastructure/solution already has a way to run and support it the algorithm/codec? If not, do you need to install a custom package/layer to support it? Is it worth it or better to go with a good enough option to simplify the solution? &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;To write this blog post, I used the following articles and books to guide the content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.kaggle.com/datasets/eoinamoore/historical-nba-data-and-player-box-scores" rel="noopener noreferrer"&gt;NBA Dataset: Box Scores and Stats (1947 - Today)&lt;/a&gt; — Kaggle, Eoin A. Moore. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://paulcalvano.com/2024-03-19-choosing-between-gzip-brotli-and-zstandard-compression/" rel="noopener noreferrer"&gt;Choosing Between gzip, Brotli and zStandard Compression&lt;/a&gt; — Paul Calvano (2024).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.researchgate.net/publication/322557949_A_review_of_data_compression_techniques" rel="noopener noreferrer"&gt;A Review of Data Compression Techniques&lt;/a&gt; — Fitriya, L.A. &amp;amp; Purboyo, Tito &amp;amp; Prasasti, Anggunmeka. (2017). A review of data compression techniques. International Journal of Applied Engineering Research. 12. 8956-8963. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.semanticscholar.org/paper/A-Study-of-Various-Data-Compression-Techniques-Ravi-Ashokkumar/6409dce54fa2265c79a30a28c36b8fa13ff280fc" rel="noopener noreferrer"&gt;A Study of Various Data Compression Techniques&lt;/a&gt; — Ravi, Prakash G. and D. Ashokkumar. “A Study of Various Data Compression Techniques.” (2015).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.researchgate.net/publication/361249706_Ameliorating_data_compression_and_query_performance_through_cracked_Parquet" rel="noopener noreferrer"&gt;Ameliorating Data Compression and Query Performance Through Cracked Parquet&lt;/a&gt; — Hansert, Patrick &amp;amp; Michel, Sebastian. (2022). Ameliorating data compression and query performance through cracked Parquet. 1-7. 10.1145/3530050.3532923. &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>datalakes</category>
      <category>datacompression</category>
      <category>analytics</category>
      <category>spark</category>
    </item>
    <item>
      <title>My process over to be Claude Certified Architect (Foundations)</title>
      <dc:creator>Israel Mendes</dc:creator>
      <pubDate>Sun, 21 Jun 2026 08:47:51 +0000</pubDate>
      <link>https://dev.to/israel_mendes/my-process-over-to-be-claude-certified-architect-foundations-19d2</link>
      <guid>https://dev.to/israel_mendes/my-process-over-to-be-claude-certified-architect-foundations-19d2</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Important to mention that the certification is quite new, and I assume that the tips here can become a bit outdated in a few months. So consider that before studying for the certification and always check the &lt;a href="https://everpath-course-content.s3-accelerate.amazonaws.com/instructor%2F8lsy243ftffjjy1cx9lm3o2bw%2Fpublic%2F1773274827%2FClaude+Certified+Architect+%E2%80%93+Foundations+Certification+Exam+Guide.pdf" rel="noopener noreferrer"&gt;Exam Guide&lt;/a&gt; for the latest information from Anthropic.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I decided to take advantage of the fact that the company I work for, &lt;a href="https://caylent.com/anthropic" rel="noopener noreferrer"&gt;Caylent&lt;/a&gt;, is an Anthropic partner and study for the &lt;a href="https://anthropic.skilljar.com/claude-certified-architect-foundations-access-request" rel="noopener noreferrer"&gt;Claude Certified Architect - Foundations&lt;/a&gt; exam. I've written about my experience with other certifications, and this one was special because it doesn't have a lot of materials out there. Because of that, I had many people asking about my process, so I'm sharing here a longer version to assist others.&lt;/p&gt;

&lt;p&gt;Talking about about the test: it has 60 questions, and it is divided into 5 core competencies:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8tu85uhm79n47utiuo44.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8tu85uhm79n47utiuo44.png" alt="anthropic core competencies" width="799" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Important to say that those competencies are a bit distinct from the scenarios that you will face. My understanding is that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Core competency&lt;/strong&gt;: Basic elements that you will be evaluated on&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exam scenario&lt;/strong&gt;: A situation that will evaluate the core competency. You will not be evaluated for every scenario. Each exam draws 4 scenarios at random from this set of 6. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The scenarios are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer Support Resolution Agent&lt;/li&gt;
&lt;li&gt;Code Generation with Claude Code&lt;/li&gt;
&lt;li&gt;Multi-Agent Research System&lt;/li&gt;
&lt;li&gt;Developer Productivity with Claude&lt;/li&gt;
&lt;li&gt;Claude Code for Continuous Integration&lt;/li&gt;
&lt;li&gt;Structured Data Extraction&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: The exam guide is your best friend, from the beginning to understand each core competency/exam scenario until the moment you access your results after you complete the exam.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's talk about my workflow in detail:&lt;/p&gt;

&lt;h2&gt;
  
  
  How did I study for it
&lt;/h2&gt;

&lt;p&gt;First, here is a summary of my numbers while studying for the certification:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start date&lt;/strong&gt;: April 11&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;End date&lt;/strong&gt;: April 26

&lt;ol&gt;
&lt;li&gt;I spent, roughly, 16 days in this study process&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total questions responded to in practice exams&lt;/strong&gt;: 480&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;An &lt;strong&gt;important disclaimer&lt;/strong&gt;: Keep in mind that I was able to take the exam in around 2 weeks because I work with Claude (specifically Code, Agent SDK, and with MCPs) daily. Your situation can be different, and you may need more time to prepare. Plan accordingly because, if you don't pass the exam, you will need to wait another 6 months to retake it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My process was honestly straightforward. I will list the main resources at the end of the section, but here is how I did it before the exam:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Before the study of the certification, I built some applications in Python using the &lt;a href="https://code.claude.com/docs/en/agent-sdk/overview" rel="noopener noreferrer"&gt;Agent SDK&lt;/a&gt;. I recommend having some hands-on experience there, like building something with Claude Code, developing an MCP or multi-agent product to make it easier for your learning.&lt;/li&gt;
&lt;li&gt;I started to take some courses on Anthropic Academy and to read some blog posts related to the agents and LLMs in general&lt;/li&gt;
&lt;li&gt;Went over the practice exams. That was the most consuming part. I would take maybe 2 hours to go over 60 questions and take notes of my mistakes, then do another 60 questions and another 2-hour session.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Once I started to notice the patterns based on the questions I faced on the mock/practice exams, I would feed the Exam Guide to Claude and ask it to generate questions on my mistakes/failures. This helped me a lot to advance on my weaknesses:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbxdvlha9dzgdbgeil8qs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbxdvlha9dzgdbgeil8qs.png" alt="questions generated by claude" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Analysis Prior Exam
&lt;/h3&gt;

&lt;p&gt;Every time that I would go over some practice/mock exam, I would "log" my performance per competency and major score overall in a simple spreadsheet. Right in the last few days of my preparation, I used that to feed into Claude, and I asked it to generate some interesting insights that I want to share here:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb9ir16xwckj2eyezj274.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb9ir16xwckj2eyezj274.png" alt="practice exam analysis, via claude" width="799" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Above, we have some basic numbers, which are useful overall to understand if I'm good to move forward with the exam or not. But let's dive into it. Here are my score per mock/practice exam that I took:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkm7kjy1gk2u52kjp88q4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkm7kjy1gk2u52kjp88q4.png" alt="score track from practice exams" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This section below was the most important for me: instead of spending time reviewing questions and competencies/domains that I already had some good knowledge of, I would plot and see which ones I could improve (or which ones I needed to pay more attention to because of the relevance in the exam structure). For example, the main ones that I spent time on in the last days of the exams were (in order of priority):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Prompt Engineering &amp;amp; Structured Output&lt;/li&gt;
&lt;li&gt;Agentic Architecture &amp;amp; Orchestration&lt;/li&gt;
&lt;li&gt;Claude Code Configuration &amp;amp; Workflows&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffwsxnxgzlexevtqxvsyu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffwsxnxgzlexevtqxvsyu.png" alt="main points missing for the claude certification preparation" width="800" height="303"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw87hx5oy4sml9ganv74u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw87hx5oy4sml9ganv74u.png" alt="performance per domain, for the claude certification" width="799" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Aim to track your performance when going over the questions, and try to break it down into smaller buckets (per competency, scenario, domain, tools). This can help you identify which areas to put your time and priority on to improve your overall results.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the end, I asked Claude to generate a &lt;code&gt;Diagnosis&lt;/code&gt; based on ways that I could improve. Each issue had a priority (based on the score and impact). It is pretty much aligned with the domain insights that I brought up in the previous paragraph.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc7mrcvw5k7svn9qg6iab.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc7mrcvw5k7svn9qg6iab.png" alt="diagnosis of my performance for the claude certification" width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With those numbers, I was able to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Spend less time in my preparation by focusing on the main things that I was failing (like specific competencies or domains)&lt;/li&gt;
&lt;li&gt;I felt more confident over time, which helped me find the right moment to take the exam&lt;/li&gt;
&lt;li&gt;Stop doing certain tactics that were not working, like spending too much time on verbose questions that were not helping to improve my scores and knowledge overall. That is one of the insights from &lt;code&gt;Diagnosis&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With those insights, let's dive into the materials that I used for my preparation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;p&gt;Here is a summary of items that I used in the process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Anthropic Academy:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://anthropic.skilljar.com/claude-with-the-anthropic-api" rel="noopener noreferrer"&gt;Building with the Claude API&lt;/a&gt; (The most important one, which covers the main topics. If you want to focus on one course, this is it)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://anthropic.skilljar.com/introduction-to-subagents" rel="noopener noreferrer"&gt;Introduction to subagents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://anthropic.skilljar.com/model-context-protocol-advanced-topics" rel="noopener noreferrer"&gt;Model Context Protocol: Advanced Topics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blog posts and other resources:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://platform.claude.com/cookbook/claude-agent-sdk-00-the-one-liner-research-agent" rel="noopener noreferrer"&gt;The one-liner research agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/engineering/multi-agent-research-system" rel="noopener noreferrer"&gt;How we built our multi-agent research system&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Practice Exams/Questions:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://anthropic.skilljar.com/anthropic-certification-practice-exam" rel="noopener noreferrer"&gt;Practice Exam: Claude Certified Architect – Foundations Certification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.certsafari.com/anthropic/claude-certified-architect" rel="noopener noreferrer"&gt;CertSafari&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/claude-certified-architect-foundations-cca-f-practice-exams/" rel="noopener noreferrer"&gt;Udemy - TutorialDojo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;del&gt;Udemy - Sundog Education&lt;/del&gt; (I don't recommend that one, because of the reason below)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: Avoid practice/mock exams that have verbose text and multi-layered distractors that all sound plausible. The exam is a "foundations" one, so the expectations are scenario-based questions with more expected elements of the competencies.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;Once I completed the exam on the Anthropic site, the next day I got the results and the score (&lt;code&gt;801/1000&lt;/code&gt;), which I noticed was close to the practice exam projected score that Claude generated (details on the previous section of this blog post).&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fri97r337fxvk332qgjon.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fri97r337fxvk332qgjon.png" alt="exam exists via email" width="799" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Worth it?
&lt;/h3&gt;

&lt;p&gt;As always, I like to think it was beneficial for me to spend the time on it or not. For me, it was. I learned a lot more about how to use AI efficiently in my workflow and in production systems. I understand that the exam right now is a bit hard to get since you need to work with a partner to take the test. If you do have the chance to go over it, I recommend you study for it and take the exam!&lt;/p&gt;

</description>
      <category>claude</category>
      <category>certification</category>
      <category>genai</category>
    </item>
  </channel>
</rss>
