taos创建超表时报错
运行如下命令
let res = await cursor.query("CREATE STABLE meters1 (ts TIMESTAMP, value FLOAT, slot INT,rack INT,nameId VARCHAR(32),adName VARCHAR(32),dbNumber INT,dataType VARCHAR(28), unit VARCHAR(28)) TAGS (location binary(64), groupId int);")
会得到如下的错误信息
{
_status: 'error',
_head: undefined,
_column_meta: undefined,
_data: undefined,
_rows: undefined,
_command: undefined,
_code: 512,
_desc: 'invalid SQL: invalid operation: invalid data type'
}
可以看到上面的报错信息得知是类型错误,
解决方法:
方案一:
1.升级taos数据库,可能是版本低导致不支持VARCHAR类型
https://www.mianshigee.com/tutorial/TDengine/55c6c19cfc7a706e.md
在这个连接中可以看到 在TDengine中,普通表的数据模型中可使用10种数据类型,TIMESTAMP,INT,BIGINT ,FLOAT,DOUBLE , BINARY , SMALLINT , TINYINT , BOOL ,NCHAR。具体说明解释可以在这个链接里去看。
方案二:
1.就是不使用VARCHAR,改为BINARY(n)
注意,BINARY(n) 的 n 值必须为 4 的倍数
创建表值得注意的点,不然又出错了
let res = await cursor.query('CREATE TABLE mes1001 USING meters1 TAGS ("California.SanFrancisco", 2);')
往表里插入数据
let res = await cursor.query(`INSERT INTO mes1001 VALUES (${JSON.stringify(currentTime)}, ${d.value}, ${d.slot}, ${d.rack}, '${d.nameId}', '${d.adName}', ${d.dbNumber}, '${d.dataType}', '${d.unit}')`);
注意 BINARY类型的要加单引号,不然就报错了
其他语句
创建一个库
await cursor.query("CREATE DATABASE chimeng KEEP 365 DAYS 10 BLOCKS 6 UPDATE 1;");
使用这个库
await cursor.query("USE chimeng;");
创建一个超级表
await cursor.query("CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int);")
创建表
await cursor.query('CREATE TABLE d1001 USING meters TAGS ("California.SanFrancisco", 2);')
插入多条
await cursor.query (`INSERT INTO d1001 VALUES ('2022-07-13 14:06:32.272', 10.2, 219, 0.32) ('2020-07-13 14:06:32.272', 10.2, 219, 0.32) ('2023-03-13 14:06:32.272', 10.2, 219, 0.32)`);
插入一条
await cursor.query(`INSERT INTO d1001 VALUES (${currentTime}, 23, 220, 0.23);`)
查询
let res = await cursor.query('select * from d1001')
res.toString();
console.log(res._data);
杂记
在 Taos 中,可以使用 create stable
命令来创建一个超表。超表是指带有时间戳列的表,用于存储时间序列数据。以下是一个示例超表的创建命令:
create stable db_name.table_name (ts timestamp, col1 int, col2 float) tags(tag1 N, tag2 N)
在上述命令中,db_name
是数据库的名称,table_name
是超表的名称。通过在命令中指定一个 ts
列,可以将该表设置为超表。在 Taos 中,时间戳列的值必须为 int
类型,表示时间戳的秒数。
示例命令中还指定了一个 col1
列和一个 col2
列,这两列可以用于存储需要存储的数据。另外,该示例命令还指定了 tags
,用于定义标签。标签是可以附加到超表中的键值对,可以帮助我们更好的管理和查询超表数据。
在创建超表时,还可以指定一些其他参数,例如分区策略、压缩等级等。例如,以下命令创建了一个名为 my_table
的超表,使用了时间分区策略、FPGA 压缩等级等。