Parquet Data Demo
This demo loads real data directly from Parquet files and displays the organizational hierarchy. All data is fetched and processed in your browser using hyparquet.
This demo showcases data from the Haltian IoT platform. Learn how to access this data programmatically via the Data API.
ποΈ Parquet Data Browser
Building Hierarchy from Haltian Sample Dataset
ποΈ Building Hierarchy
π Entity Data Types
π Measurement Data Types
π‘ Device Models
π·οΈ Device Keywords
Data Structure
The parquet dataset uses a hierarchical structure to represent physical locations:
Organization (haltiansalesdemo)
βββ Space (type: location) - e.g., "Oulu Headquarter", "Helsinki Factory"
β βββ Space (type: building) - e.g., "Yrttipellontie 1", "Factory"
β βββ Space (type: floor) - e.g., "3rd floor", "Ground Floor"
β βββ Zone - e.g., "Meeting Room Taika", "Cafeteria"
Key Entities
| Entity | Description | Key Fields |
|---|---|---|
organization | Top-level tenant | id, name |
space | Physical location hierarchy | id, name, type, parentSpaceId, positionGlobal |
zone | Monitored area within a floor | id, name, spaceId, polygonGlobal |
device | IoT sensor | id, tuid, deviceGroupId |
Relationships
- space.parentSpaceId β parent space (location β building β floor)
- zone.spaceId β the floor this zone is on
- device.deviceGroupId β device group for organization
- All entities share organizationId for multi-tenant support
How It Works
This browser uses hyparquet, a pure JavaScript parquet reader:
import { parquetRead } from 'https://cdn.jsdelivr.net/npm/hyparquet/+esm';
import { compressors } from 'https://cdn.jsdelivr.net/npm/hyparquet-compressors/+esm';
// Fetch and parse parquet file - returns array of row objects
async function loadParquet(url) {
const response = await fetch(url);
const arrayBuffer = await response.arrayBuffer();
let rows = [];
await parquetRead({
file: arrayBuffer,
compressors, // Adds ZSTD, gzip, brotli, lz4 support
rowFormat: 'object', // Return {columnName: value} instead of [value]
onComplete: data => { rows = data; }
});
return rows;
}
// Load multiple files in parallel
const [spaces, zones] = await Promise.all([
loadParquet(`${BASE_URL}/space/2026/01/2026_01_01_00_space.parquet`),
loadParquet(`${BASE_URL}/zone/2026/01/2026_01_01_00_zone.parquet`)
]);
// Build hierarchy from relationships
const buildings = spaces.filter(s => s.type === 'building');
const floors = spaces.filter(s => s.type === 'floor');
const floorsInBuilding = floors.filter(f => f.parentSpaceId === building.id);
const zonesOnFloor = zones.filter(z => z.spaceId === floor.id);
Measurement Data
Beyond entity data, the dataset includes time-series measurements:
| Type | Description | Update Frequency |
|---|---|---|
measurementOccupancyStatus | Binary presence (0/1) | Real-time |
measurementOccupancySeconds | Time spent in zone | Aggregated |
measurementOccupantsCount | People count | Real-time |
measurementAmbientTemperature | Temperature (Β°C) | Periodic |
measurementCO2 | COβ concentration (ppm) | Periodic |
measurementDistance | Distance sensor readings | Real-time |
measurementPosition | Asset GPS coordinates | Real-time |
See Sample Data for file naming conventions and download links.
Build This with AI
Want to recreate this demo or build your own variation? Copy this prompt to your AI coding assistant (Claude, ChatGPT, GitHub Copilot, etc.):
You are a data visualization specialist. I need you to build an interactive Parquet data browser for IoT data.
Step 1: Read the Haltian IoT data documentation at https://developer.haltian.io/haltian-iot/apis/data-api/ to understand the data model and relationships.
Step 2: Carefully study the complete implementation at https://developer.haltian.io/demos/parquet-data-demo/ including:
- All entity types and their schemas described on the page
- The data organization hierarchy (buildings β floors β zones β devices)
- The visualization patterns used for each section
Step 3: Build me the same interactive data browser using your preferred technology stack (Python with pandas, JavaScript, Jupyter notebook, or other).
Focus on displaying the hierarchical relationships clearly and making it easy to explore the data structure.
Feel free to modify the prompt to add custom features like data export, advanced filtering, or relationship visualization!