SparkDataFrame操作TDengine

文章目录

      • 前言
      • TDengine安装
        • TDengine支持的数据类型
      • SparkDataFrame连接TDengine

前言

前几天领导让用spark集成TDengine支持读写,没办法只能简单的了解一下TDengine,然后搭建了一个单机版的TDengine测试使用,这里也理解的比较浅显,毕竟时间紧任务重,一切以完成任务为目的。。。

TDengine 是一个高效的存储、查询、分析时序大数据的平台,专为物联网、车联网、工业互联网、运维监测等优化而设计。

所有安装包地址:https://www.taosdata.com/all-downloads
此次安装的linux版本的:TDengine-server-2.4.0.10-Linux-x64.tar.gz

官方安装包地址,代码案例地址,安装卸载地址

TDengine安装

解压:TDengine-server-2.4.0.10-Linux-x64.tar.gz
解压的文件夹下有个install.sh命令,直接运行即可;linux默认安装位置:/etc/taos/

一定要主主机名映射(/etc/hosts)

这里已经安装好了,已经可以启动使用了(默认端口6030),安装就是这么简单!!!
systemctl start taosd		//启动
systemctl status taosd		//查看状态
systemctl stop taosd		//停止

taos  -u root -p			#进入taos  默认用户名root 默认密码taosdata

CREATE TABLE taos001 (ts timestamp, id int, name NCHAR(255), sex BOOL);

TDengine 在 SQL 层面并没有提供修改与删除操作的语句,即不存在 UPDATE , DELETE 语句
	TDengine默认配置下数据不可更新!
	TDengine默认配置下数据存储10年!

CREATE DATABASE [IF NOT EXISTS] db_name [KEEP keep] [DAYS days] [UPDATE 1];
	KEEP是该数据库的数据保留多长天数,缺省是3650天(10年),数据库会自动删除超过时限的数据;
	UPDATE 标志数据库支持更新相同时间戳数据;
建库时不指定 update 参数,则 update 默认为0,表示数据不可修改(相同时间戳的数据直接被丢弃)。
可通过 update 参数配置为可修改,但是在修改时,要求时间戳必须一样,其他字段才能修改成功(显然,时间戳无法修改~)。(即:根据时间戳,后来的值把前面的字节覆盖,数据还是一条)


卸载命令:rmtaos
但实际操作过后  发现卸载后再重新安装,启动还是有问题,后来卸载后,使用find / -name 'taos*'找到所有taos文件夹,删除后再安装就没问题了(实际应用时绝对不可以使用这种操作)

TDengine支持的数据类型

类型 Bytes 说明
1 TIMESTAMP 8 时间戳。缺省精度毫秒,可支持微秒和纳秒。从格林威治时间 1970-01-01 00:00:00.000 (UTC/GMT) 开始,计时不能早于该时间。(从 2.0.18.0 版本开始,已经去除了这一时间范围限制)(从 2.1.5.0 版本开始支持纳秒精度)
2 INT 4 整型,范围 [-2^31+1, 2^31-1], -2^31 用作 NULL
3 BIGINT 8 长整型,范围 [-2^63+1, 2^63-1], -2^63 用于 NULL
4 FLOAT 4 浮点型,有效位数 6-7,范围 [-3.4E38, 3.4E38]
5 DOUBLE 8 双精度浮点型,有效位数 15-16,范围 [-1.7E308, 1.7E308]
6 BINARY 自定义 记录单字节字符串,建议只用于处理 ASCII 可见字符,中文等多字节字符需使用 nchar。理论上,最长可以有 16374 字节,但由于每行数据最多 16K 字节,实际上限一般小于理论值。binary 仅支持字符串输入,字符串两端需使用单引号引用。使用时须指定大小,如 binary(20) 定义了最长为 20 个单字节字符的字符串,每个字符占 1 byte 的存储空间,总共固定占用 20 bytes 的空间,此时如果用户字符串超出 20 字节将会报错。对于字符串内的单引号,可以用转义字符反斜线加单引号来表示,即 \’。
7 SMALLINT 2 短整型, 范围 [-32767, 32767], -32768 用于 NULL
8 TINYINT 1 单字节整型,范围 [-127, 127], -128 用于 NULL
9 BOOL 1 布尔型,{true, false}
10 NCHAR 自定义 记录包含多字节字符在内的字符串,如中文字符。每个 nchar 字符占用 4 bytes 的存储空间。字符串两端使用单引号引用,字符串内的单引号需用转义字符 \’。nchar 使用时须指定字符串大小,类型为 nchar(10) 的列表示此列的字符串最多存储 10 个 nchar 字符,会固定占用 40 bytes 的空间。如果用户字符串长度超出声明长度,将会报错。
11 JSON Json type,only support for tag

SparkDataFrame连接TDengine

pom依赖

<!-- https://mvnrepository.com/artifact/com.taosdata.jdbc/taos-jdbcdriver -->
<dependency>
    <groupId>com.taosdata.jdbc</groupId>
    <artifactId>taos-jdbcdriver</artifactId>
    <version>2.0.36</version>
</dependency>
val conf = new SparkConf().setAppName("test").setMaster("local[4]")
val spark = SparkSession.builder().config(conf).getOrCreate()

//读数据
//注意:TDengine的dbtable属性只支持传输表名,不支持传输sql
//因为有的数据库支持传sql,只需要对sql进行一个封装,比如:
// (select * from tc_a) as temp;其他的数据库是支持这样传dbtable属性值的,但TDengine不支持!!!
val df= spark.read.format("jdbc")
      .option("url", "jdbc:TAOS://127.0.0.1:6030/dbname")
      .option("driver", "com.taosdata.jdbc.TSDBDriver")
      .option("dbtable", "tc_table")
      .option("user", "root")
      .option("password","password")
      .load()
df.show()

//写数据,这里的timestamp对应的数据可能不对,毕竟是之前写的代码,也找不到原始测试代码了
val df = spark.createDataFrame(Seq(
     ("2021-01-02 10:20:20 125","ming", 20, 15552211521),
     ("2021-01-02 10:20:20 126","hong", 19, 13287994007),
     ("2021-01-02 10:20:20 127","zhi", 21, 15552211523)
   )).toDF("timestamp","name", "age", "phone")
 
 val properties = new Properties()
 properties.put("user", "user")
 properties.put("password", "password")
 properties.put("driver","com.taosdata.jdbc.TSDBDriver")
 val df = in.read()
 df.write.mode(SaveMode.Append).jdbc("jdbc:TAOS://127.0.0.1:6030/dbname","tc_table",properties)

你可能感兴趣的:(scala,sql,spark)