API Data Isn’t Ready for Power BI Yet | Python + Snowflake
API Data Isn’t Ready for Power BI Yet – Why RAW JSON Needs Transformation
ஒரு Analytics Engineering Project-ல் External API-யிலிருந்து Data கிடைத்துவிட்டால், அடுத்ததாக அதை நேரடியாக Power BI-க்கு Connect செய்துவிடலாம் என்று நினைக்கலாம்.
Technically சில சூழ்நிலைகளில் அது possible. ஆனால் Enterprise Analytics Architecture-ல் அது சரியான Approach அல்ல.
குறிப்பாக API-யிலிருந்து வரும் JSON Data Nested மற்றும் Semi-Structured Format-ல் இருந்தால், அதை நேரடியாக Power BI-ல் பயன்படுத்துவது Analytics மற்றும் Maintenance இரண்டிற்கும் Problems உருவாக்கலாம்.
இந்த Project-ல் OpenSky API மூலம் Flight Data கிடைக்கிறது. Python அந்த API Data-வை Retrieve செய்து Snowflake RAW Layer-ல் Store செய்கிறது.
ஆனால் இந்த RAW JSON Data இன்னும் Power BI Dashboard-க்கு Ready இல்லை. அதற்கு நடுவில் இன்னும் ஒரு முக்கியமான Transformation Layer தேவைப்படுகிறது.
What You Will Learn
- API Data ஏன் Direct-ஆக Power BI-க்கு Ready இல்லை?
- OpenSky API Response எப்படி இருக்கும்?
- JSON மற்றும் Tabular Data இடையேயான வித்தியாசம்
- Snowflake RAW Layer-ன் Purpose
VARIANTData Type ஏன் பயன்படுத்தப்படுகிறது?- ஒரு API Response-ல் பல Aircraft Data எப்படி இருக்கிறது?
- Raw JSON-ஐ ஏன் Preserve செய்ய வேண்டும்?
- Power BI-க்கு Clean Data ஏன் தேவை?
- dbt STAGING Layer ஏன் தேவை?
- RAW → STAGING → MART Architecture எப்படி வேலை செய்கிறது?
Why API Data Isn't Ready for Power BI
ஒரு API-யிலிருந்து Data கிடைத்தவுடன் அது Business Analytics-க்கு Ready Data என்று அர்த்தமில்லை.
API-யின் முக்கியமான நோக்கம் Applications-க்கு Data வழங்குவது. Power BI-ன் நோக்கம் Business Users-க்கு Data-வை Understand செய்யவும் Analyze செய்யவும் உதவுவது.
இந்த இரண்டிற்கும் இடையில் ஒரு Transformation Layer தேவைப்படும்.
API Data vs Analytics Data
ஒரு API Response பொதுவாக Technical Structure-ல் இருக்கும்.
{
"time": 1715163861,
"states": [
[
"a1b2c3",
"AI302",
"India",
80.223,
13.084,
35000,
450.5
]
]
}
இதில் Data இருக்கிறது. ஆனால் Business User இதைப் பார்த்தால் உடனடியாக எந்த Aircraft, எந்த Country, எங்கே இருக்கிறது, எவ்வளவு உயரத்தில் பறக்கிறது, எவ்வளவு வேகத்தில் செல்கிறது போன்ற தகவல்களை புரிந்துகொள்ள முடியாது.
இதுதான் Source Data மற்றும் Analytics Data இடையேயான முக்கியமான வித்தியாசம்.
Understanding the OpenSky API Response
OpenSky API Response-ல் முக்கியமான ஒரு பகுதி states.
states என்பது ஒரு Array. இந்த Array-க்குள் பல Aircraft-களின்
State Information இருக்கும்.
API Response
↓
states
↓
Aircraft 1
Aircraft 2
Aircraft 3
Aircraft 4
...
ஒரே API Response-க்குள் பல Aircraft Records இருக்கலாம். இந்த Project-ல் ஒரு API Response-ல் 6,833 Aircraft States கிடைத்தன.
Understanding the Aircraft Data
ஒரு Aircraft State-ல் பல Attributes இருக்கும். அவற்றில் சில முக்கியமான Fields:
| Field | Meaning |
|---|---|
icao24 |
Aircraft-ன் Unique Identifier |
callsign |
Flight / Aircraft Callsign |
origin_country |
Aircraft பதிவு செய்யப்பட்ட நாடு |
longitude |
Current Longitude |
latitude |
Current Latitude |
baro_altitude |
Aircraft Altitude |
velocity |
Aircraft Speed |
true_track |
Aircraft Direction |
vertical_rate |
Climbing / Descending Information |
last_contact |
Last Signal Received Time |
இந்த Fields-தான் பின்னர் நம்முடைய Analytics-க்கு முக்கியமான Columns ஆக மாறும்.
Why Store Raw JSON in Snowflake?
API Data கிடைத்தவுடன் அதை முழுவதுமாக Transform செய்யாமல் முதலில் RAW Layer-ல் Store செய்கிறோம்.
இதற்கு முக்கியமான காரணம் Data Preservation.
Raw Layer-ல் Source Data அதன் Original Structure-க்கு அருகில் Preserve செய்யப்படுகிறது.
OpenSky API
↓
Python
↓
Snowflake RAW
இதனால் Source Data நம்மிடம் பாதுகாப்பாக இருக்கும்.
What is the RAW Layer?
RAW Layer என்பது Source-லிருந்து கிடைத்த Data-வை Original அல்லது Near-Original Form-ல் Store செய்யும் Layer.
இதன் நோக்கம் Business Logic Apply செய்வது அல்ல.
- Source Data Preserve செய்தல்
- Original Structure Maintain செய்தல்
- Reprocessing-க்கு Data வைத்திருத்தல்
- Troubleshooting-க்கு உதவுதல்
- Future Transformations-க்கு Source வழங்குதல்
Snowflake VARIANT for JSON
JSON போன்ற Semi-Structured Data-வை Snowflake-ல் Store செய்வதற்கு
VARIANT Data Type மிகவும் பயனுள்ளதாக இருக்கும்.
CREATE TABLE OPEN_SKY_STATES (
INGESTED_AT TIMESTAMP,
RAW_DATA VARIANT
);
இங்கே INGESTED_AT Data எப்போது Snowflake-க்கு வந்தது என்பதை Store செய்கிறது.
RAW_DATA முழு JSON Response-ஐ Store செய்கிறது.
Why INGESTED_AT Matters
INGESTED_AT ஒரு சாதாரண Timestamp போல தோன்றலாம்.
ஆனால் Data Engineering மற்றும் Analytics Engineering Projects-ல் இது மிகவும் முக்கியமான Metadata.
2026-08-25 14:30:00
2026-08-25 14:31:00
2026-08-25 14:32:00
இதன் மூலம் ஒவ்வொரு Data Load எப்போது நடந்தது என்பதை Track செய்யலாம்.
- Data Freshness
- Pipeline Monitoring
- Troubleshooting
- Historical Analysis
- Incremental Processing
Why Can't We Directly Use RAW JSON in Power BI?
Power BI மிகவும் Powerful Analytics Tool. ஆனால் Power BI-க்கு Business-friendly Tabular Data Model கிடைத்தால் Analytics செய்வது மிகவும் எளிதாக இருக்கும்.
RAW JSON:
{
"time": "...",
"states": [
[...],
[...],
[...]
]
}
இது ஒரு Nested Structure.
Power BI Dashboard-க்கு நாம் எதிர்பார்ப்பது:
| Aircraft | Country | Latitude | Longitude | Altitude | Velocity |
|---|---|---|---|---|---|
| AI302 | India | 13.084 | 80.223 | 35000 | 450.5 |
| EK543 | UAE | 25.250 | 55.365 | 37000 | 480.2 |
| SQ321 | Singapore | 1.350 | 103.819 | 36000 | 470.8 |
Source Data vs Business-ready Data
| RAW API Data | Analytics-ready Data |
|---|---|
| Nested JSON | Flat Table |
| Technical Structure | Business-friendly Structure |
| Semi-Structured | Structured |
| Difficult to Analyze | Easy to Analyze |
| Source-oriented | Business-oriented |
| Not ideal for Power BI | Optimized for Power BI |
Why Not Transform Everything in Python?
ஒரு obvious question:
"Python-லேயே JSON-ஐ Clean செய்து Power BI-ready Data உருவாக்கலாமே?"
Technically செய்யலாம். ஆனால் Analytics Engineering Architecture-ல் எல்லா Transformations-ஐ Python-ல் வைத்திருப்பது அவசியம் இல்லை.
நம்முடைய Project-ல் Python-ன் முக்கியமான Responsibility:
Extract
↓
Load
அதாவது API-யிலிருந்து Data Extract செய்து Snowflake RAW Layer-க்கு Load செய்வது. Data Transformation-ஐ dbt-க்கு கொடுக்கிறோம்.
Python
↓
Ingestion
dbt
↓
Transformation
இதனால் ஒவ்வொரு Tool-க்கும் Clear Responsibility இருக்கும்.
Enter dbt
இப்போது நம்முடைய Architecture-ல் dbt வருகிறது.
dbt-ன் முக்கியமான வேலை: Data Warehouse-ல் இருக்கும் Data-வை SQL மூலம் Transform செய்து Analytics-ready Models உருவாக்குவது.
RAW
↓
STAGING
↓
MART
என்ற Layered Architecture உருவாக்கலாம்.
RAW → STAGING
முதல் Transformation Layer STAGING.
இங்கே Raw JSON Data-வை Structured Data-ஆக மாற்ற ஆரம்பிக்கிறோம்.
RAW_DATA
↓
JSON Parsing
↓
Flatten
↓
Rename Columns
↓
Data Types
↓
STAGING
இதன் மூலம் Technical Source Data-வை Clean மற்றும் Consistent Columns-ஆக மாற்றலாம்.
What Happens in STAGING?
Staging Layer பொதுவாக Source Data-க்கு Basic Cleaning மற்றும் Standardization செய்யும் இடம்.
- Column Names Standardize செய்தல்
- Data Types Correct செய்தல்
- Nested Data Flatten செய்தல்
- Invalid Records Handle செய்தல்
- Required Columns மட்டும் Select செய்தல்
- Basic Transformations செய்தல்
இந்த Layer-ல் தேவையில்லாத Heavy Business Logic சேர்ப்பதைத் தவிர்ப்பது நல்ல Practice.
STAGING → MART
அடுத்த Layer MART.
இது Business மற்றும் Analytics use cases-க்கு Optimized Data Layer.
STAGING
↓
Aircraft Model
Flight Model
Airport Model
Country Model
↓
MART
Power BI இந்த Layer-ஐ பயன்படுத்தி Dashboards உருவாக்கலாம்.
Complete Analytics Engineering Architecture
OpenSky API
│
▼
Python
Ingestion
│
▼
Snowflake RAW
Raw JSON Data
│
▼
dbt
STAGING
Cleaned Data
│
▼
dbt
MART
Business-ready Data
│
▼
Power BI
Analytics
இதுதான் ஒரு Clean மற்றும் Maintainable Analytics Engineering Architecture.
Why Layered Architecture Matters
ஒரே Table-ல் எல்லாவற்றையும் செய்வதற்குப் பதிலாக Layers பயன்படுத்துவதால் Project மிகவும் Manageable ஆகிறது.
| Layer | Purpose |
|---|---|
| RAW | Source Data-வை Preserve செய்யும் |
| STAGING | Clean & Standardize செய்யும் |
| MART | Business-ready Data வழங்கும் |
| Power BI | Visualize & Analyze செய்யும் |
A Simple Real-World Example
ஒரு Flight Analytics Dashboard உருவாக்க வேண்டும் என்று வைத்துக்கொள்வோம்.
Business User கேட்கிறார்:
"Currently எத்தனை Flights Air-ல் இருக்கிறது?"
RAW JSON-ல் இதை நேரடியாக Answer செய்வது கடினமாக இருக்கும்.
ஆனால் Staging மற்றும் Mart Layers மூலம்:
Aircraft State
↓
Valid Aircraft
↓
Current Flight Status
↓
Active Flights Measure
↓
Power BI KPI
என்று Business Logic உருவாக்கலாம். அதுதான் Analytics Engineering-ன் Value.
What Power BI Actually Needs
Power BI-க்கு Data மட்டும் போதாது.
- Clean Columns
- Correct Data Types
- Meaningful Names
- Relationships
- Business Logic
- Measures
- Proper Data Model
அதனால் API Response-ஐ Power BI-க்கு Direct-ஆக கொடுப்பதை விட, ஒரு proper Semantic / Analytics Layer உருவாக்குவது நல்ல Practice.
Common Mistakes to Avoid
❌ API → Power BI Direct
API Data கிடைத்தவுடன் Power BI-க்கு Connect செய்வது.
✅ Better Approach
API → RAW → STAGING → MART → Power BI
❌ RAW Data-ல் Business Logic
Raw Layer-ல் Business Rules சேர்ப்பது நல்ல Practice அல்ல.
✅ Better Approach
Raw Layer-ஐ Source Data Preservation-க்கு பயன்படுத்துங்கள்.
❌ எல்லா Transformations-ஐ Python-ல் செய்வது
Python-ல் Extraction மற்றும் Loading செய்வது சரியானது. ஆனால் Warehouse Transformation-ஐ dbt மூலம் Manage செய்வது Analytics Engineering Architecture-க்கு மிகவும் பொருத்தமானது.
❌ JSON Structure-ஐ Ignore செய்வது
Nested JSON-ஐ Tabular Data போல Treat செய்யக்கூடாது.
✅ Better Approach
JSON Structure-ஐ புரிந்துகொண்டு தேவையான Fields-ஐ Staging Layer-ல் Extract செய்யுங்கள்.
❌ Raw Row Count-ஐ Aircraft Count என்று நினைப்பது
ஒரு Raw Row-க்குள் பல Aircraft States இருக்கலாம்.
✅ Better Approach
JSON Array-ஐ Parse / Flatten செய்து Actual Aircraft Records உருவாக்குங்கள்.
Key Takeaways
- ✅ API Data கிடைத்துவிட்டது என்றால் அது Analytics-ready Data என்று அர்த்தமில்லை.
- ✅ OpenSky API Response JSON மற்றும் Nested Structure-ல் இருக்கலாம்.
- ✅ ஒரு API Response-க்குள் பல Aircraft States இருக்கலாம்.
- ✅ இந்த Project-ல் ஒரு Response-ல் 6,833 Aircraft States கிடைத்தன.
- ✅ Snowflake RAW Layer Source Data-வை Preserve செய்ய பயன்படுகிறது.
- ✅ JSON Data-வை Snowflake
VARIANTColumn-ல் Store செய்யலாம். - ✅
INGESTED_ATData Load Time-ஐ Track செய்ய உதவும். - ✅ RAW JSON-ஐ Direct-ஆக Power BI-ல் பயன்படுத்துவது நல்ல Analytics Architecture அல்ல.
- ✅ Python Data Ingestion-க்கு பயன்படுத்தப்படுகிறது.
- ✅ dbt Data Transformation-க்கு பயன்படுத்தப்படுகிறது.
- ✅ STAGING Layer Data-வை Clean மற்றும் Standardize செய்கிறது.
- ✅ MART Layer Business-ready Data-வை வழங்குகிறது.
- ✅ Power BI இறுதியாக Analytics மற்றும் Visualization-க்கு பயன்படுத்தப்படுகிறது.
API → Python → Snowflake RAW → dbt STAGING → dbt MART → Power BI
Frequently Asked Questions
1. API Data-வை Direct-ஆக Power BI-க்கு Connect செய்யலாமா?
Technically சில APIs-ஐ Power BI-க்கு Direct-ஆக Connect செய்யலாம். ஆனால் Enterprise Analytics Projects-ல் API Response Nested JSON அல்லது Semi-Structured Data-ஆக இருந்தால், அதை முதலில் Data Warehouse-ல் RAW Layer-ஆக Store செய்து, dbt மூலம் Transform செய்வது மிகவும் Maintainable Approach.
2. RAW JSON என்றால் என்ன?
Source API-யிலிருந்து கிடைக்கும் JSON Response-ஐ அதன் Original Structure-க்கு அருகில் Store செய்வதே RAW JSON. இது Source Data-வை Preserve செய்வதற்காக பயன்படுத்தப்படுகிறது.
3. Snowflake VARIANT என்றால் என்ன?
VARIANT என்பது Snowflake-ல் JSON போன்ற Semi-Structured Data-வை
Store செய்ய பயன்படும் Data Type.
Nested JSON Data-வை Store மற்றும் Query செய்வதற்கு இது மிகவும் பயனுள்ளதாக இருக்கும்.
4. RAW, STAGING மற்றும் MART என்றால் என்ன?
RAW → Source Data
STAGING → Cleaned and Standardized Data
MART → Business-ready Data
5. Python மற்றும் dbt இரண்டிற்கும் என்ன Role?
இந்த Architecture-ல் Python முக்கியமாக Data Ingestion-க்கு பயன்படுத்தப்படுகிறது. dbt முக்கியமாக Data Transformation and Modeling-க்கு பயன்படுத்தப்படுகிறது.
6. Power BI-க்கு ஏன் Clean Data தேவை?
Power BI-ல் meaningful Dashboard மற்றும் Analytics உருவாக்க Clean Columns, Correct Data Types, Relationships, Business Logic மற்றும் proper Data Model தேவை. Raw Nested JSON இவற்றை நேரடியாக வழங்காது.
7. ஒரு API Response-ல் பல Aircraft இருக்க முடியுமா?
ஆம். OpenSky API Response-ல் states Array-க்குள் பல Aircraft State Records இருக்கலாம்.
அதனால் ஒரு Raw JSON Record-ஐ ஒரு Aircraft Record என்று கருதக்கூடாது.
8. Analytics Engineering Architecture ஏன் Layers பயன்படுத்துகிறது?
Layers பயன்படுத்துவதால் Source Data, Transformation Logic மற்றும் Business Logic தனித்தனியாக Manage செய்ய முடியும். இதனால் Debugging, Testing, Maintenance, Reusability மற்றும் Team Collaboration மிகவும் எளிதாகும்.
Conclusion
API-யிலிருந்து Data கிடைத்துவிட்டது என்றால் நம்முடைய Analytics வேலை முடிந்துவிட்டது என்று அர்த்தமில்லை.
உண்மையில் அங்கிருந்துதான் Analytics Engineering வேலை ஆரம்பிக்கிறது.
OpenSky API நமக்கு Flight Data-வை JSON Format-ல் வழங்குகிறது. Python அந்த Data-வை Retrieve செய்து Snowflake RAW Layer-ல் Store செய்கிறது.
RAW Layer-ல் Source Data-வை Preserve செய்வது மிகவும் முக்கியம். ஆனால் அந்த Raw JSON Data இன்னும் Power BI Dashboard-க்கு Ready இல்லை.
அதற்காக Data-வை:
என்ற Transformation Layers வழியாக கொண்டு வர வேண்டும். இந்த Transformation-ஐ dbt மூலம் Manage செய்யலாம்.
இதன் மூலம் Source Data-வை Preserve செய்துகொண்டே, Clean, Structured மற்றும் Business-ready Data Model உருவாக்க முடியும்.
இறுதியில் Power BI அந்த Business-ready Data-ஐ பயன்படுத்தி meaningful Analytics மற்றும் Interactive Dashboards உருவாக்கும்.
இதுதான் ஒரு Modern Analytics Engineering Project-ன் முக்கியமான Architecture.
API Data is not automatically Analytics-ready Data.
Data கிடைப்பது முதல் Step மட்டுமே. அதை Trustworthy, Clean, Structured மற்றும் Business-ready Data-ஆக மாற்றுவதுதான் Analytics Engineering-ன் உண்மையான Value.
👉 இந்த concept-ஐ முழுமையாக Demo உடன் பார்க்க கீழே உள்ள video-வை கண்டிப்பாக பாருங்கள்.
Watch the Video
🎥 இந்த topic-ஐ Step-by-Step Demo-வாக பார்க்க கீழே உள்ள YouTube video-வை பாருங்கள்.

கருத்துரையிடுக
0 கருத்துகள்