TDengine支持的数据类型

支持的数据类型

使用 TDengine,最重要的是时间戳。创建并插入记录、查询历史记录的时候,均需要指定时间戳。时间戳有如下规则:

  • 时间格式为 YYYY-MM-DD HH:mm:ss.MS,默认时间分辨率为毫秒。比如:2017-08-12 18:25:58.128
  • 内部函数 now 是客户端的当前时间
  • 插入记录时,如果时间戳为 now,插入数据时使用提交这条记录的客户端的当前时间
  • Epoch Time:时间戳可以是一个长整数,表示从从格林威治时间 1970-01-01 00:00:00.000 (UTC/GMT) 开始的毫秒数(相应地,如果所在 Database 的时间精度设置为“微秒”,则长整型格式的时间戳含义也就对应于从格林威治时间 1970-01-01 00:00:00.000 (UTC/GMT) 开始的微秒数;纳秒精度的逻辑也是类似的。)
  • 时间可以加减,比如 now-2h,表明查询时刻向前推 2 个小时(最近 2 小时)。数字后面的时间单位可以是 b(纳秒)、u(微秒)、a(毫秒)、s(秒)、m(分)、h(小时)、d(天)、w(周)。 比如 select * from t1 where ts > now-2w and ts <= now-1w,表示查询两周前整整一周的数据。在指定降采样操作(down sampling)的时间窗口(interval)时,时间单位还可以使用 n(自然月) 和 y(自然年)。
类型Bytes说明
1TIMESTAMP8时间戳。缺省精度毫秒,可支持微秒和纳秒。从格林威治时间 1970-01-01 00:00:00.000 (UTC/GMT) 开始,计时不能早于该时间。(从 2.0.18.0 版本开始,已经去除了这一时间范围限制)(从 2.1.5.0 版本开始支持纳秒精度)
2INT4整型,范围 [-2^31+1, 2^31-1], -2^31 用作 NULL
3BIGINT8长整型,范围 [-2^63+1, 2^63-1], -2^63 用于 NULL
4FLOAT4浮点型,有效位数 6-7,范围 [-3.4E38, 3.4E38]
5DOUBLE8双精度浮点型,有效位数 15-16,范围 [-1.7E308, 1.7E308]
6BINARY自定义记录单字节字符串,建议只用于处理 ASCII 可见字符,中文等多字节字符需使用 nchar。理论上,最长可以有 16374 字节,但由于每行数据最多 16K 字节,实际上限一般小于理论值。binary 仅支持字符串输入,字符串两端需使用单引号引用。使用时须指定大小,如 binary(20) 定义了最长为 20 个单字节字符的字符串,每个字符占 1 byte 的存储空间,总共固定占用 20 bytes 的空间,此时如果用户字符串超出 20 字节将会报错。对于字符串内的单引号,可以用转义字符反斜线加单引号来表示,即 \’
7SMALLINT2短整型, 范围 [-32767, 32767], -32768 用于 NULL
8TINYINT1单字节整型,范围 [-127, 127], -128 用于 NULL
9BOOL1布尔型,{true, false}
10NCHAR自定义记录包含多字节字符在内的字符串,如中文字符。每个 nchar 字符占用 4 bytes 的存储空间。字符串两端使用单引号引用,字符串内的单引号需用转义字符 \’。nchar 使用时须指定字符串大小,类型为 nchar(10) 的列表示此列的字符串最多存储 10 个 nchar 字符,会固定占用 40 bytes 的空间。如果用户字符串长度超出声明长度,将会报错。

TDengine 对 SQL 语句中的英文字符不区分大小写,自动转化为小写执行。因此用户大小写敏感的字符串及密码,需要使用单引号将字符串引起来

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Ruoyi-Vue 是一个基于 Spring Boot 和 Vue.js 的前后端分离式开发平台,支持多数据源配置。而 TDengine 是一个高性能、高可靠、分布式的时序数据库。下面是整合 TDengine 多数据源的步骤: 1. 在 pom.xml 文件引入 TDengine 的 JDBC 驱动包。 ```xml <dependency> <groupId>com.taosdata.jdbc</groupId> <artifactId>taos-jdbc</artifactId> <version>1.1.24</version> </dependency> ``` 2. 在 application.yml 文件配置 TDengine 数据源信息。 ```yaml spring: datasource: primary: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: root taos: driver-class-name: com.taosdata.jdbc.TSDBDriver url: jdbc:TAOS://localhost:6030/db_name?user=user_name&password=password ``` 其 `primary` 是默认的 MySQL 数据源,`taos` 是配置的 TDengine 数据源。 3. 在 MybatisPlusConfig.java 文件配置多数据源。 ```java @Configuration @MapperScan(basePackages = {"com.ruoyi.project.**.mapper"}) public class MybatisPlusConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.taos") public DataSource taosDataSource() { return DataSourceBuilder.create().build(); } @Bean @Primary public DynamicDataSource dataSource(DataSource primaryDataSource, DataSource taosDataSource) { Map<Object, Object> targetDataSources = new HashMap<>(); targetDataSources.put(DataSourceType.PRIMARY.name(), primaryDataSource); targetDataSources.put(DataSourceType.TAOS.name(), taosDataSource); return new DynamicDataSource(primaryDataSource, targetDataSources); } } ``` 这里使用了动态数据源,通过 `DataSourceType` 枚举类来区分数据源类型。 4. 在 DynamicDataSource.java 文件实现动态数据源。 ```java public class DynamicDataSource extends AbstractRoutingDataSource { private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>(); public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources) { super.setDefaultTargetDataSource(defaultTargetDataSource); super.setTargetDataSources(targetDataSources); super.afterPropertiesSet(); } @Override protected Object determineCurrentLookupKey() { return CONTEXT_HOLDER.get(); } public static void setDataSource(String dataSourceType) { CONTEXT_HOLDER.set(dataSourceType); } public static void clearDataSource() { CONTEXT_HOLDER.remove(); } } ``` 这里使用了 ThreadLocal 来保存当前使用的数据源类型。 5. 在 DataSourceAspect.java 文件实现切面拦截。 ```java @Aspect @Component public class DataSourceAspect { @Pointcut("@annotation(com.ruoyi.common.annotation.DataSource)") public void dataSourcePointCut() { } @Around("dataSourcePointCut()") public Object around(ProceedingJoinPoint point) throws Throwable { MethodSignature signature = (MethodSignature) point.getSignature(); DataSource dataSource = signature.getMethod().getAnnotation(DataSource.class); if (dataSource != null) { DynamicDataSource.setDataSource(dataSource.value().name()); } try { return point.proceed(); } finally { DynamicDataSource.clearDataSource(); } } } ``` 这里使用了 AOP 切面拦截,通过注解 `@DataSource` 来指定使用的数据源类型。 6. 在需要使用 TDengine 数据源的方法上加上 `@DataSource(DataSourceType.TAOS)` 注解。 ```java @DataSource(DataSourceType.TAOS) public List<Map<String, Object>> listFromTDengine() { return jdbcTemplate.queryForList("select * from table_name"); } ``` 这样就可以在 Ruoyi-Vue 实现 TDengine 多数据源的配置了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值