Parquet Data Demo

Interactive browser-based exploration of Parquet datasets showing building hierarchy, device inventory, and measurement types

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.

πŸ—‚οΈ Parquet Data Browser

Building Hierarchy from Haltian Sample Dataset

⏳ Loading data from Parquet files...
β€”
Locations
β€”
Buildings
β€”
Floors
β€”
Zones

πŸ—οΈ Building Hierarchy

Loading hierarchy...

πŸ“Š Entity Data Types

Loading...

πŸ“ˆ Measurement Data Types

Loading...

πŸ“‘ Device Models

Loading...

🏷️ Device Keywords

Loading...
πŸ“Š Data source: Haltian Sample Dataset β€’ Loaded via hyparquet

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

EntityDescriptionKey Fields
organizationTop-level tenantid, name
spacePhysical location hierarchyid, name, type, parentSpaceId, positionGlobal
zoneMonitored area within a floorid, name, spaceId, polygonGlobal
deviceIoT sensorid, 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:

TypeDescriptionUpdate Frequency
measurementOccupancyStatusBinary presence (0/1)Real-time
measurementOccupancySecondsTime spent in zoneAggregated
measurementOccupantsCountPeople countReal-time
measurementAmbientTemperatureTemperature (Β°C)Periodic
measurementCO2COβ‚‚ concentration (ppm)Periodic
measurementDistanceDistance sensor readingsReal-time
measurementPositionAsset GPS coordinatesReal-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!