{"id":2165,"date":"2026-07-10T17:00:00","date_gmt":"2026-07-10T17:00:00","guid":{"rendered":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/"},"modified":"2026-07-11T04:59:10","modified_gmt":"2026-07-11T04:59:10","slug":"i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer","status":"publish","type":"post","link":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/","title":{"rendered":"I Constructed My Second ETL Pipeline. This Time, I Began Pondering Like a Knowledge Engineer"},"content":{"rendered":"<p><br \/>\n<\/p>\n<div>\n<p class=\"wp-block-paragraph\">, I made a decision I wished to transition from knowledge analyst to knowledge engineer.<\/p>\n<p class=\"wp-block-paragraph\">Like many individuals beginning out, I used to be overwhelmed by the sheer variety of issues I assumed I wanted to study. Knowledge warehouses, orchestration instruments, distributed processing, streaming programs, cloud platforms, infrastructure. The listing appeared limitless.<\/p>\n<p class=\"wp-block-paragraph\">As a substitute of attempting to study all the pieces without delay, I took a unique strategy.<\/p>\n<p class=\"wp-block-paragraph\">I created a 12-month self-study roadmap constructed round one easy concept: study by constructing.<\/p>\n<p class=\"wp-block-paragraph\">Somewhat than leaping from one tutorial to a different, I might construct a sequence of small tasks. Every venture would introduce just a few new ideas whereas reinforcing what I had realized earlier than. The aim wasn\u2019t to construct probably the most refined purposes doable. It was to develop the behavior of considering like an engineer by fixing one downside at a time.<\/p>\n<p class=\"wp-block-paragraph\">The primary venture in that journey was a GitHub ETL pipeline. It started as a easy Python script that fetched repository knowledge and exported it to a CSV file. As I realized extra, I steadily improved it. I changed CSV recordsdata with SQLite, made the pipeline idempotent to stop duplicate knowledge, and finally automated it with GitHub Actions.<\/p>\n<p class=\"wp-block-paragraph\">By the point I completed, I noticed one thing that hadn\u2019t been apparent once I began.<\/p>\n<p class=\"wp-block-paragraph\">Constructing the ETL logic was truly the straightforward half.<\/p>\n<p class=\"wp-block-paragraph\">The more durable questions appeared as soon as I finished fascinated about a script that runs as soon as and began fascinated about a system that should run over and over with out me watching it.<\/p>\n<p>How ought to it&#8217;s scheduled?<\/p>\n<p>What occurs if it fails midway by?<\/p>\n<p>The place ought to retry logic reside?<\/p>\n<p>How do you package deal the appliance so it runs the identical method in every single place?<\/p>\n<p class=\"wp-block-paragraph\">These questions taught me much more about knowledge engineering than parsing JSON or writing SQL ever did.<\/p>\n<p class=\"wp-block-paragraph\">That first venture left me with one other problem.<\/p>\n<p class=\"wp-block-paragraph\">GitHub Actions labored properly for automating a small ETL pipeline, however I wished to grasp what adjustments if you use a workflow orchestrator constructed particularly for knowledge engineering. I wished to find out how engineers separate orchestration from execution, how containerized workloads match into that image, and what a production-minded pipeline truly seems like, even on a small scale.<\/p>\n<p class=\"wp-block-paragraph\">So for my second venture, I made a decision to construct an automatic RSS ingestion pipeline.<\/p>\n<p class=\"wp-block-paragraph\">On the floor, it\u2019s a reasonably easy utility. It fetches articles from an RSS feed, parses them into structured objects, and shops them in PostgreSQL.<\/p>\n<p class=\"wp-block-paragraph\">However the aim was by no means to construct an RSS reader.<\/p>\n<p class=\"wp-block-paragraph\">The aim was to discover the engineering choices that rework a Python script right into a dependable knowledge pipeline.<\/p>\n<p class=\"wp-block-paragraph\">On this article, I\u2019ll stroll by these choices, the errors I made alongside the best way, and the teachings I realized constructing my first pipeline with Kestra.<\/p>\n<h2 class=\"wp-block-heading\">Why Construct One other ETL Pipeline?<\/h2>\n<p class=\"wp-block-paragraph\">After ending my first ETL venture, I thought of transferring on to one thing fully completely different.<\/p>\n<p class=\"wp-block-paragraph\">Possibly an information warehouse venture. Possibly Apache Spark. Possibly an API with a extra complicated transformation layer.<\/p>\n<p class=\"wp-block-paragraph\">As a substitute, I constructed\u2026 one other ETL pipeline.<\/p>\n<p class=\"wp-block-paragraph\">At first, that in all probability appears like a step backwards.<\/p>\n<p class=\"wp-block-paragraph\">In spite of everything, I\u2019d already constructed an extraction pipeline, made it idempotent, and scheduled it with GitHub Actions. Why repeat the identical train?<\/p>\n<p class=\"wp-block-paragraph\">As a result of I wasn\u2019t attempting to study a brand new dataset. I used to be attempting to study a brand new mind-set.<\/p>\n<p class=\"wp-block-paragraph\">One lesson from my first venture caught with me.<\/p>\n<p class=\"wp-block-paragraph\">Writing the ETL logic wasn\u2019t the troublesome half. The troublesome half was all the pieces surrounding it.<\/p>\n<p>How ought to the pipeline be executed?<\/p>\n<p>How ought to it get better from failures?<\/p>\n<p>How do you package deal it so it runs constantly on any machine?<\/p>\n<p>The place does scheduling belong?<\/p>\n<p class=\"wp-block-paragraph\">And maybe the most important query of all:<\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">The place ought to the obligations of the appliance finish, and the place ought to the obligations of the orchestration layer start?<\/p>\n<\/blockquote>\n<p class=\"wp-block-paragraph\">These questions don\u2019t have a lot to do with RSS feeds or GitHub repositories. They\u2019re engineering questions, and I noticed I might discover them with nearly any knowledge supply.<\/p>\n<p class=\"wp-block-paragraph\">That\u2019s why I selected an RSS feed.<\/p>\n<p class=\"wp-block-paragraph\">Not as a result of RSS is especially thrilling, however as a result of it\u2019s deliberately easy.<\/p>\n<p class=\"wp-block-paragraph\">The extraction logic solely takes just a few traces of Python. That meant I might spend much less time worrying about enterprise logic and extra time fascinated about structure.<\/p>\n<p class=\"wp-block-paragraph\">For a similar motive, I made a decision to maneuver away from GitHub Actions for this venture.<\/p>\n<p class=\"wp-block-paragraph\">GitHub Actions was an awesome introduction to scheduling. It confirmed me the best way to automate a workflow and gave me my first style of working an ETL pipeline with out guide intervention.<\/p>\n<p class=\"wp-block-paragraph\">However GitHub Actions isn\u2019t designed particularly for orchestrating knowledge workflows.<\/p>\n<p class=\"wp-block-paragraph\">I wished to grasp what adjustments if you use a software that\u2019s constructed with knowledge pipelines in thoughts.<\/p>\n<p class=\"wp-block-paragraph\">That\u2019s what led me to Kestra.<\/p>\n<p class=\"wp-block-paragraph\">Somewhat than asking, \u201cHow do I run this Python script each hour?\u201d, I discovered myself asking a unique set of questions.<\/p>\n<p>How ought to retries be configured?<\/p>\n<p>How are workflow executions tracked?<\/p>\n<p>How ought to atmosphere variables be handed right into a container?<\/p>\n<p>What does a failed execution appear like?<\/p>\n<p>How do you separate the appliance from the infrastructure that runs it?<\/p>\n<p class=\"wp-block-paragraph\">These questions have been precisely what I wished to discover.<\/p>\n<p class=\"wp-block-paragraph\">By selecting a easy ETL pipeline, I might deal with the engineering choices as an alternative of getting distracted by difficult enterprise logic.<\/p>\n<p class=\"wp-block-paragraph\">Wanting again, I believe that was the correct determination.<\/p>\n<p class=\"wp-block-paragraph\">This venture isn\u2019t fascinating as a result of it processes RSS feeds.<\/p>\n<p class=\"wp-block-paragraph\">It\u2019s fascinating as a result of constructing it compelled me to consider reliability, repeatability, and orchestration in a method my first venture by no means did.<\/p>\n<h2 class=\"wp-block-heading\">The First Architectural Determination: Docker Earlier than Kestra<\/h2>\n<p class=\"wp-block-paragraph\">With the venture outlined, my first intuition was to leap straight into Kestra.<\/p>\n<p class=\"wp-block-paragraph\">In spite of everything, orchestration was one of many essential causes I selected this venture. Why not begin there?<\/p>\n<p class=\"wp-block-paragraph\">As a substitute, I did one thing that turned out to avoid wasting me loads of frustration later.<\/p>\n<p class=\"wp-block-paragraph\">I ignored Kestra fully.<\/p>\n<p class=\"wp-block-paragraph\">Which may sound counterintuitive, however I wished to keep away from introducing a number of transferring elements earlier than I knew the core utility truly labored.<\/p>\n<p class=\"wp-block-paragraph\">So I constructed the venture in layers.<\/p>\n<p class=\"wp-block-paragraph\">First, I wrote the Python ETL.<\/p>\n<p class=\"wp-block-paragraph\">Its job was deliberately small. Fetch the RSS feed, parse every entry into an Article object, and save the outcomes to PostgreSQL. Nothing extra.<\/p>\n<p>feed = feedparser.parse(RSS_URL)<\/p>\n<p>articles = parse_feed(feed)<\/p>\n<p>save_articles(articles)<\/p>\n<p class=\"wp-block-paragraph\">That\u2019s actually all of the ETL did. I deliberately saved the appliance small as a result of the main focus of this venture wasn\u2019t the transformation logic. It was all the pieces that occurred round it.<\/p>\n<p class=\"wp-block-paragraph\">As soon as that labored reliably, I turned my consideration to the database.<\/p>\n<p class=\"wp-block-paragraph\">I wished repeated executions to be protected, so I made the inserts idempotent utilizing PostgreSQL\u2019s ON CONFLICT DO NOTHING. That method, working the pipeline a number of occasions wouldn\u2019t create duplicate rows.<\/p>\n<p>INSERT INTO articles (&#8230;)<br \/>\nVALUES (&#8230;)<br \/>\nON CONFLICT (id) DO NOTHING;<\/p>\n<p class=\"wp-block-paragraph\">This one line made the pipeline protected to execute repeatedly. Whether or not Kestra ran the workflow as soon as or 100 occasions, PostgreSQL grew to become answerable for stopping duplicate data.<\/p>\n<p class=\"wp-block-paragraph\">Solely after the ETL and database labored collectively did I introduce Docker.<\/p>\n<p class=\"wp-block-paragraph\">That call modified how I assumed in regards to the venture.<\/p>\n<p class=\"wp-block-paragraph\">Initially, Docker felt like one other software I wanted to study.<\/p>\n<p class=\"wp-block-paragraph\">By the top of the venture, I noticed it had turn out to be one thing far more essential.<\/p>\n<p class=\"wp-block-paragraph\">It grew to become the unit of execution.<\/p>\n<p>FROM python:3.13-slim<\/p>\n<p>WORKDIR \/app<\/p>\n<p>COPY necessities.txt .<br \/>\nRUN pip set up &#8211;no-cache-dir -r necessities.txt<\/p>\n<p>COPY . .<\/p>\n<p>CMD [&#8220;python&#8221;, &#8220;fetch_rss.py&#8221;]<\/p>\n<p class=\"wp-block-paragraph\">Packaging the ETL this manner meant the appliance grew to become self-contained. As a substitute of asking Kestra to grasp my Python venture, I might merely ask it to run a container that already knew the best way to execute the pipeline.<\/p>\n<p class=\"wp-block-paragraph\">As a substitute of considering, \u201cKestra will run my Python script,\u201d I began considering, \u201cKestra will run my Docker picture.\u201d<\/p>\n<p class=\"wp-block-paragraph\">That distinction might sound delicate, nevertheless it fully adjustments the connection between your utility and your orchestration layer.<\/p>\n<p class=\"wp-block-paragraph\">As soon as the ETL was packaged right into a container, it not mattered whether or not it ran on my laptop computer, inside Kestra, or on one other machine solely.<\/p>\n<p class=\"wp-block-paragraph\">The runtime atmosphere was all the time the identical.<\/p>\n<p class=\"wp-block-paragraph\">That consistency gave me one thing I didn\u2019t have earlier than: confidence.<\/p>\n<p class=\"wp-block-paragraph\">Earlier than introducing Kestra, I might run the container manually and confirm that it fetched the RSS feed, linked to PostgreSQL, and endured the anticipated data.<\/p>\n<p class=\"wp-block-paragraph\">If one thing failed, I knew the issue wasn\u2019t hidden behind one other layer of orchestration.<\/p>\n<p class=\"wp-block-paragraph\">That validation step turned out to be extremely helpful later.<\/p>\n<p class=\"wp-block-paragraph\">Throughout improvement, I bumped into points with networking, container configuration, and workflow execution. As a result of the Docker picture had already been validated independently, I might instantly rule out the ETL itself and deal with the orchestration layer.<\/p>\n<p class=\"wp-block-paragraph\">That made debugging dramatically simpler.<\/p>\n<p class=\"wp-block-paragraph\">Wanting again, I believe this was one of many largest classes from the venture.<\/p>\n<p class=\"wp-block-paragraph\">It\u2019s tempting to attach each element collectively as shortly as doable and hope all the pieces works.<\/p>\n<p class=\"wp-block-paragraph\">A greater strategy is to validate every layer earlier than introducing the following one.<\/p>\n<p class=\"wp-block-paragraph\">On this venture, the order seemed like this:<\/p>\n<p>Validate the Python ETL.<\/p>\n<p>Validate PostgreSQL persistence.<\/p>\n<p>Validate the Docker picture.<\/p>\n<p>Lastly, let Kestra orchestrate a container that I already trusted.<\/p>\n<p class=\"wp-block-paragraph\">Every layer constructed on the earlier one.<\/p>\n<p class=\"wp-block-paragraph\">By the point Kestra entered the image, I wasn\u2019t attempting to debug Python, PostgreSQL, Docker, and orchestration on the similar time.<\/p>\n<p class=\"wp-block-paragraph\">I used to be solely fixing one downside.<\/p>\n<p class=\"wp-block-paragraph\">That incremental strategy made all the venture really feel far more manageable, and it\u2019s a workflow I\u2019ll in all probability proceed utilizing on future knowledge engineering tasks.<\/p>\n<h2 class=\"wp-block-heading\">The Assumption That Turned Out to Be Unsuitable<\/h2>\n<p class=\"wp-block-paragraph\">With a working Docker picture, I used to be satisfied the laborious half was over.<\/p>\n<p>I had a Python ETL that labored.<\/p>\n<p>I had PostgreSQL working in Docker.<\/p>\n<p>I had verified that the container might fetch RSS articles and save them to the database.<\/p>\n<p class=\"wp-block-paragraph\">Now all Kestra needed to do was run it.<\/p>\n<p class=\"wp-block-paragraph\">Or so I assumed.<\/p>\n<p class=\"wp-block-paragraph\">My authentic assumption was easy.<\/p>\n<p class=\"wp-block-paragraph\">Kestra would level to my Python recordsdata, execute the script, and all the pieces would work precisely because it had from the command line.<\/p>\n<p class=\"wp-block-paragraph\">It didn\u2019t.<\/p>\n<p class=\"wp-block-paragraph\">I shortly found that there was an essential distinction I hadn\u2019t absolutely appreciated.<\/p>\n<p class=\"wp-block-paragraph\">Kestra is an orchestrator.<\/p>\n<p class=\"wp-block-paragraph\">It isn\u2019t answerable for constructing Python environments or managing utility dependencies. Its duty is deciding when and the way workloads ought to run.<\/p>\n<p class=\"wp-block-paragraph\">That realization modified the course of the venture.<\/p>\n<p class=\"wp-block-paragraph\">As a substitute of treating Kestra as one other place to execute Python code, I began treating it because the layer answerable for orchestrating a workload that already existed.<\/p>\n<p class=\"wp-block-paragraph\">That workload was my Docker picture.<\/p>\n<p class=\"wp-block-paragraph\">As soon as I made that psychological shift, the structure grew to become a lot cleaner.<\/p>\n<p>The ETL grew to become a self-contained utility.<\/p>\n<p>Docker grew to become the deployment artifact.<\/p>\n<p>Kestra grew to become the orchestrator.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/contributor.insightmediagroup.io\/wp-content\/uploads\/2026\/07\/arch-diagram1.png\" alt=\"\" class=\"wp-image-672702\"\/><\/figure>\n<p class=\"wp-block-paragraph\">Every layer had a transparent duty, and none of them wanted to know the way the others labored internally.<\/p>\n<p class=\"wp-block-paragraph\">Apparently, reaching that time wasn\u2019t fully easy.<\/p>\n<p class=\"wp-block-paragraph\">My first intuition was to discover a method for Kestra to execute the Python venture straight. That strategy sounded less complicated, however the extra I experimented with it, the extra I noticed I used to be asking the orchestrator to take duty for one thing the appliance ought to already present.<\/p>\n<p class=\"wp-block-paragraph\">As soon as I embraced Docker because the execution artifact, the workflow grew to become a lot less complicated.<\/p>\n<p class=\"wp-block-paragraph\">Some approaches seemed promising at first however launched pointless complexity. Others labored, however didn\u2019t align with how Kestra encourages containerized workloads to be executed.<\/p>\n<p class=\"wp-block-paragraph\">Ultimately, I landed on a workflow that felt surprisingly easy.<\/p>\n<p class=\"wp-block-paragraph\">As a substitute of attempting to show Kestra the best way to run Python, I let Kestra do what it does finest.<\/p>\n<p class=\"wp-block-paragraph\">It launches a container.<\/p>\n<p>duties:<br \/>\n  &#8211; id: run_etl<br \/>\n    sort: io.kestra.plugin.scripts.shell.Instructions<\/p>\n<p>    containerImage: rss-pipeline-etl:newest<\/p>\n<p>    taskRunner:<br \/>\n      sort: io.kestra.plugin.scripts.runner.docker.Docker<\/p>\n<p>    instructions:<br \/>\n      &#8211; python \/app\/fetch_rss.py<\/p>\n<p class=\"wp-block-paragraph\">Wanting on the workflow now, what stands out isn\u2019t how a lot YAML it accommodates. It\u2019s how little Kestra truly must learn about my utility. Its solely duty is to launch a container that already is aware of the best way to execute the ETL.<\/p>\n<p class=\"wp-block-paragraph\">Inside that container, my utility already is aware of precisely what to do.<\/p>\n<p class=\"wp-block-paragraph\">That small architectural change solved extra than simply the rapid execution downside.<\/p>\n<p class=\"wp-block-paragraph\">It additionally strengthened an concept that\u2019s changing into a recurring theme in my studying journey.<\/p>\n<p class=\"wp-block-paragraph\">Good engineering usually isn\u2019t about including one other layer.<\/p>\n<p class=\"wp-block-paragraph\">It\u2019s about giving every layer a single duty and permitting it to try this job properly.<\/p>\n<p>Python shouldn\u2019t fear about orchestration.<\/p>\n<p>Kestra shouldn\u2019t fear about Python dependencies.<\/p>\n<p>Docker shouldn\u2019t know something about RSS feeds.<\/p>\n<p class=\"wp-block-paragraph\">Every element solves a unique downside.<\/p>\n<p class=\"wp-block-paragraph\">As soon as I finished asking one software to unravel each downside, all the system grew to become a lot simpler to motive about.<\/p>\n<p class=\"wp-block-paragraph\">Wanting again, this was in all probability the most important mindset shift in the entire venture.<\/p>\n<p class=\"wp-block-paragraph\">I didn\u2019t simply discover ways to use Kestra.<\/p>\n<p class=\"wp-block-paragraph\">I realized what orchestration truly means.<\/p>\n<h2 class=\"wp-block-heading\">As soon as a Pipeline Runs Mechanically, Every little thing Modifications<\/h2>\n<p class=\"wp-block-paragraph\">Up till this level, I had been working the pipeline manually.<\/p>\n<p class=\"wp-block-paragraph\">If one thing failed, I used to be sitting in entrance of my pc. I might learn the error, make a change, and check out once more.<\/p>\n<p class=\"wp-block-paragraph\">That security web disappears the second a pipeline begins working by itself.<\/p>\n<p class=\"wp-block-paragraph\">One of many first issues I configured in Kestra was a easy hourly schedule.<\/p>\n<p>triggers:<br \/>\n  &#8211; id: hourly_schedule<br \/>\n    sort: io.kestra.plugin.core.set off.Schedule<br \/>\n    cron: &#8220;0 * * * *&#8221;<\/p>\n<p class=\"wp-block-paragraph\">On paper, it was only a cron expression.<\/p>\n<p class=\"wp-block-paragraph\">In apply, it represented a a lot greater shift.<\/p>\n<p class=\"wp-block-paragraph\">The pipeline not trusted me remembering to run it.<\/p>\n<p class=\"wp-block-paragraph\">Each hour, Kestra would begin a brand new execution, launch the ETL container, and course of the newest articles from the RSS feed.<\/p>\n<p class=\"wp-block-paragraph\">That instantly raised one other query.<\/p>\n<p class=\"wp-block-paragraph\">What occurs if a kind of executions fails?<\/p>\n<p class=\"wp-block-paragraph\">Throughout improvement, I intentionally launched failures to reply that query. I pointed the pipeline at an invalid database host and watched what occurred.<\/p>\n<p class=\"wp-block-paragraph\">The primary execution failed, precisely as anticipated.<\/p>\n<p class=\"wp-block-paragraph\">Extra importantly, it didn\u2019t cease there.<\/p>\n<p class=\"wp-block-paragraph\">As a result of the workflow was configured with retries, Kestra routinely tried the execution once more after a brief delay. <\/p>\n<p>retry:<br \/>\n  sort: fixed<br \/>\n  maxAttempts: 3<br \/>\n  interval: PT30S<\/p>\n<p class=\"wp-block-paragraph\">That was one in every of my favourite moments within the venture.<\/p>\n<p class=\"wp-block-paragraph\">As soon as I corrected the configuration, the workflow accomplished efficiently with out requiring any adjustments to the appliance itself.<\/p>\n<p class=\"wp-block-paragraph\">That was one in every of my favourite moments within the venture.<\/p>\n<p class=\"wp-block-paragraph\">Not as a result of retries are significantly difficult, however as a result of they highlighted one other separation of obligations.<\/p>\n<p class=\"wp-block-paragraph\">The ETL shouldn\u2019t resolve whether or not it deserves one other likelihood.<\/p>\n<p class=\"wp-block-paragraph\">That\u2019s an orchestration concern.<\/p>\n<p class=\"wp-block-paragraph\">By transferring retry logic into Kestra, the Python utility remained centered on a single duty: course of the feed and persist the outcomes.<\/p>\n<p class=\"wp-block-paragraph\">The orchestration layer dealt with resilience.<\/p>\n<p class=\"wp-block-paragraph\">Scheduling launched one other problem that I\u2019d already encountered in my first ETL venture.<\/p>\n<p class=\"wp-block-paragraph\">Repeated executions imply repeated makes an attempt to put in writing knowledge.<\/p>\n<p class=\"wp-block-paragraph\">If the identical RSS article seems in a number of hourly runs, the pipeline shouldn\u2019t insert it twice.<\/p>\n<p class=\"wp-block-paragraph\">Thankfully, I had already solved the same downside earlier than.<\/p>\n<p class=\"wp-block-paragraph\">The database layer was designed to be idempotent utilizing PostgreSQL\u2019s ON CONFLICT DO NOTHING.<\/p>\n<p>INSERT INTO articles (&#8230;)<br \/>\nVALUES (&#8230;)<br \/>\nON CONFLICT (id) DO NOTHING;<\/p>\n<p class=\"wp-block-paragraph\">That meant each execution might safely try and insert the identical data with out creating duplicates.<\/p>\n<p class=\"wp-block-paragraph\">The mix of scheduling, retries, and idempotent writes made the pipeline far more forgiving.<\/p>\n<p class=\"wp-block-paragraph\">If a run failed, Kestra might retry it.<\/p>\n<p class=\"wp-block-paragraph\">If a profitable retry encountered knowledge that had already been written, PostgreSQL would merely ignore the duplicates.<\/p>\n<p class=\"wp-block-paragraph\">Neither layer wanted to know what the opposite was doing.<\/p>\n<p class=\"wp-block-paragraph\">They every dealt with their very own duty.<\/p>\n<p class=\"wp-block-paragraph\">The final enchancment was visibility.<\/p>\n<p class=\"wp-block-paragraph\">Early in improvement, my logs seemed precisely such as you\u2019d count on from a venture that was nonetheless being debugged.<\/p>\n<p class=\"wp-block-paragraph\">I printed complete RSS objects to the console simply to ensure the parser was working.<\/p>\n<p class=\"wp-block-paragraph\">It wasn\u2019t fairly, nevertheless it served its objective.<\/p>\n<p class=\"wp-block-paragraph\">Because the pipeline grew to become extra secure, these debug statements grew to become much less helpful.<\/p>\n<p class=\"wp-block-paragraph\">I changed them with logs that described the execution as an alternative of dumping uncooked knowledge.<\/p>\n<h3 class=\"wp-block-heading\">Earlier than<\/h3>\n<p>print(feed.entries[0])<\/p>\n<h3 class=\"wp-block-heading\">After<\/h3>\n<p>print(&#8220;=== RSS PIPELINE START ===&#8221;)<\/p>\n<p>first = feed.entries[0]<\/p>\n<p>print(&#8220;First entry preview:&#8221;)<br \/>\nprint(f&#8221;Title: {first.get(&#8216;title&#8217;)}&#8221;)<br \/>\nprint(f&#8221;Hyperlink: {first.get(&#8216;hyperlink&#8217;)}&#8221;)<\/p>\n<p>print(f&#8221;Feed title: {feed.feed.title}&#8221;)<br \/>\nprint(f&#8221;Fetched articles: {len(articles)}&#8221;)<br \/>\nprint(f&#8221;Saved {len(articles)} articles to the database.&#8221;)<\/p>\n<p>print(&#8220;=== RSS PIPELINE END ===&#8221;)<\/p>\n<p class=\"wp-block-paragraph\">Every run now tells a easy story.<\/p>\n<p>=== RSS PIPELINE START ===<\/p>\n<p>First entry preview:<br \/>\nTitle: Christian Ledermann: Migrate From mypy To ty And pyrefly<br \/>\nHyperlink: https:\/\/dev.to\/&#8230;<\/p>\n<p>Feed title: Planet Python<br \/>\nFetched articles: 25<br \/>\nSaved 25 articles to the database.<\/p>\n<p>=== RSS PIPELINE END ===<\/p>\n<p class=\"wp-block-paragraph\">These adjustments didn\u2019t make the appliance smarter. They made it simpler to grasp. And that\u2019s an essential distinction.<\/p>\n<p class=\"wp-block-paragraph\">Good observability isn\u2019t about producing extra logs. It\u2019s about producing the correct logs.<\/p>\n<p class=\"wp-block-paragraph\">By the top of the venture, I noticed one thing fascinating. The Python code hadn\u2019t grown dramatically. Many of the work had occurred round it.<\/p>\n<p class=\"wp-block-paragraph\">Wanting again, a lot of the engineering effort wasn\u2019t spent making the ETL smarter. It was spent making it extra dependable.<\/p>\n<p>Scheduling ensured it ran with out me.<\/p>\n<p>Retries helped it get better from transient failures.<\/p>\n<p>Idempotency protected the database from duplicate writes.<\/p>\n<p>Logging made each execution simpler to grasp.<\/p>\n<p class=\"wp-block-paragraph\">Individually, none of those adjustments have been significantly complicated. Collectively, they reworked a easy Python script into one thing that behaved far more like a manufacturing system.<\/p>\n<h2 class=\"wp-block-heading\">The Last Structure<\/h2>\n<p class=\"wp-block-paragraph\">By the top of the venture, the structure had settled into one thing that felt surprisingly easy.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/contributor.insightmediagroup.io\/wp-content\/uploads\/2026\/07\/etl2.png\" alt=\"\" class=\"wp-image-672707\"\/><\/figure>\n<p class=\"wp-block-paragraph\">Wanting on the last structure, it\u2019s tempting to suppose the venture was all the time heading on this course.<\/p>\n<p class=\"wp-block-paragraph\">It wasn\u2019t.<\/p>\n<p class=\"wp-block-paragraph\">Every layer was added solely after the earlier one had been validated.<\/p>\n<p>The ETL got here first.<\/p>\n<p>Then PostgreSQL.<\/p>\n<p>Then Docker.<\/p>\n<p>Lastly, Kestra.<\/p>\n<p class=\"wp-block-paragraph\">That order mattered.<\/p>\n<p class=\"wp-block-paragraph\">As a result of each element had already been examined independently, I by no means discovered myself debugging Python, Docker, PostgreSQL, and Kestra on the similar time. Every determination lowered the variety of unknowns as an alternative of accelerating them.<\/p>\n<p class=\"wp-block-paragraph\">Extra importantly, each element ended up with a transparent duty.<\/p>\n<p>Python is aware of the best way to fetch, parse, and persist RSS articles.<\/p>\n<p>PostgreSQL is aware of the best way to retailer knowledge safely and stop duplicates.<\/p>\n<p>Docker supplies a constant execution atmosphere.<\/p>\n<p>Kestra decides when the workload ought to run and what ought to occur if it fails.<\/p>\n<p class=\"wp-block-paragraph\">None of these parts are attempting to do one another\u2019s jobs.Mockingly, that\u2019s what made the completed system really feel a lot less complicated than I anticipated.<\/p>\n<h2 class=\"wp-block-heading\">What This Mission Modified In regards to the Method I Suppose<\/h2>\n<p class=\"wp-block-paragraph\">Once I began studying knowledge engineering, I assumed the troublesome half could be writing ETL code.<\/p>\n<p class=\"wp-block-paragraph\">That\u2019s what most newbie tutorials deal with.<\/p>\n<p>You discover ways to name an API.<\/p>\n<p>You rework the info.<\/p>\n<p>You reserve it someplace.<\/p>\n<p class=\"wp-block-paragraph\">Repeat.<\/p>\n<p class=\"wp-block-paragraph\">These are helpful abilities, however they\u2019re just one a part of the image.This venture taught me that the engineering begins after the script works.<\/p>\n<p class=\"wp-block-paragraph\">As soon as a pipeline is anticipated to run each hour, survive transient failures, keep away from duplicate knowledge, and produce logs that designate what occurred, the questions turn out to be far more fascinating.<\/p>\n<p class=\"wp-block-paragraph\">You\u2019re not fascinated about particular person capabilities. You\u2019re fascinated about programs.<\/p>\n<p class=\"wp-block-paragraph\">One of many largest mindset shifts for me was understanding the distinction between execution and orchestration.<\/p>\n<p class=\"wp-block-paragraph\">At first, these concepts felt nearly interchangeable. Now they really feel fully separate.<\/p>\n<p class=\"wp-block-paragraph\">The Python utility ought to deal with enterprise logic. The orchestrator ought to deal with when, the place, and the way that utility runs.<\/p>\n<p class=\"wp-block-paragraph\">Protecting these obligations separate made all the venture simpler to motive about.<\/p>\n<p class=\"wp-block-paragraph\">It additionally modified how I take into consideration Docker.<\/p>\n<p class=\"wp-block-paragraph\">Earlier than this venture, I noticed Docker primarily as a solution to package deal purposes.<\/p>\n<p class=\"wp-block-paragraph\">Now I see it as a deployment artifact.<\/p>\n<p class=\"wp-block-paragraph\">As soon as the ETL had been packaged right into a container and validated independently, I might cease worrying about whether or not it will behave in a different way inside Kestra.<\/p>\n<p class=\"wp-block-paragraph\">That confidence turned out to be one of many largest benefits of containerizing the appliance.<\/p>\n<p class=\"wp-block-paragraph\">Maybe an important lesson, although, had nothing to do with Kestra or Docker. It was the worth of constructing incrementally. <\/p>\n<p class=\"wp-block-paragraph\">Each main determination adopted the identical sample.<\/p>\n<p>Construct the smallest factor that works.<\/p>\n<p>Validate it.<\/p>\n<p>Solely then introduce the following layer.<\/p>\n<p class=\"wp-block-paragraph\">That strategy made the venture really feel a lot much less overwhelming than attempting to attach all the pieces collectively from the start.Wanting again, I believe that\u2019s a lesson I\u2019ll carry into each future venture, whatever the know-how.<\/p>\n<h2 class=\"wp-block-heading\">Wanting Forward<\/h2>\n<p class=\"wp-block-paragraph\">This RSS pipeline is just the second venture in my knowledge engineering studying journey. In comparison with my first ETL pipeline, the code itself isn\u2019t dramatically extra complicated. What modified was the best way I approached the issue.<\/p>\n<p class=\"wp-block-paragraph\">As a substitute of asking, \u201cHow do I write this script?\u201d, I discovered myself asking questions like:<\/p>\n<p>The place ought to this duty reside?<\/p>\n<p>What occurs if it fails?<\/p>\n<p>Can I run it repeatedly with out worrying about duplicate knowledge<\/p>\n<p>Can I belief it to run once I\u2019m not watching?<\/p>\n<p class=\"wp-block-paragraph\">These questions pushed me to suppose much less like somebody writing Python code and extra like somebody designing a system. And I think that\u2019s the actual worth of constructing tasks.<\/p>\n<p class=\"wp-block-paragraph\">Each venture teaches a brand new software. However the most effective tasks slowly change the best way you suppose. This one definitely did.<\/p>\n<p class=\"wp-block-paragraph\">I\u2019m positive the following venture will problem a totally completely different set of assumptions. Truthfully, I\u2019m wanting ahead to discovering out what they&#8217;re.<\/p>\n<p class=\"wp-block-paragraph\">That is a part of my ongoing sequence documenting my transition from programs analyst to knowledge engineer. In case you\u2019ve been following alongside, thanks.<\/p>\n<p class=\"wp-block-paragraph\">Join with me on\u00a0LinkedIn,\u00a0YouTube, and\u00a0Twitter.<\/p>\n<\/div>\n<p><br \/>\n<br \/><a href=\"https:\/\/towardsdatascience.com\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>, I made a decision I wished to transition from knowledge analyst to knowledge engineer. Like many individuals beginning out, I used to be overwhelmed by the sheer variety of issues I assumed I wanted to study. Knowledge warehouses, orchestration instruments, distributed processing, streaming programs, cloud platforms, infrastructure. The listing appeared limitless. As a substitute [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2167,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/towardsdatascience.com\/wp-content\/uploads\/2026\/07\/etl-article-image-rss.jpg","fifu_image_alt":"","jnews-multi-image_gallery":[],"jnews_single_post":[],"jnews_primary_category":[],"jnews_override_bookmark_settings":[],"jnews_social_meta":[],"jnews_override_counter":[],"footnotes":""},"categories":[7],"tags":[1309,160,551,2680,1139,2432,754,152],"class_list":["post-2165","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-science-mlops","tag-built","tag-data","tag-engineer","tag-etl","tag-pipeline","tag-started","tag-thinking","tag-time"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>I Constructed My Second ETL Pipeline. This Time, I Began Pondering Like a Knowledge Engineer - Future News 24<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"I Constructed My Second ETL Pipeline. This Time, I Began Pondering Like a Knowledge Engineer - Future News 24\" \/>\n<meta property=\"og:description\" content=\", I made a decision I wished to transition from knowledge analyst to knowledge engineer. Like many individuals beginning out, I used to be overwhelmed by the sheer variety of issues I assumed I wanted to study. Knowledge warehouses, orchestration instruments, distributed processing, streaming programs, cloud platforms, infrastructure. The listing appeared limitless. As a substitute [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/\" \/>\n<meta property=\"og:site_name\" content=\"Future News 24\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-10T17:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-11T04:59:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/towardsdatascience.com\/wp-content\/uploads\/2026\/07\/etl-article-image-rss.jpg\" \/>\n<meta name=\"author\" content=\"Future News 24\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/towardsdatascience.com\/wp-content\/uploads\/2026\/07\/etl-article-image-rss.jpg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Future News 24\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/10\\\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/10\\\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\\\/\"},\"author\":{\"name\":\"Future News 24\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#\\\/schema\\\/person\\\/cecad1bde21cfc357cf70128144d6c83\"},\"headline\":\"I Constructed My Second ETL Pipeline. This Time, I Began Pondering Like a Knowledge Engineer\",\"datePublished\":\"2026-07-10T17:00:00+00:00\",\"dateModified\":\"2026-07-11T04:59:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/10\\\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\\\/\"},\"wordCount\":3900,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/10\\\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/towardsdatascience.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/etl-article-image-rss.jpg\",\"keywords\":[\"built\",\"data\",\"engineer\",\"ETL\",\"pipeline\",\"Started\",\"Thinking\",\"time\"],\"articleSection\":[\"Data Science &amp; MLOps\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/10\\\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/10\\\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\\\/\",\"url\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/10\\\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\\\/\",\"name\":\"I Constructed My Second ETL Pipeline. This Time, I Began Pondering Like a Knowledge Engineer - Future News 24\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/10\\\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/10\\\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/towardsdatascience.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/etl-article-image-rss.jpg\",\"datePublished\":\"2026-07-10T17:00:00+00:00\",\"dateModified\":\"2026-07-11T04:59:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/10\\\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/10\\\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/10\\\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\\\/#primaryimage\",\"url\":\"https:\\\/\\\/towardsdatascience.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/etl-article-image-rss.jpg\",\"contentUrl\":\"https:\\\/\\\/towardsdatascience.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/etl-article-image-rss.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/10\\\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/futurenews24.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"I Constructed My Second ETL Pipeline. This Time, I Began Pondering Like a Knowledge Engineer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#website\",\"url\":\"https:\\\/\\\/futurenews24.com\\\/\",\"name\":\"Future News 24\",\"description\":\"The Smart Hub for AI and Next-Gen Innovation\",\"publisher\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/futurenews24.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#organization\",\"name\":\"Future News 24\",\"url\":\"https:\\\/\\\/futurenews24.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/futurenews24.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/fn24-favicon.png\",\"contentUrl\":\"https:\\\/\\\/futurenews24.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/fn24-favicon.png\",\"width\":250,\"height\":250,\"caption\":\"Future News 24\"},\"image\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#\\\/schema\\\/person\\\/cecad1bde21cfc357cf70128144d6c83\",\"name\":\"Future News 24\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g\",\"caption\":\"Future News 24\"},\"sameAs\":[\"https:\\\/\\\/futurenews24.com\"],\"url\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/author\\\/mridulpahuja20\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"I Constructed My Second ETL Pipeline. This Time, I Began Pondering Like a Knowledge Engineer - Future News 24","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/","og_locale":"en_US","og_type":"article","og_title":"I Constructed My Second ETL Pipeline. This Time, I Began Pondering Like a Knowledge Engineer - Future News 24","og_description":", I made a decision I wished to transition from knowledge analyst to knowledge engineer. Like many individuals beginning out, I used to be overwhelmed by the sheer variety of issues I assumed I wanted to study. Knowledge warehouses, orchestration instruments, distributed processing, streaming programs, cloud platforms, infrastructure. The listing appeared limitless. As a substitute [&hellip;]","og_url":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/","og_site_name":"Future News 24","article_published_time":"2026-07-10T17:00:00+00:00","article_modified_time":"2026-07-11T04:59:10+00:00","og_image":[{"url":"https:\/\/towardsdatascience.com\/wp-content\/uploads\/2026\/07\/etl-article-image-rss.jpg","type":"","width":"","height":""}],"author":"Future News 24","twitter_card":"summary_large_image","twitter_image":"https:\/\/towardsdatascience.com\/wp-content\/uploads\/2026\/07\/etl-article-image-rss.jpg","twitter_misc":{"Written by":"Future News 24","Est. reading time":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/#article","isPartOf":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/"},"author":{"name":"Future News 24","@id":"https:\/\/futurenews24.com\/#\/schema\/person\/cecad1bde21cfc357cf70128144d6c83"},"headline":"I Constructed My Second ETL Pipeline. This Time, I Began Pondering Like a Knowledge Engineer","datePublished":"2026-07-10T17:00:00+00:00","dateModified":"2026-07-11T04:59:10+00:00","mainEntityOfPage":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/"},"wordCount":3900,"commentCount":0,"publisher":{"@id":"https:\/\/futurenews24.com\/#organization"},"image":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/#primaryimage"},"thumbnailUrl":"https:\/\/towardsdatascience.com\/wp-content\/uploads\/2026\/07\/etl-article-image-rss.jpg","keywords":["built","data","engineer","ETL","pipeline","Started","Thinking","time"],"articleSection":["Data Science &amp; MLOps"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/","url":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/","name":"I Constructed My Second ETL Pipeline. This Time, I Began Pondering Like a Knowledge Engineer - Future News 24","isPartOf":{"@id":"https:\/\/futurenews24.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/#primaryimage"},"image":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/#primaryimage"},"thumbnailUrl":"https:\/\/towardsdatascience.com\/wp-content\/uploads\/2026\/07\/etl-article-image-rss.jpg","datePublished":"2026-07-10T17:00:00+00:00","dateModified":"2026-07-11T04:59:10+00:00","breadcrumb":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/#primaryimage","url":"https:\/\/towardsdatascience.com\/wp-content\/uploads\/2026\/07\/etl-article-image-rss.jpg","contentUrl":"https:\/\/towardsdatascience.com\/wp-content\/uploads\/2026\/07\/etl-article-image-rss.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/10\/i-built-my-second-etl-pipeline-this-time-i-started-thinking-like-a-data-engineer\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/futurenews24.com\/"},{"@type":"ListItem","position":2,"name":"I Constructed My Second ETL Pipeline. This Time, I Began Pondering Like a Knowledge Engineer"}]},{"@type":"WebSite","@id":"https:\/\/futurenews24.com\/#website","url":"https:\/\/futurenews24.com\/","name":"Future News 24","description":"The Smart Hub for AI and Next-Gen Innovation","publisher":{"@id":"https:\/\/futurenews24.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/futurenews24.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/futurenews24.com\/#organization","name":"Future News 24","url":"https:\/\/futurenews24.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/futurenews24.com\/#\/schema\/logo\/image\/","url":"https:\/\/futurenews24.com\/wp-content\/uploads\/2026\/06\/fn24-favicon.png","contentUrl":"https:\/\/futurenews24.com\/wp-content\/uploads\/2026\/06\/fn24-favicon.png","width":250,"height":250,"caption":"Future News 24"},"image":{"@id":"https:\/\/futurenews24.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/futurenews24.com\/#\/schema\/person\/cecad1bde21cfc357cf70128144d6c83","name":"Future News 24","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g","caption":"Future News 24"},"sameAs":["https:\/\/futurenews24.com"],"url":"https:\/\/futurenews24.com\/index.php\/author\/mridulpahuja20\/"}]}},"_links":{"self":[{"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/posts\/2165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/comments?post=2165"}],"version-history":[{"count":1,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/posts\/2165\/revisions"}],"predecessor-version":[{"id":2166,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/posts\/2165\/revisions\/2166"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/media\/2167"}],"wp:attachment":[{"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/media?parent=2165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/categories?post=2165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/tags?post=2165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}