<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: leslie angu</title>
    <description>The latest articles on DEV Community by leslie angu (@leslie_angu_).</description>
    <link>https://dev.to/leslie_angu_</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3933835%2F2e39f40d-6240-4185-a82e-e8503ee05727.jpg</url>
      <title>DEV Community: leslie angu</title>
      <link>https://dev.to/leslie_angu_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leslie_angu_"/>
    <language>en</language>
    <item>
      <title>Power BI Connects to a Database!</title>
      <dc:creator>leslie angu</dc:creator>
      <pubDate>Sun, 05 Jul 2026 10:33:17 +0000</pubDate>
      <link>https://dev.to/leslie_angu_/power-bi-connects-to-a-database-69h</link>
      <guid>https://dev.to/leslie_angu_/power-bi-connects-to-a-database-69h</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Data analysts use Power Bi to build insightful dashboards. Where does this data come from? This led me through a rabbit hole, where I discovered that Power Bi has over 200 distinct data sources through its native connectors, ranging from local Excel files to cloud-based data lakes. The following are the built-in connectors: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Files: Excel, CSV, XML, JSON, PDF, and Parquet&lt;/li&gt;
&lt;li&gt;Databases: SQL Server, Oracle, Snowflake, Google BigQuery, PostgresSQL, and Amazon Redshift&lt;/li&gt;
&lt;li&gt;Cloud Services: Google Analytics, Salesforce, Dynamics 365, SharePoint, and Adobe Analytics&lt;/li&gt;
&lt;li&gt;Online/Web APIs: OData feeds, REST APIs and unstructured web pages.&lt;/li&gt;
&lt;li&gt;Power Platform: Dataverse and Power BI Datasets.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Database Connection
&lt;/h2&gt;

&lt;p&gt;How do you connect Power BI to a database? Their are different types of databases but we will focus on PostgreSQL for the local and cloud server option.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option A: Connecting to postgreSQL database locally
&lt;/h3&gt;

&lt;p&gt;To connect your Power Bi to a local postgreSQL database you will need to have the password, database name, username and port (default:5432) for your postgreSQL &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Launch Power BI&lt;/strong&gt;: Open Power BI Desktop and click on Get Data on the Home ribbon.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Select the connector&lt;/strong&gt;: Type: PostgreSQL in the search box. Select &lt;strong&gt;PostgreSQL database&lt;/strong&gt; and click &lt;strong&gt;Connect&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Enter Server &amp;amp; Database Details: &lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Server: Enter localhost:5432 or 127.0.0.1:5432 if the database is on your machine. Set the port to 5432.&lt;/li&gt;
&lt;li&gt;Database: Enter the specific name of your database&lt;/li&gt;
&lt;li&gt;Data Connectivity Mode: Choose Import(loads data to memory, best for speed and offline work) or DirectQuery (queries the live database for real-time data)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ol&gt;
&lt;li&gt;Authenticate: Go to the Database tab on the left menu. Enter your postgreSQL &lt;strong&gt;Username&lt;/strong&gt; and &lt;strong&gt;Password&lt;/strong&gt;, then click &lt;strong&gt;Connect&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Load Data: Check the boxes next to the tables you want to analyze and select Load (to pull data directly) or Transform Data (to clean and shape it in the Power Query Editor)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuvj4cq19xlj5akesha35.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuvj4cq19xlj5akesha35.png" alt="authenticate postgres" width="750" height="366"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fci6gw6ftxs9yrf8bsyvw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fci6gw6ftxs9yrf8bsyvw.png" alt="load data" width="800" height="633"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Option B: Connecting to PostgreSQL database remotely
&lt;/h3&gt;

&lt;p&gt;A) Log in to your aiven console and navigate to your postgreSQL project. Ensure that your project is running.&lt;/p&gt;

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

&lt;p&gt;B) Locate the Overview or Connection Information tab. Copy and save these individual parameters.&lt;/p&gt;

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

&lt;p&gt;C) Locate the CA certificate option in the same section and click the download icon to save the file locally to your machine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foj14z9lnr2uvp92fq2b9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foj14z9lnr2uvp92fq2b9.png" alt="CA certificate" width="800" height="263"&gt;&lt;/a&gt;&lt;br&gt;
The CA(Certificate Authority) certificate from Aiven to connect to Power BI because Aiven requires mandatory SSL/TLS encryption for all external database connections.&lt;br&gt;
The certificate serves two main purposes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Data Encryption: It encrpts the connection so your credentials and data remain safe while traveling over the public internet. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Server Verification: It allows Power BI to verify that you are connecting to your actual Aiven database rather than a malicious imposter.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;D) Install the SSL certificate in your local machine: search for the manage user certificates. Click the Trusted Root Certification Authorities. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn3mcmjuu7t7i5vqud9yt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn3mcmjuu7t7i5vqud9yt.png" alt="certificate" width="623" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Right click the folder and navigate to import. The certificate Import Wizard will pop up.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7civqrbaquvi0bs60wlq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7civqrbaquvi0bs60wlq.png" alt="wizard" width="531" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Load the downloaded certificate after ensuring all the files are selected.&lt;/p&gt;

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

&lt;p&gt;E) Establish the connection in Power BI Desktop and add the server details from aiven similar to what was illustrated in the local database connection.&lt;/p&gt;

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

&lt;p&gt;Connecting Power BI to both local and cloud-hosted databases is a straightforward process once the required configurations are in place. However, users may encounter common connection issues, such as using &lt;code&gt;localhost&lt;/code&gt; instead of &lt;code&gt;127.0.0.1&lt;/code&gt; when connecting to a local database, or failing to install the appropriate CA certificate required by a cloud database provider. Addressing these configuration requirements ensures secure and reliable connectivity.&lt;/p&gt;

&lt;p&gt;In practice, data analysts are typically provided with the necessary database credentials and access permissions by database administrators. Once connected, they can retrieve, transform, and visualize data in Power BI to create meaningful reports and interactive dashboards that support informed business decision-making.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Let's discuss data modeling, Joins, Schemas and Relationships on Power BI</title>
      <dc:creator>leslie angu</dc:creator>
      <pubDate>Tue, 23 Jun 2026 07:17:13 +0000</pubDate>
      <link>https://dev.to/leslie_angu_/lets-discuss-data-modeling-joins-schemas-and-relationships-on-power-bi-55mf</link>
      <guid>https://dev.to/leslie_angu_/lets-discuss-data-modeling-joins-schemas-and-relationships-on-power-bi-55mf</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqchr2m7xabmmrh1x3xfl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqchr2m7xabmmrh1x3xfl.png" alt="Power Bi" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Last week I had the opportunity to learn a few key skills that are used in Power BI, to make stories from data. I learnt that you can load different types of data to Power BI such as excel, csv, parquet and you can also pull data from databases like postgresql. So what is power BI and what does it do? &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Power BI is a &lt;em&gt;business intelligence&lt;/em&gt; and &lt;em&gt;data visualization platform&lt;/em&gt;. It takes the data collected and stored in different formats and which the use of &lt;em&gt;DAX&lt;/em&gt; (power BI querying language), you can unify scattered financial, sales, operational data and track key performance indicators (KPI).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is data modeling?
&lt;/h2&gt;

&lt;p&gt;Data modeling is the process of &lt;em&gt;identifying&lt;/em&gt;, &lt;em&gt;organizing&lt;/em&gt; and &lt;em&gt;defining&lt;/em&gt; the types of data a business collects and the relationships between them. For example a school system has a spreadsheet of classes, teachers and performance score. Individually they are just records but we can combine them to tell us Math, taught by John Doe is the best performing across different class streams.&lt;br&gt;
Modeling involves: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creating relationships between tables&lt;/li&gt;
&lt;li&gt;Defining calculated columns and measures&lt;/li&gt;
&lt;li&gt;Optimizing data structure for performance&lt;/li&gt;
&lt;li&gt;Ensuring data accuracy and consistency.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What are Relationships in Power Bi?
&lt;/h2&gt;

&lt;p&gt;Imagine you are the data analyst working for Naivas supermarket, with multiple branches all over the country, and each of the branches has its own database where they store important business data like the customer information, sales, and stock. Data from these different branches was collected, and you were asked to combine all this data together and generate insights from it. You will need to create a relationship between these different datasets so as to link them together before you start exploring the data.&lt;br&gt;
To understand how rows in one table is related to another table, we need to discuss cardinality.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Cardinality specifies how the rows in one table are related to the rows in another table.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;To create a relationship in Power BI, you need to link columns that contain the same information and the same column headers together eg Customer_id in the customer table with customer_id in the sales table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqir414z3gu0mzhdf4eqx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqir414z3gu0mzhdf4eqx.png" alt="One-to-many" width="724" height="800"&gt;&lt;/a&gt;&lt;br&gt;
The &lt;strong&gt;one-to-many&lt;/strong&gt; cardinality relationship in Power BI is a connection between two tables in a data model where one unique value in the one table can be associated with multiple values in the many table. For example customers and products: each customer can make multiple purchases of a product, so there is a one to many relationship between them but each purchase(many) is associated with only one customer(one).&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Many-to-one relationship&lt;/strong&gt;: The many to one cardinality in PowerBI refers to a relationship between two tables where multiple records in one table can be associated with a single record in another table. For example in the sales table, one customer can be involved with multiple purchases over time. Multiple purchases associated with one customer.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;One-to-one relationship&lt;/strong&gt;: The one-to-one cardinality in PowerBI is a relationship setting that describes how two tables are related to each other.&lt;/p&gt;

&lt;p&gt;Tables have rows that have unique identifies such as Primary Key (PK). Foreign Key (KY): links records across two tables together.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are schemas?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;A schema refers to the structure and organization of data within a data model. Schemas define how data is connected and related within the model, influencing the efficiency and performance of data queries and reports.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Understanding schemas helps in designing best data models that support comprehensive analysis&lt;/p&gt;

&lt;h3&gt;
  
  
  Types of Schemas in Power BI
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. STAR schema&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fafky7o13jot2kxr4aoaf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fafky7o13jot2kxr4aoaf.png" alt="Star Schema" width="673" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The star schema consists of a central fact table surrounded by dimension tables, forming a star-like pattern.&lt;br&gt;
The central fact table contains quantitative data(eg sales), while the dimension tables hold descriptive attributs related to the facts.(eg customers, products)&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;2. Snowflake Schema&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F35hqgr8un7o696h27wzl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F35hqgr8un7o696h27wzl.png" alt="snowflake" width="636" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Snowflake schema is a normalized version of the star schema. In this design, dimension tables are further divided into related tables, resulting in a more complex structure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The normalization process eliminates redundancy by splitting dimension tables into multiplr related tables. This results in a web-like structure, resembling a snowflake.&lt;br&gt;
&lt;strong&gt;Usage&lt;/strong&gt;: Snowflake schemas are used in scenarios requiring detailed data models and efficient storage. They are beneficial when dealing with large datasets where data redundancy needs to be minimized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Galaxies Schema(or fact constellation schema)&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The galaxies schema involves multiple fact tables that share dimension tables, creating a complex, interconnected data model.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The schema consists of multiple fact tables linked to shared dimension tables, enabling the analysis of different business processes within a single model.&lt;br&gt;
&lt;strong&gt;Usage&lt;/strong&gt;: Galaxies schemas are suitable for large-scale enterprise environments where multiple related business processes need to be analyzed. They support complex queries and detailed reporting across various domains.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are joins?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcvshvtztah8qdv1ibsvb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcvshvtztah8qdv1ibsvb.png" alt="Joins" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Power BI supports all major joins that are available in SQL. To perform joins, you need to access the Power Query Editor which is appears after clicking Transform data. The following join types are standard join types in Power BI and SQL.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Inner Join&lt;/em&gt;: Returns the rows present in both left and right table only if there is a match.&lt;br&gt;
Joining the sales table to the customer table. The common column is customer_id.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftp61vpo2n6cf6a2grnzk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftp61vpo2n6cf6a2grnzk.png" alt="Inner join" width="743" height="663"&gt;&lt;/a&gt;&lt;br&gt;
The expected result after the join: &lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Full Outer Join&lt;/em&gt;: It returns all the rows present in both the left and right table.&lt;br&gt;
Joining the sales table with the products table. The common column is the product_id&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F69b7ljrq9ysil3nbj27x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F69b7ljrq9ysil3nbj27x.png" alt="Full outer join" width="718" height="652"&gt;&lt;/a&gt;&lt;br&gt;
The expected result after the join:&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Left Outer Join&lt;/em&gt;: It returns all the rows present in the Left table and matching rows from the right table(if any)&lt;br&gt;
Joining the sales table with the store table. The common column is the store_id.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi8wjdbbngu2kxq6ggkwn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi8wjdbbngu2kxq6ggkwn.png" alt="Left Outer join" width="737" height="666"&gt;&lt;/a&gt;&lt;br&gt;
The expected result after a left outer join: &lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Right Outer Join&lt;/em&gt;: Returns matching rows from the left table(if any) and all the rows present in the SQL Right Table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo2me4obig7p4jwm6xbhn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo2me4obig7p4jwm6xbhn.png" alt="Right Outer Join" width="723" height="657"&gt;&lt;/a&gt;&lt;br&gt;
The expected result from the right outer join: &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frwlx4tsbg81m9xs60fhv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frwlx4tsbg81m9xs60fhv.png" alt="right outer join" width="799" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Anti Join&lt;/em&gt;: a filtering operation that returns only the rows from the first table(the left table) that do not have matching value in the second table(the right table).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbktbv1t05umiuqr39479.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbktbv1t05umiuqr39479.png" alt="Anti Join" width="720" height="656"&gt;&lt;/a&gt;&lt;br&gt;
The expected result from the left anti join:&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The &lt;em&gt;null&lt;/em&gt; values observed after the join are a result of the absence of matching rows between the two tables.&lt;/p&gt;

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

&lt;p&gt;Power BI is more than just a visualization tool; it is a complete business intelligence platform that enables organizations to transform raw data into meaningful insights. Understanding concepts such as data modeling, relationships, cardinality, schemas, and joins forms the foundation for building efficient and reliable reports.&lt;/p&gt;

&lt;p&gt;By creating proper relationships between tables and designing models using schemas such as the star and snowflake schemas, analysts can ensure consistency, improve query performance, and simplify data analysis. Additionally, mastering joins in Power Query allows data from multiple sources to be combined effectively, making it possible to uncover patterns and answer business questions with confidence.&lt;/p&gt;

&lt;p&gt;As I explored these concepts, I realized that creating dashboards is only one part of the process. The real value lies in designing a robust data model that enables accurate analysis and storytelling. This learning experience provided me with a deeper appreciation of how Power BI bridges the gap between raw data and informed decision-making, and it has given me a solid foundation for building more advanced reports and analytical solutions in the future.&lt;/p&gt;

</description>
      <category>powerfuldevs</category>
      <category>data</category>
    </item>
    <item>
      <title>Git &amp; Github Fundamentals For developers</title>
      <dc:creator>leslie angu</dc:creator>
      <pubDate>Sun, 14 Jun 2026 20:43:08 +0000</pubDate>
      <link>https://dev.to/leslie_angu_/git-github-fundamentals-for-developers-mpd</link>
      <guid>https://dev.to/leslie_angu_/git-github-fundamentals-for-developers-mpd</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The week that had passed, I was curious about how data engineers use git and github to perform their tasks. I managed to learn a few core usages and I broke them down so that a novice programmer could understand them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Understanding Git
&lt;/h3&gt;

&lt;p&gt;So basically git is used for version control. What is version control and who cares about what it does... &lt;br&gt;
Version control is a system that tracks and manages changes to files over time. According to the research I did, it acts like a time machine: allowing you to take specific snapshots of your work, compare differences, and instantly revert back to an older working version if something goes wrong. To put it into a simpler percpective, imagine having a shopping list and pulling a trolley, when you get into the supermarket, you check what is on your list and pick them as you add them to your shopping cart. As time goes buy and the ice cream you picked melted, you can return it into the freezer and pick another one.&lt;/p&gt;
&lt;h4&gt;
  
  
  Why is git useful
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Total accountability: You can see exactly who made a change, what they changed, when it happened, and why.&lt;/li&gt;
&lt;li&gt;Pain-Free Collaboration: Teams can work on the same files simultaneously without accidentally overwriting each other's work.&lt;/li&gt;
&lt;li&gt;Safe Experimentation: You can test out new ideas in a separate workspace eg a branch without affecting the main project until you are ready&lt;/li&gt;
&lt;li&gt;Automated Backups: Your project's history is typically stored on a remote cloud server, protecting your work from local machine failures.
#### How does Git work?
Git eradicates the need for manually saving messy copies of your files eg resume1.doc, resume2.doc and resume3.doc -all these might contain the same content with minimal changes. Version control does the organizing for you. You make edits to your files, and when you are satisfied with a set of changes, you save a permanent snapshot of the project. These snapshots are stored in a database called repository.
## What is Github?
Git hub is a cloud-based platform and hosting service where developers store, share, and collaborate on software code.
It is like Google Drive and Icloud.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Let's get to learn how version control works
&lt;/h2&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%2Fjh27mtfwzgen5ahyhgde.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%2Fjh27mtfwzgen5ahyhgde.jpg" alt="How version Control Works" width="800" height="192"&gt;&lt;/a&gt;&lt;br&gt;
We need to track the work down in the working directory by using &lt;strong&gt;git init&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ADMIN@uSER MINGW64/Documents/Project/ git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fz9s777edi04hjnn1g8u5.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%2Fz9s777edi04hjnn1g8u5.png" alt="Git init" width="583" height="365"&gt;&lt;/a&gt;&lt;br&gt;
We list the contents in the directory using &lt;strong&gt;ls&lt;/strong&gt;, then we check the status of the directory. &lt;strong&gt;Git status&lt;/strong&gt; works by comparing the differences in three distinct states: HEAD Commit, staging area, and working directory.&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%2F1imswh4xcnae15jd7om6.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%2F1imswh4xcnae15jd7om6.png" alt="git status" width="705" height="308"&gt;&lt;/a&gt;&lt;br&gt;
Note: Most developers use a flag with git status to improve on readability and to save on time. Eg git status -s : short format of the whole message generated.&lt;br&gt;
The directory doesn't have any files so we will create one using &lt;em&gt;touch&lt;/em&gt; and then we will add it to the staging area to be tracked using &lt;strong&gt;git add .&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%2Fvmygasr1nnuohzarx2lg.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%2Fvmygasr1nnuohzarx2lg.png" alt="git add" width="694" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The files in the staging area needs to be committed so that we can permanently save them. This is like a permanent save point in a video game.&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%2F6sf0b6iga64ttp1tcfqf.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%2F6sf0b6iga64ttp1tcfqf.png" alt="git commit" width="745" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pushing the tracked file that was saved to Github
&lt;/h2&gt;

&lt;p&gt;Did you notice the master at the end of the file path in the git bash. That is the branch that we are currently in, it's similar to root. &lt;br&gt;
&lt;strong&gt;Note&lt;/strong&gt;: &lt;strong&gt;Master&lt;/strong&gt; is the older way of naming branches. The new way is using &lt;strong&gt;main&lt;/strong&gt;&lt;br&gt;
We change the branch from master to main using: &lt;em&gt;git branch -M main.&lt;/em&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%2F1ot2tparunyr4lwn3qlv.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%2F1ot2tparunyr4lwn3qlv.png" alt="master to main" width="692" height="127"&gt;&lt;/a&gt;&lt;br&gt;
We need to push the tracked file to github. We log into our github account, create a repository and expect some instructions to push the tracked file. use command git remote add origin &lt;a href="https://github.com/USER/project" rel="noopener noreferrer"&gt;https://github.com/USER/project&lt;/a&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%2Fgg3qfwjer3vfmxzk9ndt.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%2Fgg3qfwjer3vfmxzk9ndt.png" alt="Github repository" width="800" height="534"&gt;&lt;/a&gt;&lt;br&gt;
Finally ensure you can upload the tracked file using &lt;em&gt;git push -u origin main.&lt;/em&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%2Fzxf1ukaaeljl8ruwlwcn.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%2Fzxf1ukaaeljl8ruwlwcn.png" alt="git push" width="800" height="325"&gt;&lt;/a&gt;.&lt;br&gt;
When you refresh your repository, the tracked file will be uploaded.&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%2F5wt0r015nskuyfneb7o1.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%2F5wt0r015nskuyfneb7o1.png" alt="tracked file" width="800" height="453"&gt;&lt;/a&gt;&lt;br&gt;
Note: In case the output from the terminal is fatal, check the repo you connected to using &lt;em&gt;git remote -v&lt;/em&gt; and if your repo url had an issue use this command to reset it:&lt;em&gt;git remote set-url origin &lt;a href="https://github.com/USERNAME/REPOSITORY.git" rel="noopener noreferrer"&gt;https://github.com/USERNAME/REPOSITORY.git&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a Git branch?
&lt;/h3&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%2F5n3sqx8116e70lm6vujs.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%2F5n3sqx8116e70lm6vujs.jpg" alt="Git branch" width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;
A git branch is an independent workspace or "parallel universe" within a code repository that allows developers to make changes without affecting the main project.&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%2F2u2uhjk47el4yfkf7qoh.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%2F2u2uhjk47el4yfkf7qoh.png" alt="branching" width="652" height="133"&gt;&lt;/a&gt;&lt;br&gt;
Creating a branch use git branch and then switching to the branch use git checkout branch-name then alter the file.&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%2Fv2fucj6ui24n0izprnqi.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%2Fv2fucj6ui24n0izprnqi.png" alt="Git branch local" width="800" height="761"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you print out the contents of main.py, they will be completely different if you changed the data in main.py file while still in the local branch.&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%2Flyump587h9i5se7s1bog.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%2Flyump587h9i5se7s1bog.png" alt="main and local are different" width="666" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Let's merge the two branches.
&lt;/h3&gt;

&lt;p&gt;When you want to merge the two files, use git merge but ensure they are in the main branch. Incase you meet any conflict, ensure that you use vim editor and choose which content you would like to remain.&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%2Fd2j6mswqb596pdtv1rgv.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%2Fd2j6mswqb596pdtv1rgv.png" alt="git merge" width="703" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Next concepts to be covered:Git pull, Git clone, git rebase
&lt;/h4&gt;

&lt;p&gt;When you want to collaborate, use ensure you use ssh (secureshell) when cloning the repo. Moreover, use git pull (download any changes from a remote repository and immediately integrate them into your current local working branch)&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary of Git and Github
&lt;/h3&gt;

&lt;p&gt;When you start a project always use git init, ensure you add and commit any changes made to a project periodically.&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>Linux Fundamentals for Data Engineering</title>
      <dc:creator>leslie angu</dc:creator>
      <pubDate>Sun, 07 Jun 2026 13:05:05 +0000</pubDate>
      <link>https://dev.to/leslie_angu_/linux-fundamentals-for-data-engineering-22n8</link>
      <guid>https://dev.to/leslie_angu_/linux-fundamentals-for-data-engineering-22n8</guid>
      <description>&lt;h2&gt;
  
  
  What is data Engineering
&lt;/h2&gt;

&lt;p&gt;Data engineering is the work of building and maintaining the data pipelines that allows organizations to collect, store, process and use data effectively. &lt;br&gt;
Data engineers use different tools to store data such as digital ocean, google cloud platform, azure and Aws. These Saas run on Linux Operating Systems, thus data engineers have to use the terminal to connect, manage and monitor data flows. &lt;/p&gt;

&lt;h2&gt;
  
  
  Linux Essentials
&lt;/h2&gt;

&lt;p&gt;Data engineers use different operating systems to connect to &lt;strong&gt;virtual private servers (VPS)&lt;/strong&gt;. The most common method that is used - &lt;strong&gt;secure shell(SSH)&lt;/strong&gt;.&lt;br&gt;
SSH works on windows after installation of wsl (windows subsystem for linux), however MacOs and Linux operating systems will work with it out of the box. &lt;br&gt;
Since I use windows, I installed wsl, and used ssh &lt;a class="mentioned-user" href="https://dev.to/ip"&gt;@ip&lt;/a&gt; - the username and Ip were provided. The VPS had a password for security purpose and inputting it you get access to an Ubuntu Operating System.&lt;br&gt;
&lt;code&gt;&amp;gt;ssh root@159.65.222.96&lt;/code&gt;&lt;br&gt;
&lt;code&gt;root@159.65.222.96's password:&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34fwd2rd7phn8mv23kic.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%2F34fwd2rd7phn8mv23kic.jpg" alt="Fig 1.shows access to the VPS that I had the logins." width="712" height="608"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When data engineers can't access a particular server because of company restrictions, they use &lt;strong&gt;jump servers&lt;/strong&gt; to connect to a different server.&lt;br&gt;
To check if all the files have the same name contained in all the folders we use &lt;strong&gt;find -name 'file_name'&lt;/strong&gt; 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%2Fq5lput3fs3vwfvl27fe8.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%2Fq5lput3fs3vwfvl27fe8.jpg" alt="Fig 2. Shows the output of checking for a particular file in the server" width="717" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To move files to and from a local machine to the server we use &lt;strong&gt;secure copy protocol (SCL)&lt;/strong&gt;&lt;br&gt;
a) Moving files from local machine to the server:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;scp C:/Users/Admin/Downloads/Rental_property root@159.65.222.96 /root/&amp;lt;folder&amp;gt;&lt;/code&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%2F9339g4rleuhde74qej2w.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%2F9339g4rleuhde74qej2w.jpg" alt="Fig 3. Shows the transfer of files from local machine to the server" width="800" height="97"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;b) Moving files from server to local machine:&lt;br&gt;
&lt;code&gt;scp /root/&amp;lt;folder&amp;gt;/rental_property.csv C:/Users/Admin/Desktop&lt;/code&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%2Frh5mfgfyqbwqnku05xuf.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%2Frh5mfgfyqbwqnku05xuf.jpg" alt="Fig 4. Moving data from the server to the local machine" width="800" height="325"&gt;&lt;/a&gt;&lt;br&gt;
To open a file in the server you can use &lt;strong&gt;vim editor&lt;/strong&gt; or nano editor. Once the file is open, you can edit it by clicking &lt;strong&gt;esc&lt;/strong&gt; and using &lt;strong&gt;I&lt;/strong&gt; for inserting. Click escape then full colon then type  &lt;strong&gt;wq(write-quit)&lt;/strong&gt; to permanently save the changes that have been added to the file. Adding ! to the command &lt;strong&gt;wq!&lt;/strong&gt;, means that your changes will overide any changes that were previously added/currently added.&lt;br&gt;
&lt;code&gt;root@class:~# vim &amp;lt;filename&amp;gt;&lt;/code&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%2Fja6f1a53dzr64cy05d6a.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%2Fja6f1a53dzr64cy05d6a.jpg" alt="A look at the vim editor" width="800" height="1062"&gt;&lt;/a&gt;&lt;br&gt;
To remove files from a folder you can use &lt;strong&gt;rm&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;rm -r &amp;lt;filename&amp;gt;&lt;/code&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%2F2tr2psgwdc6xwvxoc5su.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%2F2tr2psgwdc6xwvxoc5su.jpg" alt="removing a file from the folder using rm" width="704" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To view the contents of a file you can use &lt;strong&gt;more&lt;/strong&gt; or &lt;strong&gt;less&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;root@ip~:# more &amp;lt;filename&amp;gt;&lt;/code&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%2Fejspqsnvk8evcaqvv4mm.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%2Fejspqsnvk8evcaqvv4mm.jpg" alt="using more to see the content inside the csv file" width="800" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To check the first 5 lines of a file use &lt;strong&gt;head&lt;/strong&gt; and to check the last 5 lines of the code use &lt;strong&gt;tail&lt;/strong&gt;.&lt;br&gt;
&lt;code&gt;root@ip~:# head &amp;lt;filename&amp;gt;&lt;/code&gt;&lt;br&gt;
To update the linux operating system currently running in the virtual private server we use &lt;strong&gt;sudo apt update&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%2Fjhv1u3pvlc9f4qvg8zxc.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%2Fjhv1u3pvlc9f4qvg8zxc.jpg" alt="Updating the Linux server" width="800" height="226"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Working with databases in the server - Postgresql
&lt;/h2&gt;

&lt;p&gt;Once you have access to the server, install postgres using the following code: &lt;code&gt;sudo apt install postgresql postgresql-contrib -y&lt;/code&gt;. check the status of the server and the version of the psql. The status check type: &lt;code&gt;sudo systemctl status postgresql&lt;/code&gt; and the version is &lt;code&gt;psql --version&lt;/code&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%2F8noz9k8b00ixjtaa7kmr.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%2F8noz9k8b00ixjtaa7kmr.jpg" alt="Installing postgresql, checking the status and psql version" width="800" height="644"&gt;&lt;/a&gt;&lt;br&gt;
To add a user to a server use:&lt;code&gt;sudo adduser &amp;lt;user&amp;gt;&lt;/code&gt;. If the server rejects the format of the username that you want to add, use: &lt;code&gt;sudo adduser --force-badname username&lt;/code&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%2Fycqlvj7xe6kftr6wtkkq.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%2Fycqlvj7xe6kftr6wtkkq.jpg" alt="Adding a user to the server" width="737" height="404"&gt;&lt;/a&gt;&lt;br&gt;
To check if the user was added use &lt;code&gt;more/etc/passwd&lt;/code&gt;. Ensure you check the last line of the list displayed.&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%2Fh7i3wi20l9q101t352dt.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%2Fh7i3wi20l9q101t352dt.jpg" alt="Checking if the user is added - check last line." width="800" height="853"&gt;&lt;/a&gt;&lt;br&gt;
To access the database using psql shell we access the postgres instance in the server: &lt;code&gt;sudo -i -u postgres&lt;/code&gt;.then we use &lt;code&gt;psql&lt;/code&gt;command to access the psql shell where we can create a database. &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%2F02j325r29f7awyochcwc.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%2F02j325r29f7awyochcwc.jpg" alt="Creating the database and schema" width="799" height="530"&gt;&lt;/a&gt;&lt;br&gt;
After creating the database of your choice, the original postgres super user is the only one who has write and read privileges which makes it a challenge to connect the created database and the new user added to manage the databases.&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%2F81n9ackwgdtnsjk2rdog.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%2F81n9ackwgdtnsjk2rdog.jpg" alt="Dbeaver error due to absence of privileges to the new user added to the postgres instance" width="800" height="503"&gt;&lt;/a&gt;&lt;br&gt;
The solution I opted for is altering the postgres password since I didn't set it up when the postgres was installed.&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%2Fe6dbaryfwsmrqm9dpuw7.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%2Fe6dbaryfwsmrqm9dpuw7.jpg" alt="Altering the postgres password" width="595" height="114"&gt;&lt;/a&gt;The command to alter postgres password in the psql shell is: &lt;code&gt;ALTER USER postgres WITH PASSWORD &amp;lt;newpassword&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;After setting up the postgres database and schema, you need to change a few files in postgresql found in the root folder. The first file is the postgresql.conf that has the  &lt;strong&gt;'listenaddress'&lt;/strong&gt; which should be uncommented after using vim to edit it. The next file to be edited is the pg_hba.conf file that has the firewall setup. Add the following configuration: 'host all all 0.0.0.0 md5' on the last line.&lt;br&gt;
Restart the servers using:&lt;code&gt;sudo systemctl restart postgresql&lt;/code&gt;. This will ensure you don't get the same fault as you saw on dbeaver.&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%2Fdhxf9kzee2z46vop7zqq.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%2Fdhxf9kzee2z46vop7zqq.jpg" alt="The expected outcome from the database connection" width="799" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To check if the database has data, we access the psql shell and type the following commands: &lt;strong&gt;\l&lt;/strong&gt; : List all databases, &lt;strong&gt;\c database_name&lt;/strong&gt; : Connect to a different database, &lt;strong&gt;\dt&lt;/strong&gt; : List all tables in the current database, &lt;strong&gt;\du&lt;/strong&gt; : List all the database users and their roles, &lt;strong&gt;\conninfo&lt;/strong&gt;: display current connection details, &lt;strong&gt;\q&lt;/strong&gt; : Exit&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%2F0t8pb030e0z0y98hkr5z.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%2F0t8pb030e0z0y98hkr5z.jpg" alt="list all databases" width="799" height="248"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;\l&lt;/strong&gt; : List all databases,&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%2Fqk205d0muzqr1b6yt9ae.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%2Fqk205d0muzqr1b6yt9ae.jpg" alt="Changing databses in psql" width="800" height="98"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;\c database_name&lt;/strong&gt; : Connect to a different database&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%2Fhcmybiojxgxiyrb9ip4r.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%2Fhcmybiojxgxiyrb9ip4r.jpg" alt="using dt to check the databases available" width="799" height="248"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;\dt&lt;/strong&gt; : List all tables in the current database&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%2Ffja6ypkhoztemnhucddc.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%2Ffja6ypkhoztemnhucddc.jpg" alt="using dt to check database name" width="799" height="344"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;\du&lt;/strong&gt; : List all the database users and their roles&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%2F9nla0d4811pjmvaa74qd.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%2F9nla0d4811pjmvaa74qd.jpg" alt="connection information" width="797" height="78"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;\conninfo&lt;/strong&gt;: display current connection details&lt;/p&gt;

</description>
      <category>linux</category>
      <category>postgres</category>
      <category>database</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>Venturing into the data space</title>
      <dc:creator>leslie angu</dc:creator>
      <pubDate>Sat, 30 May 2026 12:20:50 +0000</pubDate>
      <link>https://dev.to/leslie_angu_/venturing-into-the-data-space-22nn</link>
      <guid>https://dev.to/leslie_angu_/venturing-into-the-data-space-22nn</guid>
      <description>&lt;h2&gt;
  
  
  Week 1: &lt;strong&gt;Basic fundamentals&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Day 1: Introduction to Data Analytics, Data Science, Data Engineering and AI.
&lt;/h3&gt;

&lt;p&gt;Data is raw unorganized collection of facts, observations or symbols.&lt;br&gt;
Types of data analytics and the data careers in this fields.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Prescriptive Analytics: &lt;em&gt;What should we do about it?&lt;/em&gt;
This is a branch of data that deals with prediction of future outcomes       but also recommends the optimal course of action to take.&lt;/li&gt;
&lt;li&gt;Descriptive Analytics: &lt;em&gt;What happened?&lt;/em&gt;
Summarizes raw historical data into easily readable metrics, charts and reports.&lt;/li&gt;
&lt;li&gt;Predictive Analytics: &lt;em&gt;What is likely to happen?&lt;/em&gt;
Use historical data alongside statistical models and machine learning algorithms to identify trends and to forecast future probabilities.&lt;/li&gt;
&lt;li&gt;Diagnostic Analytics: &lt;em&gt;Why did it happen?&lt;/em&gt;
Involves drilling down into historical data to identify the root causes of specific trends, anomalies, or performance dips.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tools that were installed and their purpose in data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;DBeaver : This is a data base management tool.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vscode: This is an intergrated development environment (IDE), this is where the coding takes place.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python: This is the most preffered language for data analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Github &amp;amp; Git: Git is a tool used to keep track of the changes made to a file and Github is the repository that has a copy of the files that are in the IDE.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Day 2: Dealing with DBMS &amp;amp; Git
&lt;/h3&gt;

&lt;p&gt;I managed to connect two databases to DBeaver. The first was aiven- I had set up postgresql and the credentials were generated which was straighforward. The second was postgresql which was running locally on my pc, which required the database name - postgres, password and port: 5432&lt;/p&gt;

&lt;p&gt;I already had a github account and it was connected to the git on my local machine. I managed to learn a few more git commands that I hadn't used before like git status.&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>git</category>
      <category>virtualmachine</category>
    </item>
  </channel>
</rss>
