{"id":1129,"date":"2025-12-31T21:36:48","date_gmt":"2025-12-31T21:36:48","guid":{"rendered":"https:\/\/ranaghazzi.com\/?page_id=1129"},"modified":"2026-04-11T01:31:09","modified_gmt":"2026-04-11T01:31:09","slug":"ibm-stocks-pilpline","status":"publish","type":"page","link":"https:\/\/ranaghazzi.com\/?page_id=1129","title":{"rendered":"IBM Stocks &#8211; ETL Pipeline"},"content":{"rendered":"<p><style>\n    .light-font-container, .light-font-container p, .light-font-container h2, .light-font-container li {<br \/>\n        font-weight: #FFFFFF !important;<br \/>\n    }<br \/>\n<\/style>\n<\/p>\n<div class=\"light-font-container\" style=\"background-color: #2b85d9; padding: 40px; border-radius: 15px;\">\n\n\n<div style=\"height:18px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading is-style-text-display has-contrast-color has-text-color has-background has-link-color has-x-large-font-size wp-elements-da9b551aa1879c138ce4818fc6e50d83 is-style-text-display--1\" style=\"background-color:#2b85d9\"><strong>Project Overview:<\/strong><\/h2>\n\n\n\n<div class=\"wp-block-buttons alignwide is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-contrast-color has-text-color has-background has-link-color has-large-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/github.com\/Ranoush75\/IBM-ETL.git\" style=\"background-color:#813987b5\"><strong>GitHub<\/strong><\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-contrast-color has-text-color has-background has-link-color has-large-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/ranoush75.github.io\/IBM-ETL\/\" style=\"background-color:#c9fa66\"><strong>Digram<\/strong><\/a><\/div>\n\n\n<\/div>\n\n\n\n<div style=\"height:38px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group has-background has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#2b85d9\">\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-d62f6f325327e94b4dd37f9ce48e1010\" style=\"background-color:#2b86d9a1\">This project builds an ETL pipeline that pulls IBM stock from a public API, stages the raw history in PostgreSQL, then prepares cleaner and analytics-ready layers for reporting.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-2efbf76c96155d9cd82d1af8877f1c8e\" style=\"background-color:#2b86d9a1\">The API returns data in JSON format, including daily open, high, low, close prices, and volume for IBM.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-0d6af295659fc1ff29c9ff1706149fc6\" style=\"background-color:#2b86d9a1\">The dataset includes the latest 100 trading days.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-e73274e7afd78b3b6620dc535d1e4976\" style=\"background-color:#2b86d9a1\">Data is updated every two to three days.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading is-style-default has-contrast-color has-text-color has-background has-link-color has-x-large-font-size wp-elements-8477c8e78025fa12aead4f9cdf63f718\" style=\"background-color:#2b85d9\"><strong>Project Flow<\/strong><\/h2>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group has-background has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#2b85d9\">\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-53eb16c85f588168fe774d1e6644f6d2\" style=\"background-color:#2b86d9a1\">1. Extract daily IBM stock data from the Alpha Vantage API.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-ac29dc0965cb26bf75938db84043925b\" style=\"background-color:#2b86d9a1\">2. Transform the API response into a pandas DataFrame.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-04b2f7bd5957debc1c5980d92ca3a759\" style=\"background-color:#2b86d9a1\">3. Load new records into the staging table IBM_history.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-6c753fd38732331d4bffa59ab49bcd9d\" style=\"background-color:#2b86d9a1\">4. Refresh the silver layer IBM to keep one clean latest record per  Date.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-332367d93758f8aad45dbb6abd8c2242\" style=\"background-color:#2b86d9a1\">5. Refresh the gold layer IBM_gold  to calculate business metrics for analysis.<\/p>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-x-large-font-size wp-elements-d626dbe3b084fe35db1821313fad9c0e\" style=\"background-color:#2b85d9\"><strong>This pipeline uses a split-responsibility approach:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-group has-background has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#2b85d9\">\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-ff29af529d76e0e802050a50d35c903d\" style=\"background-color:#2b86d9a1\"><strong>1. Python orchestrates ETL stages.<\/strong><\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-323713a177844603590e4aa36023e45c\" style=\"background-color:#2b86d9a1\">&#8211; Loads local settings from .env.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-13846f23a34842377730996b233a9c28\" style=\"background-color:#2b86d9a1\">&#8211; Calls the Alpha Vantage API and transforms the payload to a pandas DataFrame.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-9efbf4f7aa3350c86a3e5bf032741d82\" style=\"background-color:#2b86d9a1\">&#8211; Appends incremental records to the stage table IBM_history.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-468cb6b2496edd7f66a9b07988840a1e\" style=\"background-color:#2b86d9a1\"><strong>2. Python deploys SQL objects from IBM_StoredProcedure.sql.<\/strong><\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-347dacb79836e308d357765b1a59eef6\" style=\"background-color:#2b86d9a1\">&#8211; Creates indexes and target tables if they do not exist.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-88167225cbe65241ba58119c8cacee09\" style=\"background-color:#2b86d9a1\">&#8211; Creates or replaces stored procedures for silver and gold refresh steps.<\/p>\n\n\n\n<div style=\"height:23px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-16b690010813ad76f05e925067311c8e\" style=\"background-color:#2b86d9a1\"><strong>3. Python calls PostgreSQL procedures.<\/strong><\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-d692579ecb2abdcdb052a41dc3e1256b\" style=\"background-color:#2b86d9a1\">&#8211; Executes CALL refresh_ibm_silver();<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-399a2cc098e8c200ef8e0b3d478d9024\" style=\"background-color:#2b86d9a1\">&#8211; Executes CALL refresh_ibm_gold();<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-879b8442e216202490c87123c603cd44\" style=\"background-color:#2b86d9a1\"><strong>4. PostgreSQL performs set-based processing.<\/strong><\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-3edbb9bd3ca118528d5d22d89ac16a5b\" style=\"background-color:#2b86d9a1\">&#8211; refresh_ibm_silver() deduplicates stage records by Date using the newest Last_updated, then upserts into IBM.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-68cfd2b912489b9d12b052bd92aacdd0\" style=\"background-color:#2b86d9a1\">&#8211; refresh_ibm_gold() calculates analytics metrics (daily return, 7-day MA, 30-day MA, 30-day volatility, 30-day volume MA, trend flag), then upserts into IBM_gold.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading has-contrast-color has-text-color has-background has-link-color has-x-large-font-size wp-elements-c4b492196494d9efc808e4f206f7f654\" style=\"background-color:#2b85d9\">Why this design:<\/h2>\n\n\n\n<div class=\"wp-block-group has-background has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#2b85d9\">\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-ae33b6ee02ded471e8926ead2d6ab290\" style=\"background-color:#2b86d9a1\">&#8211; Python is used for connectivity, API extraction, and orchestration.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-b6b22824cae53e8686566ea22fc3db41\" style=\"background-color:#2b86d9a1\">&#8211; PostgreSQL is used for batch SQL logic and metric calculations close to the data.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-33c412f1da57b76ad165ca7dfa49bbde\" style=\"background-color:#2b86d9a1\">&#8211; This keeps the pipeline easier to maintain and improves refresh performance.<\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div class=\"wp-block-group has-background has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#2b85d9\">\n<h2 class=\"wp-block-heading has-text-align-center has-contrast-color has-text-color has-background has-link-color has-x-large-font-size wp-elements-0e2bce862bea452583cd476043148fbf\" style=\"background-color:#2b85d9\">Bronze Layer<\/h2>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-40ff93334653ea3cdd6a16ea10075548\" style=\"background-color:#2b86d9a1\">Table: IBM_history<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-badd9fac687c2f5b6e1c4e056be98154\" style=\"background-color:#2b86d9a1\">&#8211; Purpose: store newly extracted API records before downstream processing<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-7393c815745337dfbc437bd7e694c4f1\" style=\"background-color:#2b86d9a1\">&#8211; Notes: this layer can contain repeated dates from multiple loads<\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group has-background has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#2b85d9\">\n<h2 class=\"wp-block-heading has-text-align-center has-contrast-color has-text-color has-background has-link-color has-x-large-font-size wp-elements-06ea49493068895f4c1a165adeceb4be\" style=\"background-color:#2b85d9\">Silver Layer<\/h2>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-f037fe6029b81d1df2d494fad193b49c\" style=\"background-color:#2b86d9a1\">&#8211; Table: IBM<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-38112366c7d482ad3f95aed19c5d6f57\" style=\"background-color:#2b86d9a1\">&#8211; Purpose: keep the latest clean record for each business date<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-0ecd25bd58060db4f5edb44edad7b72e\" style=\"background-color:#2b86d9a1\">&#8211; Logic: use an upsert process on Date and keep the newest Last_updated value<\/p>\n<\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div class=\"wp-block-group has-background has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#000000\">\n<h2 class=\"wp-block-heading has-text-align-center has-contrast-color has-text-color has-background has-link-color has-x-large-font-size wp-elements-ff75edd8f6467efc9278c078cb6054f3\" style=\"background-color:#2b85d9\"><strong>Gold Layer<\/strong><\/h2>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-4a7a9531fac1d5b781b02eca8fe92d3d\" style=\"background-color:#2b85d9\">&#8211; Table: IBM_gold<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-c9f33582575709f982be589d35f199bf\" style=\"background-color:#2b85d9\">&#8211; Purpose: provide analytics-ready metrics from the silver table<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-background has-link-color has-large-font-size wp-elements-6fd4df40f8156aa1b78fa8e40ac69d84\" style=\"background-color:#2b85d9\">&#8211; Metrics: daily return, 7-day moving average, 30-day moving average, 30-day volatility, and volume moving average<\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>Project Overview: This project builds an ETL pipeline that pulls IBM stock from a public API, stages the raw history in PostgreSQL, then prepares cleaner and analytics-ready layers for reporting. The API returns data in JSON format, including daily open, high, low, close prices, and volume for IBM. The dataset includes the latest 100 trading [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":30,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1129","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>IBM Stocks - ETL Pipeline - Rana Nasri Ghazzi<\/title>\n<meta name=\"description\" content=\"Browse real-world data projects by Rana Ghazzi, covering data cleaning, analysis, and storytelling with Python, SQL, and Tableau Explore Rana Ghazzi&#039;s data analytics portfolio \u2014 dashboards, visualizations, and insights built with Tableau, Power BI &amp; Python.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ranaghazzi.com\/?page_id=1129\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"IBM Stocks - ETL Pipeline - Rana Nasri Ghazzi\" \/>\n<meta property=\"og:description\" content=\"Browse real-world data projects by Rana Ghazzi, covering data cleaning, analysis, and storytelling with Python, SQL, and Tableau Explore Rana Ghazzi&#039;s data analytics portfolio \u2014 dashboards, visualizations, and insights built with Tableau, Power BI &amp; Python.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ranaghazzi.com\/?page_id=1129\" \/>\n<meta property=\"og:site_name\" content=\"Rana Nasri Ghazzi\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-11T01:31:09+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ranaghazzi.com\/?page_id=1129\",\"url\":\"https:\/\/ranaghazzi.com\/?page_id=1129\",\"name\":\"IBM Stocks - ETL Pipeline - Rana Nasri Ghazzi\",\"isPartOf\":{\"@id\":\"https:\/\/ranaghazzi.com\/#website\"},\"datePublished\":\"2025-12-31T21:36:48+00:00\",\"dateModified\":\"2026-04-11T01:31:09+00:00\",\"description\":\"Browse real-world data projects by Rana Ghazzi, covering data cleaning, analysis, and storytelling with Python, SQL, and Tableau Explore Rana Ghazzi's data analytics portfolio \u2014 dashboards, visualizations, and insights built with Tableau, Power BI & Python.\",\"breadcrumb\":{\"@id\":\"https:\/\/ranaghazzi.com\/?page_id=1129#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ranaghazzi.com\/?page_id=1129\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ranaghazzi.com\/?page_id=1129#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ranaghazzi.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Home\",\"item\":\"https:\/\/ranaghazzi.com\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Projects\",\"item\":\"https:\/\/ranaghazzi.com\/?page_id=30\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"IBM Stocks &#8211; ETL Pipeline\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ranaghazzi.com\/#website\",\"url\":\"https:\/\/ranaghazzi.com\/\",\"name\":\"Rana Nasri Ghazzi\",\"description\":\"Turning Data into Decisions\",\"publisher\":{\"@id\":\"https:\/\/ranaghazzi.com\/#\/schema\/person\/d8ee34f53cb0df9faaf816fb5363a4cc\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ranaghazzi.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/ranaghazzi.com\/#\/schema\/person\/d8ee34f53cb0df9faaf816fb5363a4cc\",\"name\":\"Rana Ghazzi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ranaghazzi.com\/wp-content\/uploads\/2025\/11\/logo.png\",\"url\":\"https:\/\/ranaghazzi.com\/wp-content\/uploads\/2025\/11\/logo.png\",\"contentUrl\":\"https:\/\/ranaghazzi.com\/wp-content\/uploads\/2025\/11\/logo.png\",\"width\":1024,\"height\":1024,\"caption\":\"Rana Ghazzi\"},\"logo\":{\"@id\":\"https:\/\/ranaghazzi.com\/wp-content\/uploads\/2025\/11\/logo.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"IBM Stocks - ETL Pipeline - Rana Nasri Ghazzi","description":"Browse real-world data projects by Rana Ghazzi, covering data cleaning, analysis, and storytelling with Python, SQL, and Tableau Explore Rana Ghazzi's data analytics portfolio \u2014 dashboards, visualizations, and insights built with Tableau, Power BI & Python.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ranaghazzi.com\/?page_id=1129","og_locale":"en_US","og_type":"article","og_title":"IBM Stocks - ETL Pipeline - Rana Nasri Ghazzi","og_description":"Browse real-world data projects by Rana Ghazzi, covering data cleaning, analysis, and storytelling with Python, SQL, and Tableau Explore Rana Ghazzi's data analytics portfolio \u2014 dashboards, visualizations, and insights built with Tableau, Power BI & Python.","og_url":"https:\/\/ranaghazzi.com\/?page_id=1129","og_site_name":"Rana Nasri Ghazzi","article_modified_time":"2026-04-11T01:31:09+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/ranaghazzi.com\/?page_id=1129","url":"https:\/\/ranaghazzi.com\/?page_id=1129","name":"IBM Stocks - ETL Pipeline - Rana Nasri Ghazzi","isPartOf":{"@id":"https:\/\/ranaghazzi.com\/#website"},"datePublished":"2025-12-31T21:36:48+00:00","dateModified":"2026-04-11T01:31:09+00:00","description":"Browse real-world data projects by Rana Ghazzi, covering data cleaning, analysis, and storytelling with Python, SQL, and Tableau Explore Rana Ghazzi's data analytics portfolio \u2014 dashboards, visualizations, and insights built with Tableau, Power BI & Python.","breadcrumb":{"@id":"https:\/\/ranaghazzi.com\/?page_id=1129#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ranaghazzi.com\/?page_id=1129"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/ranaghazzi.com\/?page_id=1129#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ranaghazzi.com\/"},{"@type":"ListItem","position":2,"name":"Home","item":"https:\/\/ranaghazzi.com\/"},{"@type":"ListItem","position":3,"name":"Projects","item":"https:\/\/ranaghazzi.com\/?page_id=30"},{"@type":"ListItem","position":4,"name":"IBM Stocks &#8211; ETL Pipeline"}]},{"@type":"WebSite","@id":"https:\/\/ranaghazzi.com\/#website","url":"https:\/\/ranaghazzi.com\/","name":"Rana Nasri Ghazzi","description":"Turning Data into Decisions","publisher":{"@id":"https:\/\/ranaghazzi.com\/#\/schema\/person\/d8ee34f53cb0df9faaf816fb5363a4cc"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ranaghazzi.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/ranaghazzi.com\/#\/schema\/person\/d8ee34f53cb0df9faaf816fb5363a4cc","name":"Rana Ghazzi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ranaghazzi.com\/wp-content\/uploads\/2025\/11\/logo.png","url":"https:\/\/ranaghazzi.com\/wp-content\/uploads\/2025\/11\/logo.png","contentUrl":"https:\/\/ranaghazzi.com\/wp-content\/uploads\/2025\/11\/logo.png","width":1024,"height":1024,"caption":"Rana Ghazzi"},"logo":{"@id":"https:\/\/ranaghazzi.com\/wp-content\/uploads\/2025\/11\/logo.png"}}]}},"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=\/wp\/v2\/pages\/1129","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1129"}],"version-history":[{"count":217,"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=\/wp\/v2\/pages\/1129\/revisions"}],"predecessor-version":[{"id":3379,"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=\/wp\/v2\/pages\/1129\/revisions\/3379"}],"up":[{"embeddable":true,"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=\/wp\/v2\/pages\/30"}],"wp:attachment":[{"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}