大数据学习之Clickhouse

Clickhouse-23.2.1.2537 学习

一、Clickhouse概述

clickhouse 官网网址:https://clickhouse.com/

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。

OLTP(联机事务处理系统)例如mysql等关系型数据库,在对于存储小数据量的时候,查询数据并分析速度很快,OLTP本身其实是一个逻辑上的概念,指的是某个数据库,主要是针对增删改操作的。里面的数据会经常的发生变化。
OLAP(联机分析处理系统)指的是数据库中的数据长期不变,有着大量的历史数据,并且可以随时的做分析,而增删改操作很少。

OLAP 种类系统架构的的特点

1、绝大多数是读请求
2、数据以相当大的批次(> 1000行)更新,而不是单行更新;或者根本没有更新。s
3、已添加到数据库的数据不能修改。
4、对于读取,从数据库中提取相当多的行,但只提取列的一小部分。
5、宽表,即每个表包含着大量的列
6、查询相对较少(通常每台服务器每秒查询数百次或更少)
7、对于简单查询,允许延迟大约50毫秒
8、列中的数据相对较小:数字和短字符串(例如,每个URL 60个字节)
9、处理单个查询时需要高吞吐量(每台服务器每秒可达数十亿行)
10、事务不是必须的
11、对数据一致性要求低
12、每个查询有一个大表。除了他以外,其他的都很小。
13、查询结果明显小于源数据。换句话说,数据经过过滤或聚合,因此结果适合于单个服务器的RAM中

二、表操作

数据类型

注意事项:

1、建表写数据类型的时候,严格区分大小写Int32,不能写成int32

2、建表的时候,必须要指定表引擎(详细引擎的使用,后面介绍)

a. 整数类型
UInt8, UInt16, UInt32, UInt64, UInt128, UInt256, Int8, Int16, Int32, Int64, Int128, Int256
Int8 — [-128 : 127]
Int16 — [-32768 : 32767]
Int32 — [-2147483648 : 2147483647]
Int64 — [-9223372036854775808 : 9223372036854775807]
Int128 — [-170141183460469231731687303715884105728 : 170141183460469231731687303715884105727]
Int256 — [-57896044618658097711785492504343953926634992332820282019728792003956564819968 : 57896044618658097711785492504343953926634992332820282019728792003956564819967]
UInt8 — [0 : 255]
UInt16 — [0 : 65535]
UInt32 — [0 : 4294967295]
UInt64 — [0 : 18446744073709551615]
UInt128 — [0 : 340282366920938463463374607431768211455]
UInt256 — [0 : 115792089237316195423570985008687907853269984665640564039457584007913129639935]
b. 字符串类型
String:可变长字符串FixedString(长度):固定长字符串,参数是字节数,--执行效率比String要高
c. 日期类型
Date 年-月-日Date32 年-月-日: 在用输出效果上 与Date3 年-月-日 相同DateTime 年-月-日 时-分-秒DateTime64 年-月-日 时-分-秒.毫秒注: 相同的时间戳放入不同的类型中解析出的值不同,Date与Date32相同
案例:
# 建表语句:create table date_test (date1 Date,date2 Date32,date3 DateTime,date4 DateTime64) ENGINE = TinyLog;# 插入语句:insert into date_test values ('2023-11-21','2023-11-21','2023-11-21','2023-11-21');insert into date_test values (1711435333589,1711435333589,1711435333589,1711435333589);  //2024-03-26 15:33:38
d. UUID类型
clickhouse提供了一个函数:generateUUIDv4() 生成一个 00000000-0000-0000-0000-000000000000 的编号 编号的类型就是UUID类型bee32020-a6cb-49a6-a10b-427381b11613
e. 可为空 Nullable
例如建表的时候,有一个id字段类型时Int32,如果当id不确定的时候,我们应该使用null进行填充,而不应该用默认值0,所以,我们这里应该添加的是null
Nullable(Int32)create table test1 (id Int32,name String) ENGINE = TinyLog;
create table students_test (id Nullable(Int32),name String, gender String, date String) ENGINE = TinyLog;insert into students_test values (null,'张玮2','男','特训营30期');

在这里插入图片描述

f. 数组 Array(T)
字段类型是数组,对于同一个数组,在建表的时候指定数据类型,注意:在MergeTree表引擎中是不允许出现数组嵌套的
注意:需要使用array()函数,将元素组成数组,将来还可以使用toTypeName()查看某一列的数据类型
# 举例:create table t1 (col1 Array(Int8)) ENGINE = TinyLog;insert into t1 values(array(11,12,13));表中传入的0结果为一个地址值
也可使用字符串切分函数:splitByString('分隔符','切分的字符串'),将一个字符串切分开来,将其存储到表中
create table t2 (col1 Array(String)) ENGINE = TinyLog;insert into t2 values(splitByString(' ', 'hello word'));

在这里插入图片描述
在这里插入图片描述

g. 小数类型
# Decimal(P,S),Decimal32(S),Decimal64(S),Decimal128(S)
有符号的定点数,可在加、减和乘法运算过程中保持精度。对于除法,最低有效数字会被丢弃(不舍入)P - 精度。有效范围:[1:38],决定可以有多少个十进制数字(包括分数)。
S - 规模。有效范围:[0:P],决定数字的小数部分中包含的小数位数。
Decimal(4,2)举例:12.12234  Decimal(7,5)
P: 7
S: 5

1、建表语句(入门案例)

-- ck安装后的数据根目录:/var/lib/clickhouse
建表语句规范: 
create table [db.]table_name() ENGINE = ;create table users3 (id Int8,name FixedString(12),gender Nullable(FixedString(3)),clazz String) ENGINE = TinyLog;

2、插入数据

# 基本格式INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...# 举例insert into students_test values (1001,'陆澳','男','特训营24期'),(1002,'李佳豪','男','特训营24期'),(1003,'郭香香','女','特训营24期');insert into students_test values (1004,'王宇杰','男','特训营24期'),(1005,'张怀远','男','特训营24期'),(1006,'史俊超','女','特训营24期');insert into students_test (name,gender,clazz) values ('张玮','男','特训营24期');# 查看表结构desc 表名;

在这里插入图片描述

三、引擎

为何要设置引擎(引擎 的作用):

数据库引擎:

数据库引擎允许您处理数据表。

默认情况下,ClickHouse使用Atomic数据库引擎。它提供了可配置的table engines和SQL dialect。

表引擎(即表的类型)决定了:

  • 数据的存储方式和位置,写到哪里以及从哪里读取数据
  • 支持哪些查询以及如何支持。
  • 并发数据访问。
  • 索引的使用(如果存在)。
  • 是否可以执行多线程请求。
  • 数据复制参数。

1、数据库引擎

1.1 Atomic

clickhouse数据库建库默认指定的数据库引擎

它支持非阻塞的DROP TABLE和RENAME TABLE查询和原子的EXCHANGE TABLES t1 AND t2查询。默认情况下使用Atomic数据库引擎。

数据库Atomic中的所有表都有唯一的UUID,并将数据存储在目录/clickhouse_path/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/,其中xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy是该表的UUID。

路径为:/var/lib/clickhouse/store/07d/07d619c9-d846-4df0-adf9-61b05376a759

在这里插入图片描述

1.2 MySQL

MySQL引擎用于将远程的MySQL服务器中的表映射到ClickHouse中,并允许您对表进行INSERTSELECT查询,以方便您在ClickHouse与MySQL之间进行数据交换

MySQL数据库引擎会将对其的查询转换为MySQL语法并发送到MySQL服务器中,因此您可以执行诸如SHOW TABLESSHOW CREATE TABLE之类的操作。

但您无法对其执行以下操作:

  • RENAME
  • CREATE TABLE
  • ALTER
# 在clickhouse中创建数据库并指定远程的MySQL服务,将其中的某一个数据库映射过来(就将这新建的数据库看成一个远程客户端连接了mysql)# 建库语句CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')# 举例create database IF NOT EXISTS bigdata30_mysql ENGINE = MySQL('192.168.128.100:3306','mysql','root','123456');# 参数理解:host:port — MySQL服务地址,既可以是ip地址,也可以是主机名(如果是主机名,要配置hosts映射)database — MySQL数据库名称user — MySQL用户名password — MySQL用户密码# 操作的注意事项
1、mysql的数据和ck中数据库映射的数据几乎是同步的
2、在任意一端添加数据,另一端都可以观察添加后的结果
3、对于删除数据,只能在mysql端删除,不能够在ck端删除

2、表引擎

2.1 日志引擎
a. Log

LogTinyLog 的不同之处在于,«标记» 的小文件与列文件存在一起。这些标记写在每个数据块上,并且包含偏移量,这些偏移量指示从哪里开始读取文件以便跳过指定的行数。这使得可以在多个线程中读取表数据。对于并发数据访问,可以同时执行读取操作,而写入操作则阻塞读取和其它写入。Log引擎不支持索引。同样,如果写入表失败,则该表将被破坏,并且从该表读取将返回错误。Log引擎适用于临时数据,write-once 表以及测试或演示目的。

# 建表,指定表引擎为Logcreate table students_log (id Int32,name String,gender FixedString(3),clazz String) ENGINE = Log;# 添加数据insert into students_log values (1001,'尚平','男','特训营29期'),(1002,'丁义杰','男','特训营29期'),(1003,'汪权','男','特训营29期');

数据存储情况:

存储路径:/var/lib/clickhouse/data/default/students_log

在这里插入图片描述

b. TinyLog

最简单的表引擎,用于将数据存储在磁盘上。每列都存储在单独的压缩文件中。写入时,数据将附加到文件末尾。

并发数据访问不受任何限制:

  • 如果同时从表中读取并在不同的查询中写入,则读取操作将抛出异常
  • 如果同时写入多个查询中的表,则数据将被破坏。

这种表引擎的典型用法是 write-once:首先只写入一次数据,然后根据需要多次读取。查询在单个流中执行。换句话说,此引擎适用于相对较小的表(建议最多1,000,000行)。如果您有许多小表,则使用此表引擎是适合的,因为它比Log引擎更简单(需要打开的文件更少)。当您拥有大量小表时,可能会导致性能低下,但在可能已经在其它 DBMS 时使用过,则您可能会发现切换使用 TinyLog 类型的表更容易。不支持索引

数据存储情况:

存储路径:/var/lib/clickhouse/data/default/students_test

在这里插入图片描述

c. StripeLog

写数据:

StripeLog 引擎将所有列存储在一个文件中。对每一次 Insert 请求,ClickHouse 将数据块追加在表文件的末尾,逐列写入。

ClickHouse 为每张表写入以下文件:

  • data.bin — 数据文件。
  • index.mrk — 带标记的文件。标记包含了已插入的每个数据块中每列的偏移量。

StripeLog 引擎不支持 ALTER UPDATEALTER DELETE 操作。

读取数据:

带标记的文件使得 ClickHouse 可以并行的读取数据。这意味着 SELECT 请求返回行的顺序是不可预测的。使用 ORDER BY 子句对行进行排序。

CREATE TABLE stripe_log_table(timestamp DateTime,message_type String,message String) ENGINE = StripeLogINSERT INTO stripe_log_table VALUES (now(),'REGULAR','The first regular message')
INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The second regular message'),(now(),'WARNING','The first warning message')# 建表,指定表引擎为Logcreate table students_stripelog (id Int32,name String,gender FixedString(3),clazz String) ENGINE = StripeLog;# 添加数据insert into students_stripelog values (1001,'陆澳','男','特训营24期'),(1002,'李佳豪','男','特训营24期'),(1003,'郭香香','女','特训营24期');

数据存储情况:

存储路径:/var/lib/clickhouse/data/default/students_stripelogs

在这里插入图片描述

2.2 合并树家族
MergeTree

Clickhouse 中最强大的表引擎当属 MergeTree (合并树)引擎及该系列(*MergeTree)中的其他引擎。

MergeTree 系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一个接着一个的快速写入,数据片段在后台按照一定的规则进行合并。相比在插入时不断修改(重写)已存储的数据,这种策略会高效很多。

主要特点:

  • 存储的数据按主键排序。

    这使得您能够创建一个小型的稀疏索引来加快数据检索。

  • 如果指定了 分区键 的话,可以使用分区。

    在相同数据集和相同结果集的情况下 ClickHouse 中某些带分区的操作会比普通操作更快。查询中指定了分区键时 ClickHouse 会自动截取分区数据。这也有效增加了查询性能。

  • 支持数据副本。

    ReplicatedMergeTree 系列的表提供了数据副本功能。更多信息,请参阅 数据副本 一节。

  • 支持数据采样。

    需要的话,您可以给表设置一个采样方法。

# 建表语句规范:
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],...INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = MergeTree()
ORDER BY expr
[PARTITION BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[TTL expr [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'], ...]
[SETTINGS name=value, ...]# 案例
# 建表语句
# 用于排序的字段与分区的字段无需相同create table goods_orders (id String,uname String,goods_name String,price Int64,date Date32) ENGINE = MergeTree() order by date PARTITION BY date;# 插入语句 insert into goods_orders values ('1001','易政','oppo手机',7000,'2023-11-21'),('1002','盛宇豪','机械革命电脑',10000,'2023-11-22'),('1003','陆云龙','iphone14',5000,'2023-11-21'),('1004','雷彭程','AI吸尘器',17000,'2023-11-22');insert into goods_orders values ('1005','小虎','小天才手表',8000,'2023-11-22'),('1006','谷圆圆','投影仪',20000,'2023-11-21'),('1007','彭','水杯',20,'2023-11-22'),('1008','黄磊','iwatch',3000,'2023-11-21');

注意:默认是针对每一批数据按照分区字段的值进行分区

在这里插入图片描述

根据上图所示,并不会立刻的将所有的相同的分区进行合并,如果想要很快的看到结果,可以手动的进行合并

optimize table 表名 final;optimize table goods_orders final;

手动合并后结果/或者是过一段时间自动合并结果

在这里插入图片描述

今后开发的时候,常用的表引擎:针对数据量小的表引擎用TinyLog, 数据量大表引擎就用MergeTree

四、常用函数

4.1 算术函数

对于所有算术函数,结果类型为结果适合的最小数值类型(如果存在这样的类型)。最小数值类型是根据数值的位数,是否有符号以及是否是浮点类型而同时进行的。如果没有足够的位,则采用最高位类型。简单理解:会自动的根据我们的数值大小,来选用最适合的数据类型存储。

# plus(a, b), a + b operator
计算数值的总和。 您还可以将Date或DateTime与整数进行相加。在Date的情况下,和整数相加整数意味着添加相应的天数。对于DateTime,这意味着添加相应的秒数。# minus(a, b), a - b operator
计算数值之间的差,结果总是有符号的。您还可以将Date或DateTime与整数进行相减。见上面的’plus’。# multiply(a, b), a * b operator
计算数值的乘积。# divide(a, b), a / b operator
计算数值的商。结果类型始终是浮点类型。 它不是整数除法。对于整数除法,请使用’intDiv’函数。 当除以零时,你得到’inf’,‘- inf’或’nan’。# intDiv(a,b)
计算数值的商,向下舍入取整(按绝对值)。 除以零或将最小负数除以-1时抛出异常。# max2(a,b)
value1 — 第一个值,类型为Int/UInt或Float。
value2 — 第二个值,类型为Int/UInt或Float。# max2(value1, value2)
value1 — 第一个值,类型为Int/UInt or Float。
value2 — 第二个值,类型为Int/UInt or Float。

在这里插入图片描述

4.2 比较函数

比较函数始终返回0或1(UInt8)。

可以比较以下类型:

  • 数字
  • String 和 FixedString
  • 日期
  • 日期时间

以上每个组内的类型均可互相比较,但是对于不同组的类型间不能够进行比较。

例如,您无法将日期与字符串进行比较。您必须使用函数将字符串转换为日期,反之亦然。

字符串按字节进行比较。较短的字符串小于以其开头并且至少包含一个字符的所有字符串。

等于,a=b和a==b 运算符
不等于,a!=b和a<>b 运算符
少, < 运算符
大于, > 运算符
小于等于, <= 运算符
大于等于, >= 运算符

4.3 数据类型转换

当你把一个值从一个类型转换为另外一个类型的时候,你需要注意的是这是一个不安全的操作,可能导致数据的丢失。数据丢失一般发生在你将一个大的数据类型转换为小的数据类型的时候,或者你把两个不同的数据类型相互转换的时候。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于IDEA调试模式与StopWatch工具类如何优雅实现Java代码执行时间检测统计

目录 1.1、前言1.2、开发环境1.3、传统方式实现1.4、优雅方式实现1.4.1、StopWatch工具简介1.4.2、实现步骤 1.1、前言 作为程序员在我们的日常编码过程中经常需要统计一段代码或者一个方法的执行时间&#xff0c;尤其是当以一个接口的执行响应时间比较长需要优化的时候&#x…

基于PHP技术的校园论坛设计的设计与实现08586

基于PHP技术的校园论坛设计的设计与实现 摘 要 本项目旨在基于PHP技术设计与实现一个校园论坛系统&#xff0c;以提供一个功能丰富、用户友好的交流平台。该论坛系统将包括用户注册与登录、帖子发布与回复、个人信息管理等基本功能&#xff0c;并结合社交化特点&#xff0c;增强…

Vulkan学习——渲染3D模型

摘要&#xff1a;本文简要描述了Vulkan渲染一个3D模型需要做的事情&#xff0c;不会对太细节的内容进行深究。   关键字&#xff1a;Vulkan,Render,3D 源码 1 简介 1.1 Vulkan简介 Vulkan是一个低开销、跨平台的二维、三维图形与计算的应用程序接口&#xff08;API&#x…

创意无界:探索国产创成式填充的无限潜力

在数字艺术与设计的世界中&#xff0c;创新技术不断涌现&#xff0c;而"创成式填充"无疑是其中的一颗璀璨新星。今天米兔要安利的这款国产ps插件-StartaAI拥有强大的AI功能&#xff0c;其AI扩图和局部重绘更是成为PS创成式填充的国产平替。 什么是创成式填充&#x…

PADS设置板框提示不闭合的解决办法

一般是选中join&#xff0c;提示不闭合&#xff0c;不能转成板框&#xff0c;其实直接点击close就好了&#xff0c;报错提示里就有提示&#xff0c;让用close命令试试

基于SpringBoot扶农助农政策管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

html页面可加密吗?

问&#xff1a;html页面可加密吗&#xff1f; 答&#xff1a;可以。 问&#xff1a;怎样加密&#xff1f; 答&#xff1a;看图&#xff1a;

VSCode无法识别 node、npm

一、前提 电脑新安装了node.js&#xff0c;在cmd查看node和npm版本没有问题&#xff0c;但是在VSCode无法识别 1.cmd查看版本&#xff1a; 2.VSCode报错信息&#xff1a; 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果…

面经-计算机基础

1.计算机⽹络 1.1 OSI与TCP/IP各层的结构与功能,都有哪些协议? 计算机网络体系结构 应⽤层 应⽤层 (application-layer &#xff09;的任务是通过应⽤进程间的交互来完成特定⽹络应⽤。 应⽤层协议定 义的是应⽤进程&#xff08;进程&#xff1a;主机中正在运⾏的程序&…

redis,memcached,nginx网络组件

课程目标&#xff1a; 1.网络模块要处理哪些事情 2.reactor是怎么处理这些事情的 3.reactor怎么封装 4.网络模块与业务逻辑的关系 5.怎么优化reactor? io函数 函数调用 都有两个作用&#xff1a;io检测 是否就绪 io操作 1. int clientfd accept(listenfd, &addr, &l…

Eclipse配置Tomcat时无Apache选项问题

有可能你会遇到&#xff0c;安装最新版本Eclipse&#xff0c;但是 Window——Preferences——Servers——Runtime Environments。发现没有Apache选项。&#xff0c;这是因为&#xff0c;默认没有安装J2EE组件&#xff0c;我们可以通过手动安装&#xff0c;来解决这个问题。 一…

硬件实用技巧:cadence Aleego创建焊盘过程

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140110911 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

<电力行业> - 《第11课:配电(1)》

1 配电 配电&#xff08;power distribution&#xff09;是在电力系统中直接与用户相连并向用户分配电能的环节。配电系统由配电变电所、高压配电线路、配电变压器、低压配电线路以及相应的控制保护设备组成。 1.1 概念 配电系统是由多种配电设备&#xff08;或元件&#xf…

vue2中vuedraggable设置部分元素不可拖拽,不可移动

文章目录 前言1、版本2、vuedraggable页面的具体使用3.核心(1) move官网说明(2) 注意点&#xff1a;(3) onDraggableMove方法 总结 前言 需求&#xff1a;左边是复选框&#xff0c;右边是选中的数据&#xff0c;编辑传入的数据不可拖拽&#xff0c;不可移动&#xff08;其实还…

Datax快速使用之牛刀小试

前言 一次我发现业务他们在用 datax数据同步工具&#xff0c;我尤记得曾经 19 年使用过&#xff0c;并且基于当时的版本还修复了个 BUG并且做了数据同步管道的集成开发。没想到时间过的飞快&#xff0c;业务方基于海豚调度 2.0.6 的版本中有在使用&#xff0c;由于业务方还没有…

【启明智显活动分享】 启明与你,上海慕尼黑电子展不见不散!

启明与你&#xff0c;上海慕尼黑电子展不见不散&#xff01;&#x1f389; &#x1f50d; 展会现场&#xff0c;你将亲眼目睹RTOS、LINUX、Android全系列方案及产品的精彩展示。从经典到前沿&#xff0c;一站式满足你的技术探索需求。 &#x1f4a1; 更值得期待的是&#xff0…

Java源码实现《植物大战僵尸》

前言 学Java的朋友们&#xff0c;福利来了&#xff0c;今天小编给大家带来了一款 植物大战僵尸源码&#xff0c;看图: 视频演示 java植物大战僵尸 环境JDK1.8 类继承UML图 源码实现 我们先从main函数看起&#xff0c;继承了javafx.application.Application。JavaFx是Java图形…

mysql5.7.30忘记root密码

windows系统安装了mysql5.7.30&#xff0c;在使用navicat链接mysql时候&#xff0c;提示 如何解决&#xff1a; 打开任务管理器的服务&#xff0c;查看有没有MYSQL服务。 如果没有&#xff0c;则按照下面的csdn博客进行操作。 https://blog.csdn.net/clj198606061111/article…

Eclipse 2024最新版本分享

一、软件介绍 Eclipse是一个开源的、基于Java的可扩展开发平台&#xff0c;最初由IBM公司开发&#xff0c;后于2001年贡献给开源社区&#xff0c;并由Eclipse基金会负责管理和开发。 如果在官网上下载比较慢&#xff0c;可以试试从云盘中下载&#xff0c;解压即可使用。 二、下…

使用Pogo-DroneCAN CANHUB扩展板扩展飞控的CAN口

关键词&#xff1a;Ardupilot&#xff0c;Pixhawk&#xff0c;DroneCAN CANHUB扩展&#xff0c;扩展飞控CAN口 keywords&#xff1a;Ardupilot&#xff0c;Pixhawk&#xff0c;DroneCAN CANHUB Extend 摘要&#xff1a;使用Pogo-DroneCAN CANHUB扩展板扩展飞控CAN口&#xff…