<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: ClintWithK</title>
    <description>The latest articles on Forem by ClintWithK (@k1int).</description>
    <link>https://forem.com/k1int</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3708625%2F4ebd3904-3df5-47b7-a429-7d324c8ab2d6.jpeg</url>
      <title>Forem: ClintWithK</title>
      <link>https://forem.com/k1int</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/k1int"/>
    <language>en</language>
    <item>
      <title>ETL vs ELT: The Data Pipeline Behind Every Powerful Dashboard</title>
      <dc:creator>ClintWithK</dc:creator>
      <pubDate>Wed, 15 Apr 2026 03:31:39 +0000</pubDate>
      <link>https://forem.com/k1int/etl-vs-elt-the-data-pipeline-behind-every-powerful-dashboard-299g</link>
      <guid>https://forem.com/k1int/etl-vs-elt-the-data-pipeline-behind-every-powerful-dashboard-299g</guid>
      <description>&lt;h2&gt;
  
  
  A Brief History on ETL &amp;amp; ELT Processes
&lt;/h2&gt;

&lt;p&gt;Data integration has long been a critical challenge for businesses seeking to unify and leverage data from multiple sources across teams and regions. Since the 1960s, when disk storage and early database management systems first enabled data sharing, organizations have struggled to efficiently combine disparate data sources. This challenge led to the emergence of ETL (Extract, Transform, Load) in the 1970s as the standard method for aggregating and transforming enterprise data from complex systems, payroll, inventory, and ERP platforms. The rise of data warehouses in the 1980s further amplified its importance, driving the development of increasingly sophisticated ETL tools that became more accessible by the 1990s. However, the arrival of cloud computing in the 2000s sparked a fundamental shift to ELT (Extract, Load, Transform), allowing businesses to load raw data directly into cloud data warehouses and lakes for flexible, in-platform transformation. This evolution finally unlocked the full analytical power of big data, enabling faster insights, greater agility, and a new era of truly data-driven decision-making.&lt;/p&gt;

&lt;h3&gt;
  
  
  ETL vs ELT in 2026: What’s the Difference and Which Should You Use?
&lt;/h3&gt;

&lt;p&gt;ETL and ELT are the two dominant approaches to moving and preparing data for analysis. While both extract data from source systems, their difference lies in when the transformation happens and that single decision dramatically affects performance, cost, scalability, security, and developer experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Difference
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ETL (Extract, Transform, Load)&lt;/strong&gt;: Data is extracted, transformed on a separate processing engine, then loaded into the target warehouse. Transformation happens before loading.&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.amazonaws.com%2Fuploads%2Farticles%2Fi5l81cjxw43v8438iw0m.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2Fi5l81cjxw43v8438iw0m.jpg" alt="Image illustrating ETL" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ELT (Extract, Load, Transform)&lt;/strong&gt;: Raw data is extracted and loaded directly into the destination (usually a cloud data warehouse), then transformed inside the warehouse using its compute power.&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.amazonaws.com%2Fuploads%2Farticles%2Fdp4nfy3btv8h4plz68zq.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2Fdp4nfy3btv8h4plz68zq.jpg" alt="Image illustrating ELT" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ETL vs ELT: Key Differences
&lt;/h2&gt;

&lt;p&gt;The main difference between &lt;strong&gt;ETL (Extract, Transform, Load)&lt;/strong&gt; and &lt;strong&gt;ELT (Extract, Load, Transform)&lt;/strong&gt; lies in the order in which data is processed.&lt;/p&gt;

&lt;p&gt;In ETL, data is transformed on a separate processing server before being loaded into the data warehouse. In contrast, ELT loads raw data directly into a cloud data warehouse or data lake, where transformations are performed later using the warehouse’s computing power.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Advantages of ELT over ETL
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Data Compatibility&lt;br&gt;
ETL is best suited for structured data, while ELT can handle both structured and unstructured data such as images, documents, and logs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Speed&lt;br&gt;
ELT is generally faster because it loads raw data immediately and leverages the parallel processing capabilities of modern cloud data warehouses, enabling near real-time transformations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cost&lt;br&gt;
ELT is typically more cost-efficient since it requires fewer systems, less infrastructure, and reduced upfront planning compared to ETL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security&lt;br&gt;
Modern cloud data warehouses used in ELT provide built-in security features such as granular access control and authentication, reducing the need for custom security implementations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to Use ETL Instead
&lt;/h3&gt;

&lt;p&gt;Although ELT is the standard for modern data platforms, ETL is still useful in specific scenarios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrating with legacy databases or third-party systems with fixed data formats&lt;/li&gt;
&lt;li&gt;Early-stage data exploration and experimentation&lt;/li&gt;
&lt;li&gt;Complex analytics involving multiple diverse data sources (often in hybrid pipelines)&lt;/li&gt;
&lt;li&gt;IoT and edge computing use cases where data must be filtered, cleaned, or aggregated before being sent to the cloud&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Modern Tools Landscape (2026)
&lt;/h3&gt;

&lt;p&gt;The lines between ETL and ELT have blurred thanks to powerful specialized tools:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Popular Tools&lt;/th&gt;
&lt;th&gt;Best Used With&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ingestion&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fivetran, Airbyte, Kafka, Debezium&lt;/td&gt;
&lt;td&gt;ELT&lt;/td&gt;
&lt;td&gt;Kafka for real-time streaming&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Orchestration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache Airflow, Dagster, Prefect&lt;/td&gt;
&lt;td&gt;Both&lt;/td&gt;
&lt;td&gt;Industry standard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transformation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;dbt, Spark, dbt + SQL&lt;/td&gt;
&lt;td&gt;Mostly ELT&lt;/td&gt;
&lt;td&gt;dbt dominates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Traditional ETL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Informatica, Talend, AWS Glue&lt;/td&gt;
&lt;td&gt;ETL&lt;/td&gt;
&lt;td&gt;Enterprise-heavy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Warehouse/Lakehouse&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Snowflake, BigQuery, Databricks, Redshift&lt;/td&gt;
&lt;td&gt;ELT&lt;/td&gt;
&lt;td&gt;Compute happens here&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Practical Modern PatternsMost common pattern today:
&lt;/h3&gt;

&lt;p&gt;Airbyte / Fivetran --&amp;gt; Raw layer in warehouse --&amp;gt; dbt (transform) --&amp;gt; Orchestrated by Apache &lt;/p&gt;

&lt;h3&gt;
  
  
  Apache Airflow DAG Example (Using BashOperator + PythonOperator)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;airflow&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DAG&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;airflow.operators.bash&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BashOperator&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;airflow.operators.python&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PythonOperator&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_dbt_transform&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Run dbt transformations&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;
    &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dbt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;run&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dbt transformation completed successfully!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nc"&gt;DAG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;dag_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;elt_sales_pipeline&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;start_date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2025&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;schedule&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;@daily&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;catchup&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;default_args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;retries&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;owner&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data_team&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;dag&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="c1"&gt;# Extract &amp;amp; Load (EL)
&lt;/span&gt;    &lt;span class="n"&gt;extract_and_load&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BashOperator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;extract_and_load&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;bash_command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
            echo &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Starting data ingestion...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;
            # Replace with your ingestion command (Airbyte CLI, Fivetran, custom script, etc.)
            python /scripts/ingest_sales_data.py
            echo &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Raw data successfully loaded into warehouse&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;
        &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Transform (T) with dbt
&lt;/span&gt;    &lt;span class="n"&gt;transform&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PythonOperator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;transform_with_dbt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;python_callable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;run_dbt_transform&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Optional: Run data quality tests
&lt;/span&gt;    &lt;span class="n"&gt;data_quality&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BashOperator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;run_dbt_tests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;bash_command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dbt test&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Task dependencies
&lt;/span&gt;    &lt;span class="n"&gt;extract_and_load&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;data_quality&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;In 2026, &lt;strong&gt;ELT&lt;/strong&gt; has become the preferred approach for most modern data teams due to its speed, flexibility, and seamless integration with cloud platforms and tools like dbt and Airflow.  However, &lt;strong&gt;ETL&lt;/strong&gt; remains relevant for regulated industries, legacy systems, and edge/IoT use cases. &lt;br&gt;
Choose &lt;strong&gt;ELT&lt;/strong&gt; by default for new projects, but don’t hesitate to use &lt;strong&gt;ETL&lt;/strong&gt; or a &lt;strong&gt;hybrid model&lt;/strong&gt; when compliance, security, or legacy constraints require it.  Ultimately, the best pipeline is the one that is reliable, maintainable, and serves your business needs.&lt;/p&gt;

&lt;p&gt;Happy data building! &lt;/p&gt;

</description>
      <category>analytics</category>
      <category>analyst</category>
      <category>dataengineering</category>
      <category>database</category>
    </item>
    <item>
      <title>Power BI Guide: Data Cleaning, DAX Formulas, and Dashboard Design</title>
      <dc:creator>ClintWithK</dc:creator>
      <pubDate>Mon, 02 Mar 2026 11:56:48 +0000</pubDate>
      <link>https://forem.com/k1int/power-bi-guide-data-cleaning-dax-formulas-and-dashboard-design-57c</link>
      <guid>https://forem.com/k1int/power-bi-guide-data-cleaning-dax-formulas-and-dashboard-design-57c</guid>
      <description>&lt;p&gt;“Data is rarely clean. It’s duplicated, inconsistent, poorly structured, and sometimes misleading. Yet decisions worth millions depend on it.”&lt;/p&gt;

&lt;p&gt;In this article we are going to learn to turn messy data into actionable insights i.e: &lt;strong&gt;Data Cleaning&lt;/strong&gt;, &lt;strong&gt;Data Analysis Expressions(DAX) formulas&lt;/strong&gt; and &lt;strong&gt;Dashboard Design&lt;/strong&gt;. We are going to achieve this by using Power BI.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is Power BI?
&lt;/h1&gt;

&lt;p&gt;Power BI is Microsoft's business analytics platform that helps you turn data into actionable insights. Whether you're a business user, report creator, or developer, Power BI offers integrated tools and services to connect, visualize, and share data across your organization.&lt;br&gt;
For a deeper dive into Power BI tool, I will point you to Microsoft official article: &lt;a href="https://learn.microsoft.com/en-us/power-bi/fundamentals/power-bi-overview" rel="noopener noreferrer"&gt;https://learn.microsoft.com/en-us/power-bi/fundamentals/power-bi-overview&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Data Cleaning
&lt;/h2&gt;

&lt;p&gt;Also called &lt;strong&gt;data cleansing&lt;/strong&gt; or &lt;strong&gt;data scrubbing&lt;/strong&gt;, is the process of identifying and correcting errors and inconsistencies in raw datasets to improve data quality, this ensures a dataset meets criteria for &lt;strong&gt;accuracy&lt;/strong&gt;, &lt;strong&gt;completeness&lt;/strong&gt;, &lt;strong&gt;validity&lt;/strong&gt;, &lt;strong&gt;consistency&lt;/strong&gt;, &lt;strong&gt;uniqueness&lt;/strong&gt;, &lt;strong&gt;timeliness&lt;/strong&gt; and fitness for purpose, and it is critical to all data governance initiatives within an organization. &lt;/p&gt;

&lt;p&gt;Data Cleaning &amp;amp; Transformation (Power Query)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Removing duplicates:&lt;/strong&gt; When starting with data cleaning, one of the first steps is removing duplicates. However, this must be done carefully. You need to clearly identify which column defines uniqueness in your dataset. For example: In my dataset below is a Sample Hospital dataset with a &lt;strong&gt;Visits&lt;/strong&gt; table and I've identified &lt;strong&gt;visit_ID&lt;/strong&gt; column as my primary key.
In power BI go to Transform data using the right-click on the column the select &lt;strong&gt;Remove Duplicates&lt;/strong&gt; then power BI will automatically remove duplicates:&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.amazonaws.com%2Fuploads%2Farticles%2F3ah7rkx2k8oflsmmhghn.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.amazonaws.com%2Fuploads%2Farticles%2F3ah7rkx2k8oflsmmhghn.png" alt="Image showing removing duplicates in power bi" width="800" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Handling nulls:&lt;/strong&gt; Handling null values also requires careful consideration. Not every null should be treated the same way. In many cases, instead of deleting rows that contain null values, it’s better to replace them with a sensible placeholder such as: "Not Provided", "N/A", "Unknown", 0 (only when logically appropriate). Below is an image illustrating how to deal with "nulls":&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.amazonaws.com%2Fuploads%2Farticles%2Fpg74kt4ttmemawnovxr0.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.amazonaws.com%2Fuploads%2Farticles%2Fpg74kt4ttmemawnovxr0.png" alt="Image showing how to handle nulls and errors in datasets" width="800" height="287"&gt;&lt;/a&gt;&lt;br&gt;
The principle is that Null handling is not just data cleaning - it’s preserving analytical integrity.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fixing inconsistent formats:&lt;/strong&gt; Another common issue in messy datasets is inconsistent formatting — especially with dates and numeric columns. For example, in a pharmacy transactions table, you might find the different date formats in the same column, and the only way to deal with it is to ensure consistent date format as shown below:&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.amazonaws.com%2Fuploads%2Farticles%2F2v70jxk2vs0uk75a0tbi.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.amazonaws.com%2Fuploads%2Farticles%2F2v70jxk2vs0uk75a0tbi.png" alt="Image showing changing of data type in power bi" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Splitting/merging columns:&lt;/strong&gt; Another common transformation in Power Query is splitting or merging columns. However, this should only be done when it improves clarity, usability, or analytical accuracy.
Splitting columns applies in cases where data is shared in a combined format which might limit analysis. For example having, "Kenya - Nairobi" we can have it split into "Country" and "City". The key principle is to transform data only when it improves modeling, filtering, or reporting — not just because it’s possible.&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.amazonaws.com%2Fuploads%2Farticles%2Fyygkmw3z2r250t529di3.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.amazonaws.com%2Fuploads%2Farticles%2Fyygkmw3z2r250t529di3.png" alt="Image showing splitting in power bi" width="800" height="194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Creating calculated columns:&lt;/strong&gt; After cleaning and structuring your dataset, the next step may involve creating calculated columns. This is where you derive new information from existing fields at the row level.&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.amazonaws.com%2Fuploads%2Farticles%2Fz0opnhj4m48hkkmtzwny.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.amazonaws.com%2Fuploads%2Farticles%2Fz0opnhj4m48hkkmtzwny.png" alt="Image showing addition for a new column" width="800" height="152"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A calculated column is computed during data refresh and stored in the model. It evaluates one row at a time.&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.amazonaws.com%2Fuploads%2Farticles%2F2y1xtm8bh5i4h1p14n5j.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.amazonaws.com%2Fuploads%2Farticles%2F2y1xtm8bh5i4h1p14n5j.png" alt="Image showing addition of new columns that has a formula" width="800" height="81"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note that the above is just an illustration, it is not logical to add IDs in any manner.&lt;/p&gt;
&lt;h2&gt;
  
  
  DAX Formulas
&lt;/h2&gt;

&lt;p&gt;DAX(Data Analysis Expressions) is a collection of functions, operators, and constants that can be used in a formula, or expression, to calculate and return one or more values. DAX helps you create new information from data already in your model.&lt;/p&gt;

&lt;p&gt;We will start understanding DAX around three fundamental concepts: &lt;strong&gt;Syntax&lt;/strong&gt;, &lt;strong&gt;Functions&lt;/strong&gt;, and &lt;strong&gt;Context&lt;/strong&gt;. There are other important concepts in DAX, but understanding these three concepts will provide the best foundation on which to build your DAX skills.&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.amazonaws.com%2Fuploads%2Farticles%2Fw6cnik5v88mvsuenn4ci.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.amazonaws.com%2Fuploads%2Farticles%2Fw6cnik5v88mvsuenn4ci.png" alt="Image showing basic DAX of SUM()" width="800" height="195"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the above case we are looking at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Total Profit = SUM('Kenya_Crops_Power BI DATASET'[Profit (KES)])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  syntax:
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Total Profit&lt;/strong&gt; - is the New measure&lt;br&gt;
&lt;strong&gt;=&lt;/strong&gt; - this is an equal sign operator&lt;br&gt;
&lt;strong&gt;SUM&lt;/strong&gt; - is a DAX function that adds up all the Profit in the dataset&lt;br&gt;
&lt;strong&gt;Parenthesis&lt;/strong&gt; - these surround the expressions within the arguments.&lt;/p&gt;

&lt;p&gt;This could also be broken down to a language that one can easily understand: For the measure named Total Profit, calculate (=) the SUM of values in the [Profit] column in the Kenya_Crops_Power BI DATASET table. &lt;/p&gt;

&lt;p&gt;There are other DAX functions which could be &lt;a href="https://learn.microsoft.com/en-us/power-bi/transform-model/desktop-quickstart-learn-dax-basics" rel="noopener noreferrer"&gt;explored&lt;/a&gt; in context with different datasets. For example: SUMX(), COUNT(), AVERAGE(), AVERAGEX(), IF(), GEOMEANX() and use of &lt;strong&gt;AND&lt;/strong&gt; &amp;amp; &lt;strong&gt;OR&lt;/strong&gt; operators&lt;/p&gt;

&lt;h2&gt;
  
  
  Dashboard Design
&lt;/h2&gt;

&lt;p&gt;Designing an effective Power BI dashboard is more than just dropping charts onto a canvas. it’s about &lt;strong&gt;clarity, readability, and insight delivery&lt;/strong&gt;. Here are the key principles and techniques you should follow:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Layout and Structure
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keep it simple and organized:&lt;/strong&gt; Group related visuals together. Use whitespace effectively.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a grid system:&lt;/strong&gt; Align charts and tiles for balance.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Highlight key metrics:&lt;/strong&gt; Place the most important KPIs at the top or in prominent positions.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Consistent Visual Themes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Stick to &lt;strong&gt;consistent fonts, sizes, and styles&lt;/strong&gt; across your dashboard.
&lt;/li&gt;
&lt;li&gt;Avoid clutter—only display &lt;strong&gt;essential information&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Color Usage with HCL Model
&lt;/h3&gt;

&lt;p&gt;Colors are crucial in dashboards—they guide attention and improve comprehension. Power BI allows you to customize colors, but using the &lt;strong&gt;HCL (Hue-Chroma-Luminance) color model&lt;/strong&gt; ensures your choices are &lt;strong&gt;perceptually uniform&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding HCL:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hue:&lt;/strong&gt; The type of color (e.g., red, blue, green).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chroma:&lt;/strong&gt; The intensity or purity of the color (saturation).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Luminance:&lt;/strong&gt; The lightness or darkness of the color.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why HCL matters:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Colors should &lt;strong&gt;differentiate data clearly&lt;/strong&gt; without misleading perception.
&lt;/li&gt;
&lt;li&gt;HCL ensures that &lt;strong&gt;differences in color intensity are perceived equally&lt;/strong&gt; by the human eye.
&lt;/li&gt;
&lt;li&gt;Avoid using colors that are &lt;strong&gt;too bright or too dull&lt;/strong&gt;, which can make charts harder to read.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practical Tips in Power BI:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;contrasting colors&lt;/strong&gt; for categorical data to make groups distinguishable.
&lt;/li&gt;
&lt;li&gt;For sequential data, adjust &lt;strong&gt;luminance&lt;/strong&gt; gradually to show progression.
&lt;/li&gt;
&lt;li&gt;Test colors for &lt;strong&gt;accessibility&lt;/strong&gt;, especially for color-blind users.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A bar chart showing sales performance could use a &lt;strong&gt;sequential green palette&lt;/strong&gt; with increasing luminance for higher sales.
&lt;/li&gt;
&lt;li&gt;A categorical chart for product categories could use &lt;strong&gt;distinct hues with similar luminance&lt;/strong&gt; to make categories easy to compare.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Interactivity
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;slicers and filters&lt;/strong&gt; to allow users to drill down into the data.
&lt;/li&gt;
&lt;li&gt;Include &lt;strong&gt;tooltips and hover effects&lt;/strong&gt; to provide additional context without cluttering visuals.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Storytelling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Arrange visuals in a logical order to &lt;strong&gt;tell a story&lt;/strong&gt; with your data.
&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;titles, labels, and annotations&lt;/strong&gt; effectively to guide the user.
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Messy data is the norm: full of duplicates, nulls, inconsistencies, and hidden pitfalls yet critical decisions depend on getting it right. Through this Power BI guide, we transformed raw chaos into reliable insights: cleaning and shaping data in Power Query, unlocking deeper analysis with essential DAX formulas, and delivering clear, actionable stories via thoughtful dashboard design powered by perceptually accurate HCL colors. The payoff? Trustworthy visuals that stakeholders actually use to drive better decisions. Grab a messy dataset, follow the steps, and watch garbage-in become golden-out. You've got the full workflow — now go make your data work for you. &lt;/p&gt;

</description>
      <category>analyst</category>
      <category>analytics</category>
      <category>datascience</category>
      <category>data</category>
    </item>
    <item>
      <title>Mastering Joins and Window Functions in SQL for Data Engineers</title>
      <dc:creator>ClintWithK</dc:creator>
      <pubDate>Mon, 02 Mar 2026 11:38:02 +0000</pubDate>
      <link>https://forem.com/k1int/mastering-joins-and-window-functions-in-sql-for-data-engineers-1fgo</link>
      <guid>https://forem.com/k1int/mastering-joins-and-window-functions-in-sql-for-data-engineers-1fgo</guid>
      <description>&lt;p&gt;In this article, we will cover the basic concepts of SQL joins and window functions. We assume that you are already familiar with the fundamentals of &lt;a href="https://en.wikipedia.org/wiki/Data_definition_language" rel="noopener noreferrer"&gt;Data Definition Language&lt;/a&gt; (DDL): creating schemas and tables, understanding data types, and applying constraints.&lt;/p&gt;

&lt;p&gt;We will explore how joins allow you to combine and relate data from multiple tables, and how window functions let you perform calculations across a set of rows related to the current row, without collapsing the result set. Examples of window functions include &lt;strong&gt;computing running totals, rankings, moving averages, and cumulative sums&lt;/strong&gt;. By the end of this article, you’ll understand when and how to use joins and window functions effectively in real-world SQL queries.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are SQL Joins?
&lt;/h2&gt;

&lt;p&gt;As the name suggests, a join refers to the process of combining two or more items. In SQL, joins are used to combine two or more tables into a single result set using a common field that exists in all the tables involved.&lt;/p&gt;

&lt;p&gt;Interestingly, in SQL, this concept can also extend to a table joining &lt;strong&gt;itself&lt;/strong&gt;, which is useful in hierarchical or relational scenarios.&lt;/p&gt;

&lt;p&gt;We will explore the different types of joins with practical examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When to use them&lt;/li&gt;
&lt;li&gt;How to use them&lt;/li&gt;
&lt;li&gt;The syntax for each type&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We will use four tables: customers, products, sales, and inventory to demonstrate SQL joins, with each table containing relevant data on customers, products, transactions, and stock.&lt;/p&gt;

&lt;p&gt;The main types of SQL joins are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;INNER JOIN&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When to use: When you want only matching records from two tables.&lt;br&gt;
How to use: Combine two tables on a common column (foreign key).&lt;/p&gt;

&lt;p&gt;Syntax &amp;amp; Example: Get a list of all sales with customer and product details:&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.amazonaws.com%2Fuploads%2Farticles%2Fugmhqpvmmmq0w1z78d6o.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Fugmhqpvmmmq0w1z78d6o.JPG" alt="Image illustrating INNER JOIN" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LEFT JOIN&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When to use: When you want all records from the main table and optional matches from another table.&lt;br&gt;
How to use: Use LEFT JOIN when the left table is the main table.&lt;/p&gt;

&lt;p&gt;Syntax &amp;amp; Example: List all customers and their purchases, even if they haven’t bought anything:&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.amazonaws.com%2Fuploads%2Farticles%2Fdygge5xdevvn0q6iclv9.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Fdygge5xdevvn0q6iclv9.JPG" alt="Image showing LEFT JOIN" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RIGHT JOIN&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When to use: When you want all records from the right table, even if no match exists in the left table.&lt;br&gt;
How to use: Right join is basically the reverse of LEFT JOIN.&lt;/p&gt;

&lt;p&gt;Syntax &amp;amp; Example: List all products and any sales made, even if a product hasn’t been sold:&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.amazonaws.com%2Fuploads%2Farticles%2Ffywwlzso1k36160jcw6m.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Ffywwlzso1k36160jcw6m.JPG" alt="Image illustrating RIGHT JOIN" width="800" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;FULL OUTER JOIN&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When to use: When you want all records from both tables, matched where possible.&lt;br&gt;
How to use: Combine LEFT JOIN and RIGHT JOIN behavior.&lt;/p&gt;

&lt;p&gt;Syntax &amp;amp; Example: List all sales and all inventory items, even if some products haven’t been sold:&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.amazonaws.com%2Fuploads%2Farticles%2Fe8pwhblucmumpce0samf.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Fe8pwhblucmumpce0samf.JPG" alt="Image illustrating FULL OUTER JOIN" width="727" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CROSS JOIN&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When to use: When you need all combinations of rows from two tables.&lt;br&gt;
How to use: CROSS JOIN does not require a condition.&lt;/p&gt;

&lt;p&gt;Syntax &amp;amp; Example: Get every possible combination of customers and products (maybe for a promotion plan):&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.amazonaws.com%2Fuploads%2Farticles%2Fd2ht6id53n64a9oqumc2.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Fd2ht6id53n64a9oqumc2.JPG" alt="Image illustrating CROSS JOIN" width="704" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SELF JOIN&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When to use: When a table needs to relate to itself, like finding hierarchical relationships.&lt;br&gt;
How to use: Alias the table twice and join on self-referencing columns.&lt;/p&gt;

&lt;p&gt;Example (customers with the same first name):&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.amazonaws.com%2Fuploads%2Farticles%2F24o690pwqes1suzvb8ip.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2F24o690pwqes1suzvb8ip.JPG" alt="Image illustrating SELF JOIN" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Window Functions?
&lt;/h2&gt;

&lt;p&gt;Window functions are honestly one of the most powerful (and underrated) tools in SQL.&lt;br&gt;
They let you do calculations across a bunch of rows that are “related” to the current row… but without smashing everything down into one aggregated row like a normal GROUP BY would. You still get every single row back just with extra useful columns added on. &lt;/p&gt;

&lt;p&gt;Core idea in one sentence:&lt;br&gt;
Window functions calculate stuff over a “window” of rows defined by you, while keeping all the original rows intact.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Big Differences from Regular Aggregates
&lt;/h2&gt;

&lt;p&gt;SUM(), AVG(), COUNT() etc. with GROUP BY one row per group&lt;br&gt;&lt;br&gt;
SUM(), AVG(), COUNT() etc. with OVER() still one row per original row, but now you get the aggregate value repeated/calculated per window&lt;/p&gt;

&lt;h2&gt;
  
  
  The Must-Know Window Functions
&lt;/h2&gt;

&lt;p&gt;ROW_NUMBER() - gives every row a unique 1,2,3… number  &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.amazonaws.com%2Fuploads%2Farticles%2F4vnxcudnkwfvsgiwencv.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2F4vnxcudnkwfvsgiwencv.JPG" alt="Image row_number function" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;RANK() - like sports rankings (1,2,2,4 if ties)  &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.amazonaws.com%2Fuploads%2Farticles%2Fxqrnh46vgubj0fg25qw5.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Fxqrnh46vgubj0fg25qw5.JPG" alt="Image illustrating rank function" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DENSE_RANK() - same but no gaps (1,2,2,3)  &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.amazonaws.com%2Fuploads%2Farticles%2Fx5cq8lhj7gjt6v8dlo26.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Fx5cq8lhj7gjt6v8dlo26.JPG" alt="Image illustrating dense_rank function" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SUM() / AVG() / COUNT() over a window - running totals, moving averages, etc.&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.amazonaws.com%2Fuploads%2Farticles%2Fiksl8tjznza0sjwxfktw.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Fiksl8tjznza0sjwxfktw.JPG" alt="Image showing sum function" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;LEAD() / LAG() - peek at the next or previous row’s value  &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.amazonaws.com%2Fuploads%2Farticles%2Fj8h0jzonczvzgsnqv13e.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Fj8h0jzonczvzgsnqv13e.JPG" alt="Image showing lead" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NTILE(n), PERCENT_RANK(), CUME_DIST() - more niche but handy for percentiles and bucketing.&lt;/p&gt;

&lt;p&gt;explore further on Window functions &lt;a href="https://www.postgresql.org/docs/18/tutorial-window.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;In this article, we explored the fundamentals of SQL joins and window functions, two powerful tools for combining and analyzing data. Joins allow you to merge tables based on relationships, while window functions let you perform advanced calculations across related rows without losing detail. Mastering these techniques enables data engineers to write efficient queries, uncover insights, and build robust analytics pipelines. By applying joins and window functions to real-world tables like customers, products, sales, and inventory, you can transform raw data into actionable insights with clarity and precision.&lt;/p&gt;

</description>
      <category>database</category>
      <category>dataengineering</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Introduction To Schemas &amp; Data Modeling In Power BI</title>
      <dc:creator>ClintWithK</dc:creator>
      <pubDate>Mon, 02 Feb 2026 11:06:29 +0000</pubDate>
      <link>https://forem.com/k1int/introduction-to-schemas-data-modeling-in-power-bi-coi</link>
      <guid>https://forem.com/k1int/introduction-to-schemas-data-modeling-in-power-bi-coi</guid>
      <description>&lt;p&gt;Power BI being a Microsoft's business analytics platform that helps to turn data into actionable insights. Whether it's a business user, report creator, or developer, Power BI offers integrated tools and services to connect, visualize, and share data across your organization. In this article we are going to take a deeper dive into understanding &lt;strong&gt;what are schemas and Data Modeling in Power BI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Firstly let's jump right into understanding &lt;strong&gt;What is a Schema?&lt;/strong&gt; and &lt;strong&gt;What is Data Modeling?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While trying to understand these vital aspects in Data field, we are going to come across key words like: Fact tables, Dimensional tables, Relationships, one to many, filter propagational arrows, performance and usability. We are also going to explore all these key words with demonstrations using sample dataset that can be downloaded using link: [(&lt;a href="https://chandoo.org/wp/wp-content/uploads/2024/10/sample-chocolate-sales-data-all.xlsx)" rel="noopener noreferrer"&gt;https://chandoo.org/wp/wp-content/uploads/2024/10/sample-chocolate-sales-data-all.xlsx)&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Load data&lt;/strong&gt; into Power BI as shown in the image below:&lt;/p&gt;

&lt;p&gt;Select Excel Workbook, which will trigger files window on your screen:&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.amazonaws.com%2Fuploads%2Farticles%2Feprm9dqyrip0jf6sm0tr.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Feprm9dqyrip0jf6sm0tr.JPG" alt="An Image showing Power BI page where you select your data source" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Select the correct excel workbook&lt;/strong&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Fsqcpkluzkta551kdq0ym.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Fsqcpkluzkta551kdq0ym.JPG" alt="Image showing selecting excel file from file system of windows machine" width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Select the worksheets &amp;amp; Load the data&lt;/strong&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Frthvwft904wnr9w64a3x.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Frthvwft904wnr9w64a3x.JPG" alt="An image showing an interface for selecting worksheets and loading it to power BI" width="800" height="623"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you have loaded data successfully into Power BI, let's now explore Schemas and Data Modeling using the loaded data.&lt;br&gt;
Before jumping into Schemas, let's understand what is &lt;strong&gt;Data Modeling&lt;/strong&gt;. Having this understanding will help us have a clearer catch of the &lt;strong&gt;Schema concept&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Modeling
&lt;/h2&gt;

&lt;p&gt;Data modeling is the process of structuring and organizing data to define how it is stored, related, and used within a system. In Power BI, it involves creating a logical data model by connecting tables, defining relationships, setting data types, and building calculations (e.g., using DAX) to support accurate and efficient reporting. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Purpose:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable meaningful analysis by linking fact tables (quantitative data) with dimension tables (descriptive context).&lt;/li&gt;
&lt;li&gt;Support fast query performance and intuitive report design.&lt;/li&gt;
&lt;li&gt;Ensure data integrity and reduce redundancy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Components:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tables&lt;/strong&gt;: Fact tables (e.g., shipments) and dimension tables (e.g., product, calendar, people, location). &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fact Tables: usually have large data depending on the size of the firm, can be upto billions or even trillions of rows and, narrow columns(few Attributes).&lt;/p&gt;

&lt;p&gt;Dimension Tables: These are the owner of the information in a dataset hence having few rows and fat columns(Many Attributes), this is usually relative depending o the size of the orgaization.&lt;br&gt;
An illustrations as shown below:&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.amazonaws.com%2Fuploads%2Farticles%2Fucg8ahtz1r34j3arkhbh.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Fucg8ahtz1r34j3arkhbh.JPG" alt="An Image showing examples of fact and dimension tables" width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Relationships&lt;/strong&gt;: Typically one-to-many (1:M), defining how tables are connected (e.g., via PID, SPID, cal_date).
This illustrated in the image below:&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.amazonaws.com%2Fuploads%2Farticles%2F9yt5dd86ea4md1qkeilm.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2F9yt5dd86ea4md1qkeilm.JPG" alt="Understanding Relationships" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key reasons for accurate relationships:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Accuracy&lt;/strong&gt;: Ensures that aggregations (e.g., total sales) are calculated correctly across related tables. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filter Propagation&lt;/strong&gt;: Enables interactive filtering—when a user selects a value in one visual, related visuals update accordingly based on the defined cross-filter direction. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance Optimization&lt;/strong&gt;: One-to-many relationships with single-direction filtering improve query speed and reduce ambiguity. Avoiding unnecessary bi-directional filters prevents performance degradation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoiding Ambiguity&lt;/strong&gt;: Multiple relationships between the same tables can cause errors. Using inactive relationships with USERELATIONSHIP() in DAX resolves ambiguity and allows precise control over which relationship is used in calculations. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model Integrity&lt;/strong&gt;: Prevents issues like circular references, incorrect data types (e.g., DateTime vs. Date), and data integrity problems that arise from mismatched or poorly defined links.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best Practices:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always verify Power BI’s auto-detected relationships they are not always accurate. &lt;/li&gt;
&lt;li&gt;Use one-to-many relationships as the default; avoid one-to-one unless necessary. &lt;/li&gt;
&lt;li&gt;Set cross-filter direction to Single unless a specific use case requires Both. &lt;/li&gt;
&lt;li&gt;Use bridge tables for many-to-many relationships to maintain model clarity and performance. &lt;/li&gt;
&lt;li&gt;Regularly manage and edit relationships via the Manage Relationships dialog to ensure alignment with business logic. &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.amazonaws.com%2Fuploads%2Farticles%2Fk59vqosv07lqwpzroxvb.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Fk59vqosv07lqwpzroxvb.JPG" alt="manage relatioships" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Schema Types&lt;/strong&gt;: Star schema (recommended), snowflake, or flat models. 
A well-designed data model is foundational for scalable, high-performance Power BI reports&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Schemas
&lt;/h2&gt;

&lt;p&gt;What is a Schema? A schema is the logical structure or blueprint of a database that defines how data is organized, stored, and related.  It includes tables, columns, data types, relationships, constraints, and other elements, but does not contain the actual data. &lt;br&gt;
In Power BI, a schema refers to the data model's structure, showing how tables are connected to support efficient querying and reporting. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common schema types in Power BI include:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Star Schema:&lt;/strong&gt; One central fact table linked to multiple dimension tables (recommended for performance). 
As illustrated in the image below:&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.amazonaws.com%2Fuploads%2Farticles%2Firo9u7b7oxo7p8bkl6wo.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Firo9u7b7oxo7p8bkl6wo.JPG" alt="An Image showing Star Schema" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Snowflake Schema:&lt;/strong&gt; A normalized version of the star schema, where dimension tables are further split. Also sometimes considered as a variant of a Star schema with more things hanging off at the end.&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.amazonaws.com%2Fuploads%2Farticles%2Fxpt67mfsjl7c8ptl7bwl.JPG" 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.amazonaws.com%2Fuploads%2Farticles%2Fxpt67mfsjl7c8ptl7bwl.JPG" alt="An Image illustrating Snoflake Schema" width="351" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flat Schema:&lt;/strong&gt; All data in a single table (simple but prone to redundancy).
Refer to this link for more details and deeper understanding of Schemas in Power BI: [(&lt;a href="https://learn.microsoft.com/en-us/power-bi/guidance/star-schema)" rel="noopener noreferrer"&gt;https://learn.microsoft.com/en-us/power-bi/guidance/star-schema)&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion.
&lt;/h2&gt;

&lt;p&gt;Proper schema design and data modeling are essential for building accurate and efficient Power BI reports. Using well-structured schemas, such as the star schema, and defining correct relationships ensures reliable calculations, optimal performance, and simpler DAX expressions. A strong data model enables clear insights, supports scalability, and allows decision-makers to trust the results produced in Power BI.&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>datascience</category>
      <category>dataengineering</category>
      <category>analyst</category>
    </item>
    <item>
      <title>Getting Started With Linux For Data Engineering</title>
      <dc:creator>ClintWithK</dc:creator>
      <pubDate>Sun, 25 Jan 2026 18:32:12 +0000</pubDate>
      <link>https://forem.com/k1int/getting-started-with-linux-for-data-engineering-20d0</link>
      <guid>https://forem.com/k1int/getting-started-with-linux-for-data-engineering-20d0</guid>
      <description>&lt;p&gt;As a beginner using Linux, many people tend to feel scared or intimidated — especially because &lt;strong&gt;most operations are done through the terminal&lt;/strong&gt;. This fear is completely normal, but the good news is: once you understand the basics, Linux becomes simple, powerful, and even enjoyable to use.&lt;/p&gt;

&lt;p&gt;Linux comes in different flavors known as &lt;strong&gt;distributions (distros)&lt;/strong&gt;. Some common ones include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;li&gt;Arch Linux&lt;/li&gt;
&lt;li&gt;Fedora&lt;/li&gt;
&lt;li&gt;Parrot OS&lt;/li&gt;
&lt;li&gt;Red Hat&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although these distros may look different, &lt;strong&gt;most Linux commands are very similar across them&lt;/strong&gt;, especially the core ones you’ll use daily.&lt;/p&gt;

&lt;p&gt;In this article, we’ll focus on the &lt;strong&gt;most minimal but critical Linux commands&lt;/strong&gt; every beginner — especially an aspiring &lt;strong&gt;Data Engineer&lt;/strong&gt; — should know.&lt;/p&gt;

&lt;p&gt;We’ll be working specifically with &lt;strong&gt;Ubuntu Server&lt;/strong&gt;, as it is widely used in data engineering, cloud environments, and production systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We’ll Cover
&lt;/h2&gt;

&lt;p&gt;By the end of this article, you’ll be comfortable with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updating and upgrading the system&lt;/li&gt;
&lt;li&gt;Navigating directories (folders)&lt;/li&gt;
&lt;li&gt;Listing directory contents&lt;/li&gt;
&lt;li&gt;Reading and editing files using the terminal&lt;/li&gt;
&lt;li&gt;Copying and moving files&lt;/li&gt;
&lt;li&gt;Logging into servers using SSH&lt;/li&gt;
&lt;li&gt;Transferring files using SCP and SFTP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s upskill you from &lt;strong&gt;Beginner to Intermediate&lt;/strong&gt; &lt;br&gt;
Let’s explore these basics together.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 1: Identify Your Linux System
&lt;/h2&gt;

&lt;p&gt;Run the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Linux kernel version&lt;/li&gt;
&lt;li&gt;System architecture&lt;/li&gt;
&lt;li&gt;OS details&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s a quick way to know what system you’re working on, especially when logged into remote servers.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Update and Upgrade the System
&lt;/h2&gt;

&lt;p&gt;Keeping your system updated is one of the most important habits in Linux.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update Package Lists&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command refreshes the list of available packages and versions.&lt;br&gt;
It ensures that any software you install is up to date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upgrade Installed Packages&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This upgrades all installed applications and system tools to their latest versions.&lt;br&gt;
Think of this as patching the OS.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 3: Navigating Directories
&lt;/h2&gt;

&lt;p&gt;Linux uses directories instead of folders, but they mean the same thing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check Your Current Directory&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;List Files and Directories&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;To see more details:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;To include hidden files:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Move Between Directories&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;directory_name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Go back one level:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Go to your home directory:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 4: Reading and Editing Files from the Terminal
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;View File Contents&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;filename.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For long files:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;less filename.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 5: Editing Files Using Nano and Vi
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Using Nano (Beginner-Friendly)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano filename.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Type to edit&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Press Ctrl + O to save&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Press Ctrl + X to exit&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Using Vi / Vim (Advanced but Powerful)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vi filename.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Basic commands:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Press i → Insert mode&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Press Esc → Exit insert mode&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type :wq → Save and quit&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type :q! → Exit without saving&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 6: Copying and Moving Files
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Copy Files&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;file1.txt /path/to/destination/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Copy directories:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; folder1 /path/to/destination/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Move or Rename Files&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mv &lt;/span&gt;oldname.txt newname.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Move files:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mv &lt;/span&gt;file.txt /new/location/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 7: Logging into a Server Using SSH
&lt;/h2&gt;

&lt;p&gt;SSH allows you to securely access remote servers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh username@server_ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh ubuntu@192.168.1.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SSH is heavily used in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Cloud platforms&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data pipelines&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Production servers&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 8: File Transfer Using SCP and SFTP
&lt;/h2&gt;

&lt;p&gt;Copy Files Using SCP&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;scp file.txt username@server_ip:/remote/path/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy files from server to local machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;scp username@server_ip:/remote/file.txt &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using SFTP
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sftp username@server_ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Common SFTP commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ls&lt;/li&gt;
&lt;li&gt;get filename&lt;/li&gt;
&lt;li&gt;put filename&lt;/li&gt;
&lt;li&gt;exit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why Linux Matters for Data Engineers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;As a Data Engineer, Linux is unavoidable:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Most data systems run on Linux&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cloud servers are Linux-based&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Automation and pipelines rely on terminal commands&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mastering these basics gives you:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Confidence&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Speed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Control over systems&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Linux might feel overwhelming at first, but you don’t need to know everything at once. Start with the basics, practice daily, and build confidence gradually.&lt;/p&gt;




&lt;h2&gt;
  
  
  Happy Coding!!!
&lt;/h2&gt;

</description>
      <category>beginners</category>
      <category>dataengineering</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Understanding Git and GitHub: Pushing, Pulling, and Tracking Code (Beginner-Friendly Guide)</title>
      <dc:creator>ClintWithK</dc:creator>
      <pubDate>Fri, 16 Jan 2026 09:20:04 +0000</pubDate>
      <link>https://forem.com/k1int/understanding-git-and-github-pushing-pulling-and-tracking-code-beginner-friendly-guide-1bkm</link>
      <guid>https://forem.com/k1int/understanding-git-and-github-pushing-pulling-and-tracking-code-beginner-friendly-guide-1bkm</guid>
      <description>&lt;p&gt;As you grow in your tech journey, one tool you will &lt;strong&gt;definitely encounter early&lt;/strong&gt; is &lt;strong&gt;Git&lt;/strong&gt;. At first, it might feel confusing or even intimidating, but once you understand &lt;em&gt;why it exists&lt;/em&gt; and &lt;em&gt;how it works&lt;/em&gt;, it becomes one of the most powerful tools in your workflow.&lt;/p&gt;

&lt;p&gt;In this article, we’ll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What Git is and why version control is important&lt;/li&gt;
&lt;li&gt;How to push code to GitHub&lt;/li&gt;
&lt;li&gt;How to pull code from GitHub&lt;/li&gt;
&lt;li&gt;How to track changes using Git&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s break it down step by step.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Git and Why Is Version Control Important?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt; is a &lt;strong&gt;version control system&lt;/strong&gt;. In simple terms, it helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track changes in your code&lt;/li&gt;
&lt;li&gt;Save different versions of your project&lt;/li&gt;
&lt;li&gt;Collaborate with others without overwriting each other’s work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Imagine working on a project and accidentally deleting a file that worked perfectly yesterday. Without Git, that’s a nightmare. With Git, you can &lt;strong&gt;go back in time&lt;/strong&gt; and restore previous versions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Version Control Matters
&lt;/h3&gt;

&lt;p&gt;Version control allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;See what changed, when, and by who&lt;/li&gt;
&lt;li&gt;Work on features safely&lt;/li&gt;
&lt;li&gt;Experiment without fear&lt;/li&gt;
&lt;li&gt;Collaborate with teams efficiently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;, on the other hand, is a platform that hosts Git repositories online, making it easier to store, share, and collaborate on code.&lt;/p&gt;




&lt;h1&gt;
  
  
  Initial Setup (Quick Recap)
&lt;/h1&gt;

&lt;p&gt;Make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git installed&lt;/li&gt;
&lt;li&gt;A GitHub account&lt;/li&gt;
&lt;li&gt;SSH set up (as covered in the previous article)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open your terminal using &lt;strong&gt;Ctrl + Alt + T&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 1: Initialize a Git Repository
&lt;/h1&gt;

&lt;p&gt;Navigate to your project folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;project-folder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initialize Git:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a hidden .git folder that Git uses to track your project.&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 2: Tracking Changes Using Git
&lt;/h1&gt;

&lt;p&gt;Check Project Status&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Untracked files&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modified files&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Files ready to be committed&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Add Files to Staging
&lt;/h1&gt;

&lt;p&gt;To track all files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or add a specific file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add filename.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commit Your Changes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initial project setup"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A commit is like saving a snapshot of your project at that moment.&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 3: Push Code to GitHub
&lt;/h1&gt;

&lt;p&gt;Create a Repository on GitHub&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Log in to GitHub&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click New repository&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Give it a name&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not initialize with README&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy the SSH repository URL&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Connect Local Repo to GitHub&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote add origin git@github.com:username/repository-name.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Push Your Code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch &lt;span class="nt"&gt;-M&lt;/span&gt; main
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your code is now live on GitHub&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 4: Pull Code from GitHub
&lt;/h1&gt;

&lt;p&gt;Pulling allows you to fetch and update your local code with changes from GitHub.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git pull origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is especially important when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Working with others&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Switching between machines&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updating your local copy&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Step 5: Viewing and Tracking Changes
&lt;/h1&gt;

&lt;p&gt;View Commit History&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See File Changes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git diff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quick Overview&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands help you understand &lt;strong&gt;what changed&lt;/strong&gt;, &lt;strong&gt;what’s staged&lt;/strong&gt;, and &lt;strong&gt;what’s committed&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  A Typical Git Workflow
&lt;/h1&gt;

&lt;p&gt;Here’s how things usually flow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Make changes to your code&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check status&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Add changes
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Commit
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Describe what you changed"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Push to GitHub
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simple, repeatable, and powerful.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Git is not just a tool — it’s a safety net for your code. Once you get comfortable with pushing, pulling, and tracking changes, your confidence as a developer grows significantly.&lt;/p&gt;

&lt;p&gt;If you’re just starting out, don’t rush mastery. Focus on understanding the basics and practicing regularly.&lt;/p&gt;

&lt;h1&gt;
  
  
  What’s Next?
&lt;/h1&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;            Practice! Practice! Practice! 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;h2&gt;
  
  
  Happy coding!
&lt;/h2&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
    <item>
      <title>Setting Up a Secure Connection to Git Using SSH Keys on Ubuntu (Beginner’s Guide)</title>
      <dc:creator>ClintWithK</dc:creator>
      <pubDate>Fri, 16 Jan 2026 05:34:21 +0000</pubDate>
      <link>https://forem.com/k1int/setting-up-a-secure-connection-to-git-using-ssh-keys-on-ubuntu-beginners-guide-5b2a</link>
      <guid>https://forem.com/k1int/setting-up-a-secure-connection-to-git-using-ssh-keys-on-ubuntu-beginners-guide-5b2a</guid>
      <description>&lt;p&gt;In your tech journey, you will &lt;strong&gt;definitely come across SSH&lt;/strong&gt; multiple times, so it’s in your best interest to understand &lt;strong&gt;“the what”&lt;/strong&gt; and &lt;strong&gt;“the why.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SSH (Secure Shell)&lt;/strong&gt; is a secure protocol used to facilitate communication between computers and servers through the terminal. It is commonly preferred because it is &lt;strong&gt;secure&lt;/strong&gt;, &lt;strong&gt;fast&lt;/strong&gt;, and &lt;strong&gt;hard to compromise&lt;/strong&gt; without the correct credentials.&lt;/p&gt;

&lt;p&gt;SSH is widely used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secure file transfers&lt;/li&gt;
&lt;li&gt;System administration&lt;/li&gt;
&lt;li&gt;Remote server access&lt;/li&gt;
&lt;li&gt;Authenticating Git operations (push and pull requests)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this guide, we’ll focus on &lt;strong&gt;using SSH keys to securely connect your Ubuntu machine to GitHub&lt;/strong&gt;, allowing you to push and pull code without repeatedly entering your username and password.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before you begin, ensure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A PC running &lt;strong&gt;Ubuntu&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git installed&lt;/strong&gt;
👉 Refer to my previous article:
&lt;a href="https://dev.to/k1int/installing-and-setting-up-git-on-ubuntu-beginners-guide-5bk0"&gt;https://dev.to/k1int/installing-and-setting-up-git-on-ubuntu-beginners-guide-5bk0&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSH installed&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Basic terminal knowledge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open your terminal using &lt;strong&gt;Ctrl + Alt + T&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 1: Confirm SSH Installation
&lt;/h1&gt;

&lt;p&gt;Run the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-V&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If SSH is installed, you should see output similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;OpenSSH_9.6p1 Ubuntu-3ubuntu13.14, OpenSSL 3.0.13 30 Jan 2024
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If SSH Is Not Installed&lt;/p&gt;

&lt;p&gt;Install it using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;openssh-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check if SSH is running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status ssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enable SSH to start on boot (recommended):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;ssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Step 2: Check for Existing SSH Keys
&lt;/h1&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; ~/.ssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If keys already exist, you should see something similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;.&lt;/span&gt;  ..  authorized_keys  id_ed25519  id_ed25519.pub  known_hosts  known_hosts.old
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;id_ed25519 → Private key (keep this secret ❗)&lt;/p&gt;

&lt;p&gt;id_ed25519.pub → Public key (shared with GitHub)&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 3: Generate an SSH Key (If You Don’t Have One)
&lt;/h1&gt;

&lt;p&gt;If no keys are found, generate one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"your_email@example.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When prompted:&lt;/p&gt;

&lt;p&gt;Press Enter to accept the default location&lt;/p&gt;

&lt;p&gt;Optionally add a passphrase for extra security&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 4: Start the SSH Agent and Add Your Key
&lt;/h1&gt;

&lt;p&gt;Start the SSH agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;ssh-agent &lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add your SSH private key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-add ~/.ssh/id_ed25519
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm the key is added:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-add &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Add the SSH Key to Your GitHub Account
&lt;/h2&gt;

&lt;p&gt;Copy Your Public Key&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the entire output.&lt;/p&gt;

&lt;h1&gt;
  
  
  Add the Key on GitHub
&lt;/h1&gt;

&lt;p&gt;-Log in to GitHub&lt;/p&gt;

&lt;p&gt;-Click your profile picture → Settings&lt;/p&gt;

&lt;p&gt;-Navigate to SSH and GPG keys&lt;/p&gt;

&lt;p&gt;-Click New SSH key&lt;/p&gt;

&lt;h1&gt;
  
  
  Add:
&lt;/h1&gt;

&lt;p&gt;-Title: e.g. Ubuntu Laptop&lt;/p&gt;

&lt;p&gt;-Key: Paste the copied public key&lt;/p&gt;

&lt;p&gt;-Click Add SSH key&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 6: Test the SSH Connection
&lt;/h1&gt;

&lt;p&gt;Verify the setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-T&lt;/span&gt; git@github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If successful, you should see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Hi username! You&lt;span class="s1"&gt;'ve successfully authenticated, but GitHub does not provide shell access.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Congratulations! Your Ubuntu machine is now securely connected to GitHub using SSH.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;-SSH is more secure than HTTPS authentication&lt;/p&gt;

&lt;p&gt;-No need to enter passwords when pushing or pulling code&lt;/p&gt;

&lt;p&gt;-This setup is essential for professional Git workflows&lt;/p&gt;

&lt;h1&gt;
  
  
  What’s Next?
&lt;/h1&gt;

&lt;p&gt;-In the next article, we’ll walk through:&lt;/p&gt;

&lt;p&gt;-Initializing a Git repository&lt;/p&gt;

&lt;p&gt;-Making commits&lt;/p&gt;

&lt;p&gt;-Pushing and pulling changes from GitHub using SSH&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                            Happy Coding!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Installing and Setting Up Git on Ubuntu (Beginner’s Guide)</title>
      <dc:creator>ClintWithK</dc:creator>
      <pubDate>Wed, 14 Jan 2026 21:11:17 +0000</pubDate>
      <link>https://forem.com/k1int/installing-and-setting-up-git-on-ubuntu-beginners-guide-5bk0</link>
      <guid>https://forem.com/k1int/installing-and-setting-up-git-on-ubuntu-beginners-guide-5bk0</guid>
      <description>&lt;p&gt;When starting your journey in software development, one of the first tools you’ll encounter is &lt;strong&gt;Git&lt;/strong&gt;. Git is a distributed version control system that helps developers track changes in their code, collaborate with others, and manage projects efficiently.&lt;/p&gt;

&lt;p&gt;Most developers store their projects in repositories (commonly called &lt;em&gt;repos&lt;/em&gt;) on platforms such as &lt;strong&gt;GitHub&lt;/strong&gt;. Git allows you to interact with these repositories directly from your local machine — pushing changes, pulling updates, and managing versions of your code.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll walk through how to &lt;strong&gt;install Git on Ubuntu&lt;/strong&gt; and perform the &lt;strong&gt;basic configuration needed to get started&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before you begin, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A PC running &lt;strong&gt;Ubuntu&lt;/strong&gt; (or another Debian-based Linux distribution)&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;GitHub account&lt;/strong&gt;
--&amp;gt; If you don’t have one, sign up at: &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;https://github.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 1: Update Your System Packages
&lt;/h2&gt;

&lt;p&gt;Open your terminal using &lt;strong&gt;Ctrl + Alt + T&lt;/strong&gt;, then update your package list:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Install Git
&lt;/h2&gt;

&lt;p&gt;Install Git by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Press Y when prompted to confirm the installation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Verify the Installation
&lt;/h2&gt;

&lt;p&gt;Once the installation is complete, confirm that Git was installed successfully:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If Git is installed correctly, you’ll see output similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git version 2.x.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you see the version number, you’re good to proceed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Configure Your Git Username
&lt;/h2&gt;

&lt;p&gt;Git uses a username to identify who made each commit. This should match the username you use on GitHub.&lt;/p&gt;

&lt;p&gt;Run the command below and replace your-github-username with your actual GitHub username:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.name &lt;span class="s2"&gt;"your-github-username"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Configure Your Git Email
&lt;/h2&gt;

&lt;p&gt;Next, set the email address associated with your GitHub account. This email will be attached to your commits.&lt;/p&gt;

&lt;p&gt;Replace &lt;a href="mailto:your-email@example.com"&gt;your-email@example.com&lt;/a&gt; with the email you used when signing up on GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.email &lt;span class="s2"&gt;"your-email@example.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6: Confirm Your Git Configuration
&lt;/h2&gt;

&lt;p&gt;To verify that your username and email were set correctly, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--list&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see output that includes both your user.name and user.email.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  user.email&lt;span class="o"&gt;=&lt;/span&gt;your-email@example.com
  user.name&lt;span class="o"&gt;=&lt;/span&gt;your-github-username
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  What’s Next?
&lt;/h1&gt;

&lt;p&gt;At this point, Git is successfully installed and configured on your machine.&lt;br&gt;
However, to fully interact with GitHub (especially pushing and pulling code), it’s recommended to set up SSH authentication.&lt;/p&gt;

&lt;p&gt;In the next article, we’ll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Generating an SSH key&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Adding it to GitHub&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Connecting securely without typing your password every time&lt;/p&gt;
&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Installing and configuring Git is an essential first step for any developer. With Git set up on your Ubuntu system, you’re now ready to start managing projects, collaborating with others, and contributing to open-source software.&lt;/p&gt;

&lt;p&gt;Happy coding!!!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
