IoTDB Node.js client provides two distinct tablet interfaces for tree and table models, matching the design of C# and Java clients.
Used with Session and SessionPool for timeseries data.
interfaceTreeTablet{deviceId: string;// Full device path, e.g., "root.sg.device1"measurements: string[];// Sensor names, e.g., ["temperature", "humidity"]dataTypes: number[];// Data type for each measurementtimestamps: number[];// Timestamps in millisecondsvalues: any[][];// Values array [rows][columns]}awaitsession.insertTreeTablet({deviceId: 'root.factory.workshop1.device1',measurements: ['temperature','humidity','pressure'],dataTypes: [TSDataType.FLOAT,TSDataType.FLOAT,TSDataType.DOUBLE],timestamps: [Date.now(),Date.now()+1000,Date.now()+2000],values: [[25.5,60.0,101.3],[26.0,61.5,101.2],[26.5,62.0,101.1],],});Used with TableSessionPool for relational data.
interfaceTableTablet{tableName: string;// Table namecolumnNames: string[];// All column names including time, tags, fieldscolumnTypes: number[];// Data type for each columncolumnCategories: ColumnCategory[];// Category for each columntimestamps: number[];// Timestamps in millisecondsvalues: any[][];// Values array [rows][columns]}Matches C# and Java client definitions:
enumColumnCategory{TAG=0,// Tag column - indexed for WHERE clause filteringFIELD=1,// Field column - measurement valuesATTRIBUTE=2,// Attribute column - metadata not indexedTIME=3,// Time column (reserved for internal use only)}Important: TIME is reserved for internal use. Do not use it in columnCategories arrays. Timestamps are handled separately via the timestamps array.
awaittablePool.insertTablet({tableName: 'sensor_data',columnNames: ['device_id','model','temperature','humidity'],columnTypes: [TSDataType.STRING,TSDataType.STRING,TSDataType.FLOAT,TSDataType.FLOAT],columnCategories: [ColumnCategory.TAG,// device_id - indexed tagColumnCategory.ATTRIBUTE,// model - metadataColumnCategory.FIELD,// temperature - measurementColumnCategory.FIELD// humidity - measurement],timestamps: [Date.now(),Date.now()+1000],values: [['device_001','model_A',25.5,60.0],['device_001','model_A',26.0,61.5],],});- Used to identify devices or entities
- Typically indexed for fast lookups
- Example: device_id, sensor_id
- Actual measurement values
- The data being recorded
- Example: temperature, humidity, pressure
- Metadata about the device or measurement
- Static or slowly changing values
- Example: model, location, version
- Timestamp column
- Only one TIME column per table
- Always required
awaitsession.insertTablet({deviceId: 'root.test.device1',measurements: ['sensor1'],dataTypes: [TSDataType.FLOAT],timestamps: [Date.now()],values: [[25.5]],});awaitsession.insertTreeTablet({deviceId: 'root.test.device1',measurements: ['sensor1'],dataTypes: [TSDataType.FLOAT],timestamps: [Date.now()],values: [[25.5]],});awaittablePool.insertTablet({tableName: 'my_table',columnNames: ['device_id','sensor1'],columnTypes: [TSDataType.STRING,TSDataType.FLOAT],columnCategories: [ColumnCategory.TAG,ColumnCategory.FIELD],timestamps: [Date.now()],values: [['device_001',25.5]],});The old insertTablet() method is still available but deprecated. It internally calls insertTreeTablet() for backward compatibility.