栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Mybatis动态创建TimescaleDB数据库表

Mybatis动态创建TimescaleDB数据库表

其他部分和正常关系数据库的mybatis过程一样,就是在写mapper.xml文件时需要注意一下:

这里我使用DbTable这个类存储一个表的信息,并作为parameterType传入mapper.xml。这里表名以及字段数量名称都是根据DbTable中内容而定(这里表的字段是一个timestamp类型加n个jsonb类型字段)。

@Data
@Slf4j
@AllArgsConstructor
public class DbTable {
	
	// 表名
    private String tableName; 
    // 表类型,Enum(项目需求,分为STAT和ALM)
    private TableType tableType;
    // 所有Json字段的名称
    private List fieldList;
    // tsdb配置,包括chunk_time_interval和add_retention_policy
    private Map tsdbConfigMap;
    // Json字段里面的key的名称,与题目无关可忽略
    private Map> jsonFieldMap;

    public DbTable(String tableName, TableType tableType, List fieldList, String tsdbConfigJson, Map> jsonFieldMap) throws JsonProcessingException {

        this.tableName = tableName;
        this.tableType = tableType;
        this.fieldList = fieldList;
        this.tsdbConfigMap = JacksonUtil.getInstc().json2map(tsdbConfigJson);
        this.jsonFieldMap = jsonFieldMap;
    }
}

动态表名需要xml文件使用${},而不能用#{},虽然不能防注入。


    
    
        CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE; // 记得加这一句,否则会出现找不到tsdb中函数的错误。
        
        DROP TABLE IF EXISTS ${tableName};

        CREATE TABLE ${tableName} (
        timestamp timestamp without time zone NOT NULL,
        
            ${fieldName} jsonb
        
        );

        SELECT * FROM create_hypertable('${tableName}', 'timestamp', chunk_time_interval =>INTERVAL '${tsdbConfigMap.chunkTimeInterval}');
        SELECT add_retention_policy('${tableName}', INTERVAL '${tsdbConfigMap.dropTimeInterval}');


    

主要就是这句:CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;不加我这儿老是报错,虽然本地Psql已经CREATE EXTENSION了。

另外:我在stackoverflow网站里也发现了同样的问题,他们是对tsdb的函数加个schma前缀,如图。这里我没遇到,可以参考一下。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/300442.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号