Moose Stack

Moose OLAP

Supported Types

Viewing:

Supported Column Types

Moose supports a comprehensive set of ClickHouse column types across both TypeScript and Python libraries. This guide covers all supported types, their syntax, and best practices for defining table schemas.

Basic Types

String Types

interface User {
  string: string;                             // String
  lowCardinality: string & LowCardinality;    // LowCardinality(String)
  uuid: string & tags.Format<"uuid">;         // UUID (with typia tags)
}
ClickHouse TypeTypeScriptDescription
StringstringVariable-length string
LowCardinality(String)string & LowCardinalityOptimized for repeated values
UUIDstring & tags.Format<"uuid">UUID format strings

Numeric Types

Integer Types

import { ClickHouseInt } from "@514labs/moose-lib";
 
interface Metrics {
  user_id: number & ClickHouseInt<"int32">;
  count: number & ClickHouseInt<"uint64">;
  small_value: number & ClickHouseInt<"int8">;
}
ClickHouse TypeTypeScriptDescription
Int8number & ClickHouseInt<"int8">-128 to 127
Int16number & ClickHouseInt<"int16">-32,768 to 32,767
Int32number & ClickHouseInt<"int32">-2,147,483,648 to 2,147,483,647
Int64number & ClickHouseInt<"int64">-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
UInt8number & ClickHouseInt<"uint8">0 to 255
UInt16number & ClickHouseInt<"uint16">0 to 65,535
UInt32number & ClickHouseInt<"uint32">0 to 4,294,967,295
UInt64number & ClickHouseInt<"uint64">0 to 18,446,744,073,709,551,615

Floating Point Types

interface SensorData {
  temperature: number & tags.Type<"float">; // Float32
  humidity: number;     // Float64
}
ClickHouse TypeTypeScriptDescription
Float64numberfloating point number

Decimal Types

import { ClickHouseDecimal } from "@514labs/moose-lib";
 
interface FinancialData {
  amount: string & ClickHouseDecimal<10, 2>;  // Decimal(10,2)
  rate: string & ClickHouseDecimal<5, 4>;     // Decimal(5,4)
}
ClickHouse TypeTypeScriptDescription
Decimal(P,S)string & ClickHouseDecimal<P,S>Fixed-point decimal

Boolean Type

interface User {
  is_active: boolean;
  verified: boolean;
}
ClickHouse TypeTypeScriptDescription
Booleanbooleanboolean

Date and Time Types

import { ClickHousePrecision } from "@514labs/moose-lib";
 
interface Event {
  created_at: Date;                                    // DateTime
  updated_at: Date & ClickHousePrecision<3>;          // DateTime(3)
  birth_date: Date;                                    // Date
}
ClickHouse TypeTypeScriptDescription
DateDateDate only
Date16DateCompact date format
DateTimeDateDate and time
DateTime(P)Date & ClickHousePrecision<P>DateTime with precision

Network Types

import { tags } from "typia";
 
interface NetworkEvent {
  source_ip: string & tags.Format<"ipv4">;
  dest_ip: string & tags.Format<"ipv6">;
}
ClickHouse TypeTypeScriptDescription
IPv4string & tags.Format<"ipv4">IPv4 addresses
IPv6string & tags.Format<"ipv6">IPv6 addresses

Complex Types

Array Types

Arrays are supported for all basic types and some complex types.

interface User {
  tags: string[];           // Array(String)
  scores: number[];         // Array(Float64)
  metadata: Record<string, any>[];  // Array(Json)
  tuple: {
    name: string;
    age: number;
  } & ClickHouseNamedTuple[]; // Array(Tuple(String, Int32))
}

Map Types

Maps store key-value pairs with specified key and value types.

interface User {
  preferences: Record<string, string>;     // Map(String, String)
  metrics: Record<string, number>;         // Map(String, Float64)
}

Nested Types

Nested types allow embedding complex objects within tables.

interface Address {
  street: string;
  city: string;
  zip: string;
}
 
interface User {
  name: string;
  address: Address;  // Nested type
}

Named Tuple Types

Named tuples provide structured data with named fields.

import { ClickHouseNamedTuple } from "@514labs/moose-lib";
 
interface Point {
  x: number;
  y: number;
}
 
interface Shape {
  center: Point & ClickHouseNamedTuple;  // Named tuple
  radius: number;
}

Enum Types

Enums map to ClickHouse enums with string or integer values.

enum UserRole {
  ADMIN = "admin",
  USER = "user",
  GUEST = "guest"
}
 
interface User {
  role: UserRole;  // Enum with string values
}

Special Types

JSON Type

The Json type stores arbitrary JSON data.

interface Event {
  metadata: Record<string, any>;  // Json
  config: any;                    // Json
}

Nullable Types

All types support nullable variants using optional types.

interface User {
  name: string;           // Required
  email?: string;         // Nullable
  age?: number;           // Nullable
}

Table Engines

Moose supports all common ClickHouse table engines:

EnginePythonDescription
MergeTreeClickHouseEngines.MergeTreeDefault engine
ReplacingMergeTreeClickHouseEngines.ReplacingMergeTreeDeduplication
SummingMergeTreeClickHouseEngines.SummingMergeTreeAggregates numeric columns
AggregatingMergeTreeClickHouseEngines.AggregatingMergeTreeAdvanced aggregation
import { ClickHouseEngines } from "@514labs/moose-lib";
 
const userTable = new OlapTable<User>("users", {
  engine: ClickHouseEngines.ReplacingMergeTree,
  orderByFields: ["id", "updated_at"]
});

Best Practices

Type Selection

  • Use specific integer types when you know the value ranges to save storage
  • Prefer Float64 for most floating-point calculations unless storage is critical
  • Use LowCardinality for string columns with repeated values
  • Choose appropriate DateTime precision based on your accuracy needs

Performance Considerations

  • Order columns by cardinality (low to high) for better compression
  • Use ReplacingMergeTree for tables with frequent updates
  • Specify orderByFields for optimal query performance
  • Consider LowCardinality for string columns with < 10,000 unique values